2009-07-10 20 views
14

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

El propósito es cuando un usuario hace doble clic en un archivo en una carpeta determinada, Windows le informa al software, luego procesa esa petición y devuelve a Windows los datos del archivo.

Quizás exista otra solución, como supervisar los mensajes abiertos y forzar a Windows a esperar mientras el programa prepara el contenido del archivo.

Una aplicación de este concepto, podría ser gestionar la desencriptación de un archivo de forma 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ía ese evento abierto, desencriptará el archivo y dará el contenido de ese archivo a la aplicación que pregunta.

Es un concepto un tanto 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.

Respuesta

10

La mejor manera de hacerlo para cubrir todos los casos de apertura desde cualquier programa sería a través de file system filter driver. Sin embargo, esto puede ser demasiado complejo para sus necesidades.

+0

¿Dónde podría uno encontrar información sobre un controlador de este tipo? – Geo

+0

Me vinculé a la página de MS que tiene muchos recursos e información. –

+0

software antivirus, sobre la marcha de cifrado/compresión y más está construido de esta manera por cierto. –

0

Windows tiene la opción de encriptar archivos en el disco (file-> properties-> advanced-> encrypt) y esta opción es completamente transparente para las aplicaciones.

Tal vez para cifrar descifrar partes del archivo de un disco, debe considerar softwares como criptainer?

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

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

+0

Ok, quizás pueda hacerlo como un controlador de filtro de sistema de archivos, pero no creo que sea una solución "viable" ... a menos que tenga mucho tiempo y habilidades :-) y esté desarrollando algo muy específico que requiera eso. –

+0

El ejemplo de la cripta fue solo para ilustrar la duda. No necesito ningún tipo de cifrado :) – HyLian

11

Puede usar el truco que Process Explorer usa para reemplazarse por el administrador de tareas. Básicamente crear una clave de esta manera:

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

Cuando se reemplaza 'taskmgr.exe' con el nombre del proceso para interceptar. A continuación, agregue un valor de cadena llamado 'Debugger' que tenga la ruta a su ejecutable. Por ejemplo:

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

Cada un proceso que se ejecuta no coincide con el nombre de la imagen de su proceso será realmente ser llamado como un depurador para ese proceso con la ruta de acceso al proceso real como argumento.

+0

Creo que esta sería la mejor manera, pero ¿cómo podría usarlo para openfiledialogs? Los diálogos de archivos abiertos están en comdlg32.dll ¿no? –

4

Podría usar la inyección de código y la redirección de API. Comenzará su proceso de destino y luego inyectará una DLL que engancha las funciones de la API de Windows que desea interceptar. Luego se te llama cuando el proceso objetivo cree que está llamando a OpenFile() o lo que sea, y puedes hacer lo que quieras antes de pasar la llamada a la API real.

Google para "IAT hooking".