Traçage du processus ayant ouvert un fichier particulier
-
04-07-2019 - |
Question
À partir du mode noyau sous Windows, je peux intercepter et surveiller pratiquement toutes les actions effectuées sur un disque particulier. Quand un fichier est ouvert à quelque fin que ce soit, je reçois un événement.
Maintenant, je veux savoir quelle application l'a ouvert. Je pense que cela devrait être possible, mais je ne sais pas comment.
J'utilise les fonctions de gestion de fichiers standard de l'API Windows Win32.
Merci d'avance.
/ Robert
La solution
Utilisez simplement Win32 N.API pour obtenir le pid à partir du descripteur de fichier. C'est une FAQ depuis 15 ans ...
Autres conseils
Sysinternals Filemon (gratuit) le fait et mieux encore ils décrivent comment ils l'ont fait:
Pour le pilote Windows 9x, le coeur de FileMon est dans le périphérique virtuel pilote, Filevxd.vxd. C'est dynamiquement chargé, et dans son initialisation il installe un filtre de système de fichiers via le Service VxD, IFSMGR_InstallFileSystemApiHook, à s'insère dans la chaîne d'appel de toutes les demandes de système de fichiers. Sur Windows NT le coeur de FileMon est un fichier pilote système qui crée et attache des objets de périphérique de filtre à objets de périphérique du système de fichiers cible afin que FileMon verra tous les IRP et Les demandes FastIO adressées aux lecteurs. Lorsque FileMon voit une ouverture, créez ou appel proche, il met à jour un interne table de hachage qui sert de mappage entre les descripteurs de fichiers internes et les fichiers noms de chemins. Chaque fois qu'il voit des appels qui reposent sur les poignées, il recherche le manipuler dans la table de hachage pour obtenir le nom complet pour l'affichage. Si un L'accès basé sur le handle référence un fichier ouvert avant le démarrage de FileMon, FileMon échouera à trouver la cartographie dans son table de hachage et présentera simplement le la valeur de la poignée à la place.
-Adam
Sysinternals a fait un si bon travail en expliquant que certains codes sources de l'ancienne version sont toujours disponibles ici par exemple, et le code est bien documenté (à mon humble avis). Cela pourrait aussi être un bon début.
Je voudrais utiliser le " handle.exe " application de Sysinternals.
Ou bien, essayez-vous réellement de faire cela par programmation?