次のコード (MSDN のサンプルを少し変更したもの) を使用して、プロセスに対するデバッグ権限があるかどうかを確認しています。そうでない場合は、それらを設定しようとします。
int SetDebugPriv()
{
HANDLE TokenHandle;
LUID lpLuid;
TOKEN_PRIVILEGES NewState;
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &TokenHandle))
{
//failed
return 0;
}
if(!LookupPrivilegeValue(NULL, "SeDebugPrivilege" , &lpLuid))
{
//failed
CloseHandle(TokenHandle);
return 0;
}
NewState.PrivilegeCount = 1;
NewState.Privileges[0].Luid = lpLuid;
NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(!AdjustTokenPrivileges(TokenHandle, FALSE, &NewState, sizeof(NewState), NULL, NULL))
{
//failed
CloseHandle(TokenHandle);
return 0;
}
CloseHandle(TokenHandle);
return 1;
}
現在、Windows XP および 2003 の特定のアカウントで、トークンを設定しようとすると、アクセス拒否エラーが発生します。私の推測では、その特定のトークンを設定する権限がないため、その特定のトークンを設定することはできません。非管理者アカウントまたは権限の低いアカウントにデバッグ トークンを設定するにはどうすればよいですか?
コードは大歓迎です。
ありがとう