プロセスが別のプロセスから終了したかどうかを確認する方法に関するいくつかの投稿を読み(ここでセマンティクスに夢中になっている人もいますが、ユーモアを交えて)、実装しようとしましたが、エラーコード5が発生しています。 ("ERROR_ACCESS_DENIED")いたるところに。
これが私がすることです。
1)プロセス1(P1)はプロセス2を起動し、共有メモリの場所に独自のPIDを書き込みます。
2)プロセス2(P2)は共有メモリからPIDを読み取ります
3)P2はP1のPIDを使用してOpenProcess(...)を呼び出し、後で確認できるハンドルを保存します。
4)P2はP1のPIDを使用してGetExitCodeProcess(...)を繰り返し呼び出し、STILL_ACTIVEコードをチェックします。
上記のメソッドでは、GetExitCodeProcessでACCESS_DENIEDエラーが発生し続けます。私はMSDNのドキュメントから以下のコードを使用してP2の特権を変更しようとしました:
HANDLE proc_h = OpenProcess(SYNCHRONIZE, FALSE, GetCurrentProcessId());
HANDLE hToken;
OpenProcessToken(proc_h, TOKEN_ADJUST_PRIVILEGES, &hToken);
LookupPrivilegeValue(NULL, lpszPrivilege, &luid );
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Enable the privilege
AdjustTokenPrivileges(hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES) NULL,
(PDWORD) NULL);
しかし、OpenProcessToken(...)メソッドの呼び出しでACCESS_DENIEDエラーが発生し続けます。それで、これはある種のシステムレベルのハードルを示していますか?私は自分のマシンの管理者権限を持っており、XPを実行しています。
助けてくれてありがとう。