32 または 64 (ローカル) マシンで実行中のすべてのプロセスを列挙したいと考えています。WTSEnumerateProcesses と CreateToolhelp32Snapshot のどちらを使用すればよいですか?
1544 次
1 に答える
2
私はCreateToolhelp32Snapshotと言います.NT4を除くすべてのWindowsバージョンで動作します。WinXP では、WTSEnumerateProcesses は、ターミナル サーバー サービスが実行されている場合にのみ機能します (実行中の場合、WTSEnumerateProcesses は、非管理者として実行している場合に想定されていないプロセスに関する情報を提供します。この穴は Vista で閉じられました)。
しかし、2つの関数は同じ情報を提供しないため、何を求めているかによって異なります。内部では、どちらも半文書化されたZwQuerySystemInformationを呼び出すだけです
プロセスの完全なパスを取得することはどちらの方法でも問題があります (GetModuleFileNameEx は WOW64 で失敗し、GetProcessImageFileName はカーネル パスを返し、名前の変更に問題があり、QueryFullProcessImageName は Vista+ であり、パスにスペースがあると思われます)
于 2011-02-01T17:38:57.823 に答える