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 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.
Jede mögliche Hilfe würde geschätzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der MSDN-Dokumentation für diese API zeigen, dass
Mit diesem Gedanken im Hinterkopf schlage ich vor, Sie versuchen, ändern Sie den Puffer-Struktur wie diese:
Zusätzlich muss der code schauen und den Fehler behandeln den Fall, beschrieben in der Dokumentation hier. Dies kann, warum Sie verpasste den BSOD auslösen Fall.
//Deklarieren Sie dieses Stück code in der header-Datei, falls verfügbar, sonst vor der definition einer Funktion..
//Definition Einer Funktion
//Funktion Aufrufen.. Schreibt dieses Stück code in PreOperation Rufen Sie zurück und IRQ werden sollte PASSIVE_LEVEL
in fullPath variable gibt den Vollständigen Pfad Prozess .. Wie wenn der Prozess explorer.exe dann Pfad so Aussehen:-
Hinweis:- \Device\HarddiskVolume3 Pfad kann geändert werden durch Maschine und unterschiedliche Lautstärke der Festplatte dies ist ein Beispiel in meinem Fall.
ZwQueryInformationProcess
braucht eineHANDLE
, nicht einPROCESS
!Sie benötigen
ObOpenObjectByPointer
man den Griff zuerst.