Tracing welches Verfahren, die eine bestimmte Datei geöffnet
-
04-07-2019 - |
Frage
Von Kernel-Modus in Windows ich in der Lage bin abzufangen und überwachen praktisch alle Aktionen auf einer bestimmten Platte durchgeführt. Wenn eine Datei für jeden Zweck geöffnet wird, erhalte ich ein Ereignis aus.
Jetzt möchte ich die Anwendung verfolgen, die sie geöffnet. Ich denke, dass dies möglich sein soll, aber nicht wissen, wie.
Ich verwende die Standard-Dateiverwaltungsfunktionen in Windows Win32 API.
Vielen Dank im Voraus.
/ Robert
Lösung
Just Win32 N.API verwenden, um die pid aus der Datei-Handle zu erhalten. Es ist eine FAQ für 15 Jahre ...
Andere Tipps
Sysinternals Filemon (kostenlos) tut dies, und noch besser sie beschreiben, wie sie es taten:
Für den Windows 9x-Treiber, das Herz von FileMon ist in den virtuellen Geräten Fahrer, Filevxd.vxd. Es ist dynamisch geladen ist, und in seiner Initialisierung es installiert einen Dateisystemfilter über das VxD Service, IFSMGR_InstallFileSystemApiHook, zu Einsatz selbst auf die Aufrufkette von alle Dateisystemanforderungen. Unter Windows NT das Herz von FileMon ist eine Datei Systemtreiber, der schafft und Filtervorrichtung misst Objekte Zieldateisystemgerät Objekte so dass FileMon alle IRPs sehen und FastIO Anfragen bei Antrieben gerichtet. Wenn FileMon einen unabgeschlossen erstellen oder knapp, aktualisiert er eine interne Hash-Tabelle, die als der Mapping dient zwischen dem internen Dateihandles und Datei Pfadnamen. Immer dann, wenn es sieht Anrufe die Anforderungen abdecken basieren, sieht es auf der Griff in der Hash-Tabelle, die zu erhalten vollständige Namen für die Anzeige. Wenn ein Griff basierte Zugriffs Referenzen eine Datei geöffnet, bevor FileMon gestartet, FileMon scheitern wird die Zuordnung in seinem finden Hashtabelle und die einfach präsentieren Handle Wert statt.
-Adam
Sysinternals hat einen so guten Job bei, es zu tun und es zu erklären, dass einige Quellcode der alten Version noch verfügbar sind hier zum Beispiel, und der Code ist gut dokumentiert (imho). Es könnte ein guter Anfang sein als gut.
Ich würde das "handle.exe" App von Sysinternals verwenden.
Oder versuchen Sie tatsächlich diese programmactically zu tun?