私は、プロセス トークン
の特権を取得するために、SeDebugPrivilege を使用して任意のプロセスへのハンドルを取得する方法に関する Microsoft に従っています。SE_DEBUG
ただし、ハンドルを完全な権限で開こうとするとMsMpEng.exe
、エラー コードc0000022
( STATUS_ACCESS_DENIED
) が表示されます。
私は間違いを犯したのか、それともプロセスへのそのレベルのアクセス権を取得することが単に不可能なのか疑問に思っています.
Defender プロセスへのハンドルを開くコードを以下に示します。このブロックはSE_DEBUG
、トークンに特権を追加するためのブロックに続きます。
if (Process32First(hSnap, &pt))
{
do {
if (!strcmp(pt.szExeFile, "MsMpEng.exe"))
{
printf("%d\n", pt.th32ProcessID);
OBJECT_ATTRIBUTES oa = { sizeof(oa), 0, 0, 0, 0 };
CLIENT_ID pid = { (HANDLE)pt.th32ProcessID, NULL };
NTSTATUS status = NtOpenProcess(&hDef, PROCESS_TERMINATE, &oa, &pid);
if (status == STATUS_SUCCESS)
{
printf("Handle to defender opened!");
NtClose(hDef);
}
else
printf("%x", status);
}
} while (Process32Next(hSnap, &pt));
}