Monitoreo de ciertas llamadas al sistema realizadas por un proceso en Windows
process cross-platform (7)
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 la 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.
¿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 (flags FD_CLOEXEC) getdents64(3, /* 18 entries */, 4096) = 496 getdents64(3, /* 0 entries */, 4096) = 0 close(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
API Monitor by rohitab es muy bueno para las llamadas al sistema
En Windows, puede usar el monitor de procesos para monitorear la actividad del proceso (io y el registro). Supongo que esto se ajusta a tu necesidad si realmente no quieres saber las llamadas al sistema.
Y puede usar winapioverride32 para monitorear llamadas de API.
Hay varias opciones en Windows.
Windows Performance Toolkit se puede utilizar 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.
Process Monitor de SysInternals es otra opción muy fácil de usar y le permite ver rápidamente todos los archivos y accesos de registro que cualquier proceso en el sistema está haciendo. 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 here .
Otra forma es utilizar Deviare API Hook para interceptar todas las llamadas al sistema del modo de usuario que desee. Con 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 utilizando 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.
Otra herramienta de seguimiento de API de Windows: logexts.dll
(parte de las herramientas de depuración para Windows ), que se puede ejecutar desde WinDbg / ntsd / cdb o mediante un programa independiente logger.exe
.