Wie zu verwenden ZwQueryInformationProcess zu bekommen ProcessImageFileName in einem kernel-Treiber?

Ich Schreibe ein einfaches kernel-Treiber für meine Anwendung (man denke an eine sehr einfache anti-malware-Anwendung.)

Habe ich eingehakt ZwOpenFile() und verwendet PsGetCurrentProcess() den Griff zu bekommen, um die Anrufer-Prozess.

Gibt es eine PEPROCESS Struktur:

PEPROCESS proc = PsGetCurrentProcess();

Ich bin mit ZwQueryInformationProcess() um die PID und ImageFileName:

DbgPrint("ZwOpenFile Called...\n");
DbgPrint("PID: %d\n", PsGetProcessId(proc));
DbgPrint("ImageFileName: %.16s\n", PsGetProcessImageFileName(proc));

ist und zu versuchen, den Prozess FullPath diesem Weg (aber ich bekomme 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);

Wie zu verwenden ZwQueryInformationProcess zu bekommen ProcessImageFileName in einem kernel-Treiber?

Wie Sie sehen str.Buffer leer oder gefüllt mit Müll. Vielleicht ein Puffer-überlauf beim Befüllen des str über ZwQueryInformationProcess() löst den BSOD.

Wie zu verwenden ZwQueryInformationProcess zu bekommen ProcessImageFileName in einem kernel-Treiber?

Jede mögliche Hilfe würde geschätzt.

InformationsquelleAutor fardjad | 2010-09-14
Schreibe einen Kommentar