Windows Kernel driver Prozessinformationen Abfragen



  • Hallo Zusammen,
    Vorab wahrscheinlich ist der Titel falsch gewählt fande ihn aber am besten zum erklären für das was ich vor habe. Mir ist bewusst das es wahrscheinlich keine gute Idee ist den Kernel zu hooken etc.
    Zuerst mein Ziel worauf dann Direkt das Problem folgt:
    Ich schreibe an einem Programm welches dafür sorgt das Time-Waster während der Arbeitszeit (die man über eine Datenbankfile difinieren kann) beendet werden und muss so alle Prozesse durch checken mir ist bewusst das das auch mit win32 geht ich wollte es aber genauer und nutze deshalb PsSetCreateProcessNotifyRoutine in einem Kernel Treiber weil dass, meiner Erfahrung nach, preziser ist.

    Nun das Problem:
    PsSetCreateProcessNotifyRoutine kann weil es eine Kernel driver Funktion ist keine win32 Funktionen aufrufen ich bräuchte aber den path des prozesses der sich da gerade gestartet hat und da meine Frage an euch wie mache ich das?
    Meine Theorie ich könnte wenn PsSetCreateProcessNotifyRoutine Funtion im Kontext des gestarteten userprozesses läuft (so meine Interpretation der Dokumentation) die win32 Funktion laden weil läuft ja dann im userprocess aber wie verklicker ich das meinem Compiler der Ja immer noch für kernel compiliert und einen Anfall bekommt wenn ich nur windows.h includiere(visual c++). Ich hoffe ich habe das nicht zu schrecklich erklärt und konnte es einigermaßen auf den Punkt bringen.

    LG Aron



  • Bei solchen Fragen am besten direkt im englischen suchen ("PsSetCreateProcessNotifyRoutine process path"). Dazu gibt es die gleiche Frage in Get process name form PID in kernel-mode driver ff.
    Also entweder SeLocateProcessImageName und NtQueryInformationProcess
    oder (in #14 erwähnt) PsSetCreateProcessNotifyRoutineEx verwenden.



  • Zu dem Zeitpunkt wo PsSetCreateProcessNotifyRoutine für den neuen Prozess aufgerufen wird sind noch keine DLLs geladen - der Prozess ist da noch komplett "leer". D.h. zu dem Zeitpunkt Usermode-Zeugs aufrufen funktioniert schonmal ganz sicher nicht.

    Ob SeLocateProcessImageName oder NtQueryInformationProcess zu dem Zeitpunkt schon Informationen über den Pfad der EXE liefern können ist auch fraglich.

    PsSetCreateProcessNotifyRoutineEx könnte gehen.

    Nur: ich vermute dass du da "way in over your head" bist. Mach das im Usermode. Keiner hat Lust auf Blue-Screens die von deinem Treiber verursacht werden.


Anmelden zum Antworten