Как использовать ZwQueryInformationProcess для получения ProcessImageFileName в драйвере ядра?

Я пишу простой драйвер ядра для своего приложения (подумайте об очень простом приложении для защиты от вредоносных программ.)

Я подключил 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);

DbgView Output

Как видите, str.Buffer - это пустой или заполненный мусором. Возможно, переполнение буфера при заполнении str через ZwQueryInformationProcess () запускает BSOD.

alt text

Любая помощь будет принята с благодарностью.

9
задан fardjad 24 August 2013 в 19:53
поделиться