我一直在尝试通过使用 ZwQuerySystemInformation 函数调用来确定程序是否在系统模式调试器下运行。
到目前为止,我有以下代码,我正在加载 ntdll.dll 库并获取 ZwQuerySystemInformation 的地址。然后我必须使用适当的参数调用我返回的句柄以获取 SystemKernelDebuggerInformation 信息。
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <Winternl.h>
int _tmain(int argc, _TCHAR* argv[])
{
/* load the ntdll.dll */
HMODULE lib = LoadLibrary(_T("ntdll.dll"));
FARPROC fun = GetProcAddress(lib, "ZwQuerySystemInformation");
if(fun == NULL) {
printf("Error: could not find the function ZwQuerySystemInformation in library ntdll.dll.");
exit(-1);
}
printf("ZwQuerySystemInformation is located at 0x%08x in ntdll.dll.\n", (unsigned int)fun);
SYSTEM_INFORMATION_CLASS sic = SystemKernelDebuggerInformation;
SYSTEM_BASIC_INFORMATION sbi;
NTSTATUS WINAPI temp = NtQuerySystemInformation(sic, &sbi, sizeof(sbi), NULL);
/* wait */
getchar();
return 0;
}
您能告诉我如何调用该函数来获取包含 SystemKernelDebuggerInformation 信息的系统信息吗?那就够了,剩下的我来处理。
谢谢