Traccia del processo che ha aperto un determinato file
-
04-07-2019 - |
Domanda
Dalla modalità kernel in Windows sono in grado di intercettare e monitorare praticamente tutte le azioni eseguite su un determinato disco. Quando un file viene aperto per qualsiasi scopo ottengo un evento.
Ora voglio tracciare quale applicazione l'ha aperta. Penso che questo dovrebbe essere possibile ma non so come.
Sto usando le funzioni standard di gestione dei file nell'API Windows Win32.
Grazie in anticipo.
/ Robert
Soluzione
Basta usare Win32 N.API per ottenere il pid dall'handle File. È una FAQ per 15 anni ...
Altri suggerimenti
Sysinternals Filemon (gratuito) fa questo, e meglio ancora descrivono come lo hanno fatto:
Per il driver di Windows 9x, il cuore di FileMon è nel dispositivo virtuale driver, Filevxd.vxd. È dinamico caricato e nella sua inizializzazione esso installa un filtro del file system tramite Servizio VxD, IFSMGR_InstallFileSystemApiHook, a inserirsi nella catena di chiamate di tutte le richieste del file system. Su Windows NT il cuore di FileMon è un file driver di sistema che crea e collega gli oggetti dispositivo filtro a oggetti dispositivo file system di destinazione così che FileMon vedrà tutti gli IRP e Richieste FastIO indirizzate alle unità. Quando FileMon vede un open, crea o chiamata chiusa, aggiorna un interno tabella hash che funge da mappatura tra handle di file interni e file nomi dei percorsi. Ogni volta che vede le chiamate che sono basati su handle, cerca il file gestire nella tabella hash per ottenere il file nome completo per la visualizzazione. Se una l'accesso basato su handle fa riferimento a un file aperto prima dell'avvio di FileMon, FileMon non riuscirà a trovare la mappatura nella sua tabella hash e presenterà semplicemente il file gestire invece il valore.
-Adam
Sysinternals ha fatto un ottimo lavoro nel farlo e nel spiegarlo, che alcuni codici sorgente della vecchia versione sono ancora disponibili qui per esempio, e il codice è ben documentato (imho). Potrebbe anche essere un buon inizio.
Vorrei usare il " handle.exe " app da Sysinternals.
O stai davvero provando a farlo programmaticamente?