c++ - tiene - Rastreando qué proceso ha abierto un archivo en particular
la accion no se puede completar porque otro programa tiene abierto el archivo pdf (4)
Sysinternals hizo un muy buen trabajo al hacerlo y explicarlo, que algunos códigos fuente de la versión anterior todavía están disponibles aquí, por ejemplo, y el código está bien documentado (imho). También podría ser un buen comienzo.
Desde el modo kernel en Windows, puedo interceptar y supervisar 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 lo 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 por adelantado.
/ Robert
Usaría la aplicación "handle.exe" de Sysinternals.
O bien, ¿estás tratando de hacer esto programmactically?
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 controlador de dispositivo virtual, Filevxd.vxd. Se carga dinámicamente y, en su inicialización, instala un filtro de sistema de archivos a través del 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 controlador del sistema de archivos que crea y conecta los objetos del dispositivo de filtrado a los objetos del dispositivo del sistema de archivos de destino para que FileMon vea todas las solicitudes de IRP y FastIO dirigidas a las unidades. Cuando FileMon ve una llamada abierta, crear o cerrar, actualiza una tabla hash interna que sirve como la asignación entre los identificadores de archivos internos y los nombres de las rutas de archivos. Cada vez que ve llamadas basadas en el control, busca el identificador en la tabla hash para obtener el nombre completo para mostrar. Si un acceso basado en el control hace referencia a un archivo abierto antes de iniciarse FileMon, FileMon no podrá encontrar el mapeo en su tabla hash y simplemente presentará el valor del identificador.
-Adán
Simplemente use Win32 N.API para obtener el pid del manejador de Archivo. Es una pregunta frecuente durante 15 años ...