Я пишу драйвер ядра windows, поэтому мне нужно получить путь к процессу. Я написал GetProcessPath
функцию, но мой код вызывает ошибку: pointer to incomplete class type is not allowed
для myPEB
(тип PPEB) переменной. Поэтому я могу Не используйте myPEB->ProcessParameters->ImagePathName
для получения пути к процессу. Пожалуйста, помогите мне решить эту проблему. Я использую Visual Studio 2019, Last SDK и Last WDK.
PVOID
GetProcessPath()
{
NTSTATUS status;
if (NT_SUCCESS(InitZwQueryInformationProcess())) {
__try {
PEPROCESS peProcess = IoGetCurrentProcess();
HANDLE hObjectProcess;
OBJECT_ATTRIBUTES objectAttributes;
CLIENT_ID ٌlientID;
ULONG returnedLength;
InitializeObjectAttributes(&objectAttributes, 0, OBJ_KERNEL_HANDLE, 0, 0);
ٌlientID.UniqueProcess = PsGetProcessId(peProcess);
ٌlientID.UniqueThread = 0;
status = ZwOpenProcess(&hObjectProcess,
0x0400,
&objectAttributes,
&ٌlientID);
if (!NT_SUCCESS(status)) {
DbgPrint("GetProcessFileName: ZwOpenProcess failed: %08X\n", status);
return NULL;
}
status = ZwQueryInformationProcess(hObjectProcess, ProcessImageFileName, NULL, 0, &returnedLength);
if (status == STATUS_INFO_LENGTH_MISMATCH)
{
PROCESS_BASIC_INFORMATION pProcInfo;
ULONG ulRet = 0;
status = ZwQueryInformationProcess(hObjectProcess, ProcessBasicInformation, &pProcInfo, sizeof(PROCESS_BASIC_INFORMATION), &ulRet);
if (NT_SUCCESS(status))
{
PPEB myPEB = NULL;
myPEB = pProcInfo.PebBaseAddress;
if (myPEB != NULL)
{
//pointer to incomplete class type is not allowed is here:
return myPEB->ProcessParameters->ImagePathName;
}
ZwClose(hObjectProcess);
}
}
ZwClose(hObjectProcess);
}
__except (EXCEPTION_EXECUTE_HANDLER) {
DbgPrint("GetProcessFileName: EXCEPTION - %08x\n", GetExceptionCode());
}
}
return NULL;
}