c++ windows winapi events file-io

c++ - Interceptar archivo abierto de Windows



winapi events (4)

La mejor manera de hacerlo para cubrir todos los casos de apertura desde cualquier programa sería a través de un controlador de filtro de sistema de archivos . Sin embargo, esto puede ser demasiado complejo para sus necesidades.

Estoy tratando de hacer un pequeño programa que pueda interceptar el proceso abierto de un archivo.

El propósito es que cuando un usuario haga doble clic en un archivo en una carpeta determinada, Windows informará al software, luego procesará esa petición y devolverá a Windows los datos del archivo.

Tal vez habría otra solución como monitorear los mensajes abiertos y obligar a Windows a esperar mientras el programa prepara el contenido del archivo.

Una aplicación de este concepto, podría ser administrar el cifrado de un archivo de manera transparente para el usuario. En este contexto, el archivo encriptado estaría en el disco y cuando el usuario lo abra (haciendo doble clic en él o con alguna aplicación como el bloc de notas), el proceso en segundo plano interceptará ese evento abierto, desencripta el archivo y proporciona el contenido. de ese archivo a la solicitud de solicitud.

Es un concepto un poco extraño, podría ser como el concepto de red "Man In The Middle", pero con archivos en lugar de paquetes de red.

Gracias por leer.


Podrías usar inyección de código y redirección de API. Comenzarías el proceso de destino y luego inyectarías una DLL que engancha las funciones de la API de Windows que deseas interceptar. A continuación, recibe una llamada cuando el proceso de destino cree que está llamando a OpenFile () o lo que sea, y puede hacer lo que quiera antes de pasar la llamada a la API real.

Google para "enganche IAT".


Puede utilizar el truco que utiliza Process Explorer para reemplazarse con el administrador de tareas. Básicamente crea una clave como esta:

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options/taskmgr.exe

Donde reemplaza ''taskmgr.exe'' con el nombre del proceso para interceptar. Luego agregue un valor de cadena llamado ''Debugger'' que tenga la ruta de acceso a su ejecutable. P.ej:

Debugger -> "C:/windows/system32/notepad.exe"

Se ejecuta cada proceso que coincide con el nombre de la imagen al que se llamará realmente como un depurador para ese proceso con la ruta al proceso real como un argumento.


Windows tiene una opción para cifrar archivos en el disco (archivo-> propiedades-> avanzado-> cifrar) y esta opción es completamente transparente para las aplicaciones.

Tal vez para cifrar las partes de un disco de descifrado de un disco, ¿debería considerar softwares como criptainer?

También hay este software http://www.truecrypt.org/downloads (de código abierto y gratuito) pero no lo he probado.

Desarrollar una solución personalizada suena muy difícil.