私はすべてのユーザーにわたってiexplore.exeのインスタンスを列挙することに取り組んでいます。マシン上で一致するプロセスのリストを取得することはできますが、ユーザーを識別するには、OpenProcessを使用する必要があります。これは自分のインスタンスで機能しますが、[管理者として実行]と[EnableDebugPriv]を使用しても、アクセスが拒否されたというメッセージが表示されます。私は何かが足りないのですか?iexplore.exeは何らかの形で保護されていますか?
これが私がデバッグプライベートに使用しているものです:
void EnableDebugPriv()
{
HANDLE hToken;
LUID luid;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
if (!::LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))
{
wprintf(_T("ERROR %u\n"),GetLastError());
CloseHandle(hToken);
return;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = luid;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!::AdjustTokenPrivileges(hToken, false, &tkp, sizeof(tkp), NULL, NULL))
{
wprintf(_T("ERROR %u\n"),GetLastError());
CloseHandle(hToken);
return;
}
CloseHandle(hToken);
wprintf(_T("Should have worked"));
}
これを実行してもエラーは発生しません。実行するとACCESSDENIEDエラーが発生する
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_READ|PROCESS_TERMINATE , FALSE, pe32.th32ProcessID );
私に属していないプロセスの場合。「その他」のユーザーは、コントロールパネルから通常の方法でこのマシン上に作成された標準アカウントとゲストアカウントです。どんなアイデアでも大歓迎です。私は立ち往生しています!最終的には、ユーザーにアプリをシャットダウンする機能を提供したいのですが、PROCESS_QUERY_LIMITED_INFORMATIONだけでも失敗します。これがIE以外の他のアプリケーションの問題であるかどうかを確認する必要があります。
更新私は最終的にこれを機能させました。代わりに、エラーはOpenProcessTokenにありました。そして、私は私が求めたものとは異なる特権を必要としていました。