Rastrear qué proceso ha abierto un archivo en particular.
-
04-07-2019 - |
Pregunta
Desde el modo kernel en Windows, puedo interceptar y monitorear virtualmente todas las acciones realizadas en un disco en particular. Cuando se abre un archivo para cualquier propósito, obtengo un evento.
Ahora quiero rastrear qué aplicación la abrió. Creo que esto debería ser posible pero no sé cómo.
Estoy usando las funciones estándar de administración de archivos en Windows Win32 API.
Gracias de antemano.
/ Robert
Solución
Simplemente use Win32 N.API para obtener el pid desde el controlador de archivos. Es una pregunta frecuente durante 15 años ...
Otros consejos
Sysinternals Filemon (gratis) hace esto, y mejor aún describen cómo lo hicieron:
Para el controlador de Windows 9x, el corazón de FileMon está en el dispositivo virtual Conductor, Filevxd.vxd. Es dinamicamente Cargado, y en su inicialización. instala un filtro de sistema de archivos a través de la Servicio VxD, IFSMGR_InstallFileSystemApiHook, para insertarse en la cadena de llamadas de Todas las solicitudes del sistema de archivos. En Windows NT el corazón de FileMon es un archivo controlador del sistema que crea y adjunta objetos del dispositivo de filtro a objetos de dispositivo del sistema de archivos de destino para FileMon verá todos los IRP y Solicitudes FastIO dirigidas a unidades. Cuando FileMon vea una apertura, cree o cerrar llamada, actualiza un interno tabla hash que sirve como mapeo entre los identificadores de archivo internos y el archivo nombres de ruta. Siempre que vea llamadas que se basan en el asa, busca el manejar en la tabla hash para obtener el Nombre completo para su visualización. Si un el acceso basado en manejador hace referencia a un archivo abierto antes de que comenzara FileMon, FileMon no podrá encontrar la asignación en su tabla de hash y simplemente presentará el valor del identificador en su lugar.
-Adam
Sysinternals hizo un trabajo tan bueno al hacerlo y al explicarlo, que todavía hay disponible un código fuente de la versión anterior aquí por ejemplo, y el código está bien documentado (imho). También podría ser un buen comienzo.
Utilizaría el " handle.exe " aplicación de Sysinternals.
O, ¿realmente estás tratando de hacer esto programáticamente?