Почему zwqueryvirtualmemory возвращает недопустимый дескриптор?
Привет,
моя конечная цель - попытаться прочитать виртуальную память из процесса. В настоящее время я породил системный поток, который работает в выбранном процессе.
вот пример кода, который, как я думал, будет работать
MEMORY_BASIC_INFORMATION* memory = ExAllocatePoolWithTag(PagedPool, sizeof(MEMORY_BASIC_INFORMATION), '1gaT'); PSIZE_T returnLength = 1; PVOID readAddr = 0; NTSTATUS status = ZwQueryVirtualMemory(PsGetProcessId(IoGetCurrentProcess());, readAddr, MemoryBasicInformation, memory, sizeof(MEMORY_BASIC_INFORMATION), returnLength);
Что я уже пробовал:
Согласно документам, ZwQueryVirtualMemory принимает ProcessHandle в качестве первого параметра. PsGetProcessId возвращает processHandle (PID), поэтому я немного запутался в том, почему он не работает.
Я уже пробовал
ZwCurrentProcess()
функция как параметр ProcessHanlde, который возвращает значение -1. Другие форумы предположили, что это значение -1 является специальным значением, которое все функции, принимающие в processHandle, понимают, что -1 является текущим процессом, однако при использовании в
PsLookupProcessByProcessId(ZwCurrentProcess(), &peprocess);
Я получаю
STATUS_INVALID_CID
это означает, что был указан неверный идентификатор клиента.
любое разъяснение о том, почему это такое поведение, было бы оценено по достоинству.
Спасибо