Я пишу простой драйвер ядра для своего приложения (подумайте об очень простом приложении для защиты от вредоносных программ.)
Я подключил ZwOpenFile ()
и использовал PsGetCurrentProcess ()
, чтобы получить дескриптор вызывающего процесса.
Он возвращает структуру PEPROCESS:
PEPROCESS proc = PsGetCurrentProcess();
Я использую ZwQueryInformationProcess ()
, чтобы получить PID
и ImageFileName
:
DbgPrint("ZwOpenFile Called...\n");
DbgPrint("PID: %d\n", PsGetProcessId(proc));
DbgPrint("ImageFileName: %.16s\n", PsGetProcessImageFileName(proc));
и попытка получить процесс FullPath
таким образом (но я получаю BSOD):
WCHAR strBuffer[260];
UNICODE_STRING str;
//initialize
str.Buffer = strBuffer;
str.Length = 0x0;
str.MaximumLength = sizeof(strBuffer);
//note that the seconds arg (27) is ProcessImageFileName
ZwQueryInformationProcess(proc, 27, &str, sizeof(str), NULL);
DbgPrint("FullPath: %wZ\n", str.Buffer);
Как видите, str.Buffer
- это пустой или заполненный мусором. Возможно, переполнение буфера при заполнении str
через ZwQueryInformationProcess ()
запускает BSOD.
Любая помощь будет принята с благодарностью.