Pregunta Monitoreo de ciertas llamadas al sistema realizadas por un proceso en Windows


Me gustaría poder supervisar ciertas llamadas al sistema realizadas por un proceso, principalmente llamadas de E / S de archivos. En Linux, probablemente pueda escapar usando parámetros adecuados, pero ¿cómo puedo hacer esto en Windows?

Estoy interesado principalmente en ejecutar un proceso y averiguar qué archivos ha leído y escrito.

EDITAR: Quiero hacer esto programáticamente desde otro proceso. Soy consciente de ProcessMonitor, pero me gustaría recibir los datos en un formulario que puedo importar a otro programa para su posterior análisis.

EDITAR: Si reduzco mis requisitos aún más, probablemente sea suficiente para poder monitorear las llamadas a CreateFile (). En realidad, solo me interesan los archivos que se abren y si están abiertos para leer / escribir o simplemente leer. Otro requisito que realmente no dije es que velocidad es bastante importante; Estaba planeando hacer esto para cosas como la compilación de un archivo C ++, y desplegar una GUI completa que genera un archivo de registro de 20MB tendrá gastos indirectos prohibitivos.

EDITAR: También sería bueno si no requiere privilegios administrativos.


32
2018-05-14 18:06


origen


Respuestas:


Hay varias opciones en Windows.

Kit de herramientas de rendimiento de Windows se puede usar para habilitar el seguimiento de varios eventos del sistema, incluida la E / S de archivos, e incluye herramientas para procesar y ver estos eventos. Puede usar xperf para comenzar a rastrear diversas clases de eventos y guardarlos en un archivo ETL que luego puede procesar o ver usando las mismas herramientas más adelante.

Monitor de proceso de SysInternals es otra opción, muy fácil de usar, y le permite ver rápidamente todos los archivos y accesos al registro que está haciendo cualquier proceso en el sistema. http://blogs.msdn.com/carloc/archive/2008/10/31/how-to-automate-process-monitor.aspx también muestra cómo ejecutar Process Monitor de forma automatizada.

Si desea hacer esto completamente mediante programación, puede usar las funciones de ETW (StartTrace, EnableTrace, etc.) para ajustar los eventos de E / S de archivos y guardarlos en un archivo ETL. Código de muestra aquí.


23
2018-05-14 18:09



En Windows, puedes usar monitor de proceso para monitorear la actividad del proceso (io y registro). Supongo que esto se ajusta a tu necesidad si realmente no quieres saber las llamadas al sistema.

Y puedes usar winapioverride32 para monitorear llamadas de API


5
2018-05-14 18:14



API Monitor by rohitab es muy bueno para las llamadas al sistema

http://www.rohitab.com/apimonitor


4
2017-07-03 15:01



Tal vez FileMon?

También hay NtTrace, similar a strace.


2
2018-05-14 18:16



Otra herramienta de seguimiento de la API de Windows: logexts.dll (parte de Herramientas de depuración para Windows), que se puede ejecutar desde WinDbg / ntsd / cdb o mediante una versión independiente logger.exe programa.


2
2018-05-14 18:21



Otra forma es usar Deviare API Hook un interceptar todas las llamadas al sistema de modo de usuario que desee. Al usar este marco, puede codificar un controlador genérico para todas las llamadas, ya que los parámetros se pueden leer utilizando interfaces COM (por ejemplo, cada parámetro es un INktParam y puede obtener el valor usando INktParam.Value).

Otra alternativa pero costará algo de dinero es usar SpyStudio de la misma compañía Este producto tiene una opción de línea de comando que es útil para recopilar registros sin GUI.


2
2018-06-25 20:16



Cómo nadie mencionó strace? Ejemplo de salida:

open (".", O_RDONLY | O_NONBLOCK | O_LARGEFILE | O_DIRECTORY | O_CLOEXEC) = 3
fstat64 (3, {st_mode = S_IFDIR | 0755, st_size = 4096, ...}) = 0
fcntl64 (3, F_GETFD) = 0x1 (indicadores FD_CLOEXEC)
getdents64 (3, / * 18 entradas * /, 4096) = 496
getdents64 (3, / * 0 entradas * /, 4096) = 0
cerrar (3) = 0
fstat64 (1, {st_mode = S_IFIFO | 0600, st_size = 0, ...}) = 0
mmap2 (NULL, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f2c000
write (1, "autofs \ nbackups \ ncache \ nflexlm \ ngames" ..., 86autofsA

-5
2017-09-14 03:52