標準ユーザーとして動作しているWindows Server 2008 R2で、タスクマネージャーを開くと、システム上のさまざまなユーザーのすべてのプロセスを確認できます。昇格が必要な[すべてのプロセスを表示]をクリックするオプションがあります。これにより、実際にすべてのプロセスが表示されます。
昇格せずに他のユーザー(他の標準ユーザーまたは管理者ユーザーを含む)からのプロセスを表示できるのはなぜですか?
Windowsシステムコールの観点から、プロセス情報の取得は、パラメーターとして_SYSTEM_PROCESS_INFORMATION
_を指定した NtQuerySystemInformation()
を介して実行できます。
ただし、この動作の真の手掛かりは GetProcessMemoryInfo()
にあり、これは プロセスのセキュリティとアクセス権 で説明されている_PROCESS_QUERY_LIMITED_INFORMATION
_と呼ばれる権限について言及しています。具体的には:
[Windows Vistaの場合] PROCESS_QUERY_INFORMATIONを通じて利用可能な情報のサブセットへのアクセスを提供するために、PROCESS_QUERY_LIMITED_INFORMATION権限が導入されました。
これは、そのページを読み続けると、Vistaの一部のプロセス、特にDRMを使用するプロセスで_PROCESS_QUERY_INFORMATION
_が拒否されるために発生します。したがって、実行中のプロセスに関する情報を提供するために、この簡略版を入手します。
私はまだこれを確認するWindowsボックスではありませんが、すべてのユーザーが特定のプロセスに少なくとも_PROCESS_QUERY_LIMITED_INFORMATION
_を持っているため、自分に属していないプロセスでも限られた情報をクエリできると信じています。それらの存在はそのような特性の1つですが、SteveSがコメントで指摘しているように、詳細は限られています。