Wie verwende ich ZwQueryInformationProcess, um ProcessImageFileName in einem Kernel-Treiber zu erhalten?

9

Ich schreibe einen einfachen Kernel-Treiber für meine Anwendung (denken Sie an eine sehr einfache Anti-Malware-Anwendung.)

Ich habe ZwOpenFile() angehakt und PsGetCurrentProcess() verwendet, um eine Handhabe für den Aufrufer-Prozess zu erhalten.

Es gibt eine PEPROCESS-Struktur zurück:

%Vor%

Ich verwende ZwQueryInformationProcess() , um PID und ImageFileName zu erhalten:

%Vor%

und versuchen, den Prozess FullPath auf diese Weise zu bekommen (aber ich bekomme BSOD):

%Vor%

Wie Sie sehen, ist str.Buffer leer oder mit Müll gefüllt. Möglicherweise löst ein Pufferüberlauf beim Füllen von str via ZwQueryInformationProcess() den BSOD aus.

Jede Hilfe wäre willkommen.

    
fardjad 14.09.2010, 08:14
quelle

3 Antworten

6

Die MSDN-Dokumentation für diese API zeigt dies an

  

Wenn die ProcessInformationClass   Parameter ist ProcessImageFileName, der   Puffer, auf den die   ProcessInformation Parameter sollte sein   groß genug, um einen UNICODE_STRING zu halten   Struktur sowie die Zeichenfolge   selbst. Die Zeichenfolge, die in der   Pufferelement ist der Name des Bildes   Datei.datei.

In diesem Sinne schlage ich vor, dass Sie versuchen, Ihre Pufferstruktur wie folgt zu ändern:

%Vor%

Zusätzlich muss Ihr Code den in den Dokumenten beschriebenen Fehlerfall überprüfen und behandeln. Dies könnte der Grund sein, warum Sie den BSOD-Trigger-Fall verpasst haben.

  

Wenn der Puffer zu klein ist, wird der   Funktion scheitert mit dem   STATUS_INFO_LENGTH_MISMATCH Fehlercode   und der ReturnLength-Parameter ist festgelegt   auf die erforderliche Puffergröße.

    
Steve Townsend 14.09.2010, 14:37
quelle
1

// Deklarieren Sie dieses Codeteil in der Headerdatei, falls vor der Funktionsdefinition anderweitig verfügbar.

%Vor%

// Funktionsdefinition

%Vor%

// Funktionsaufruf .. Schreiben Sie diesen Code in PreOperation Rückruf und IRQ sollte PASSIVE_LEVEL

sein %Vor%

in der FullPath-Variablen gibt es Full Path of Process. Wenn der Prozess explorer.exe ist, sieht der Pfad folgendermaßen aus: -

%Vor%

Hinweis: - \ Device \ HarddiskVolume3 Der Pfad könnte aufgrund von Machine und unterschiedlichem Volume auf der Festplatte geändert werden. Dies ist ein Beispiel in meinem Fall.

    
Kashif Meo 09.11.2016 12:47
quelle
0

ZwQueryInformationProcess benötigt ein HANDLE , nicht ein PROCESS ! Sie müssen ObOpenObjectByPointer verwenden, um das Handle zuerst zu erhalten.

    
Alex 26.05.2014 12:04
quelle

Tags und Links