2012-02-05 18 views
12

私はそのPIDからプロセス名を取得しようとしています。ユーザーは管理者として実行されており、UACが有効で、昇格していません。OpenProcess()がACCESS_DENIEDで失敗した場合、プロセスファイル名をpidから取得する方法は?

services.exeのような一部のシステムプロセスでは、OpenProcess(PROCESS_QUERY_INFORMATION ...ERROR_ACCESS_DENIEDで失敗するようにセキュリティが設定されています。 PROCESS_QUERY_LIMITED_INFORMATIONアクセス権と同じ結果です。しかし、Process Explorerであり、pidとファイル名(昇格していない管理者として実行している場合)と一緒にこれらのプロセスをすべてリストしていることがわかります。

私の質問は、昇格していない管理者がOpenProcess()+ GetProcessImageFileName()の通常のルートに従うことができないので、同じことを(pidからファイル名を取得する)

答えて

9

探している情報は、あなたが(Process32Firstを試してみました提供するQueryFullProcessImageNameを呼び出すことができます)とProcess32Next(?あなたに完全なパスを与えるわけではありませんが、少なくともファイル名を取得させるべきです。

+0

ジムありがとう - すばらしい提案でした。誰かが例を必要とするなら、ここには[MSDN 1](http://msdn.microsoft.com/en-us/library/windows/desktop/ms686701%28v=vs.85%29.aspx) – baderman

3

代わりにPROCESS_QUERY_LIMITED_INFORMATIONを試しましたか?少なくとも実行可能ファイルの名前を指定できる低レベルのアクセスを要求します。それは)CreateToolhelp32Snapshot(によって取得ハンドルに)あなたは

+1

申し訳ありませんが、私はあなたが答えた直前に編集しました。はい、私はこれを試して、それは助けにはなりません。同じアクセス拒否エラーです。 – haimg

+1

PROCESS_QUERY_LIMITED_INFORMATIONで開かれたシステムプロセスのハンドルは、QueryFullProcessImageNameを呼び出すことを許可しません。エラー31で失敗します。「システムに接続されているデバイスが機能していません。私のプログラムが完全な管理者権限(SE_DEBUG特権なし)で実行されている場合でも。 –

5

システムプロセス(より正確には、別のアカウント(この場合はユーザSYSTEM)で実行されているプロセス)を開き、プロセスに対してSE_DEBUG特権を有効にすることはできません。 adminとして実行している場合は、簡単に特権を設定できます。 http://support.microsoft.com/kb/131065/en-us

+1

その記事は少しです時代遅れの残念ながら、昇格(UAC)しない限りSeDebugPrivilegeを取得することはできません。 – haimg

+0

@haimg:私はちょっとグーグルでは見つけられませんでしたが、それはどこにリンクがありますか? – pezcode

+1

私は自分のコードでそれを試みました...しかし、ここを見てください:http://msdn.microsoft.com/en-us/library/bb530410.aspx。それはSeDebugPrivilegeが制限付きトークン(管理者用)から削除されたことを示します。 – haimg

関連する問題