¿Es posible cuando se llame de alguna manera a una operación de archivo, como abrir o cerrar, que pueda manejarla antes de que el sistema operativo proceda y, de ser posible, cancelarla por .NET? Si .NET no tiene habilidades como esa, ¿cómo puedo hacer esto?¿Es posible rastrear operaciones de archivos con .NET?
Respuesta
Lo que su pidiendo que haga que se puede hacer. Los escáneres de virus, por ejemplo, lo hacen todo el tiempo. Puede supervisar fácilmente la actividad del archivo con Process Monitor. También puede hacerlo de forma programática en C# usando el FileSystemWatcher Class. Pero intentar evitar que un programa se abra o tratar de impedir que un programa acceda al archivo no se puede hacer en C#. Tendrá que usar C o C++. Necesita crear un File System Filter Driver. Es algo complejo de construir, pero es exactamente lo que necesitas. Para citar a MSDN:
A file system filter driver intercepts requests targeted at a file system or another file system filter driver. By intercepting the request before it reaches its intended target, the filter driver can extend or replace functionality provided by the original target of the request. Examples of file system filter drivers include anti-virus filters, backup agents, and encryption products.
Puede conectar la API de Windows si lo desea. Echa un vistazo a esta manera de hacer eso en .NET/C#:
Sysinternals ofrece una herramienta gratuita llamada Process Monitor, una de cuyas funciones es unir a los procesos arbitrarios de Windows (incluyendo aplicaciones .NET) y captura llamadas al sistema, incluido el archivo abierto, cerrado, leído, etc.
Puede descargarlo en el Process Monitor Download Page.
EDITAR
Como ya he vuelto a leer su pregunta, veo que usted está preguntando por interceptar y, posiblemente, la cancelación de tales operaciones. Creo que la clase FileSystemWatcher
será tu mejor opción, aunque no creo que pueda cancelar las operaciones de archivos de forma unilateral. Tendrás que crear algún tipo de mecanismo cooperativo para indicarle a la persona que llama que suspenda su operación.
Estoy bastante seguro de que tienes que entrar en el kernel en ese tipo de operación y estoy bastante seguro de que eso significa que necesitarás codificar en C. Mira File System Drivers.
ACTUALIZACIÓN: este SO link puede ayudar.
ACTUALIZACIÓN: se ha añadido una búsqueda en Google de Windows File System Drivers
TAMBIÉN What is a good resource to get started with Windows file system driver development?
- 1. ¿Es posible rastrear asignación/desasignación?
- 2. ¿Es posible rastrear enlaces hash como páginas con google analytics?
- 3. ¿Cómo rastrear las operaciones IO por archivo en Linux?
- 4. Cómo rastrear descargas de archivos
- 5. ¿Es posible rastrear una cadena dentro de un binario IPA?
- 6. Operaciones de archivos en Java
- 7. Usando Crossfilter, ¿es posible rastrear max/min cuando se agrupa?
- 8. ¿Es posible rastrear si alguien imprimió una página web?
- 9. ¿Es posible proteger archivos swf?
- 10. ¿Cómo rastrear directorios pero no sus archivos con Git?
- 11. ¿Es legal rastrear Amazon?
- 12. ¿Es posible instalar en Archivos de programa con privilegios limitados?
- 13. ¿Es posible de alguna manera excluir archivos con cfdirectory?
- 14. operaciones matemáticas de precisión simple en .NET?
- 15. ¿Es posible usar Microsoft Kinect con .NET Gadgeteer?
- 16. Intentando probar las operaciones del sistema de archivos con VFSStream
- 17. ¿Es posible crear un método de solo depuración en .NET?
- 18. ¿Es posible declarar un alias con el tipo .net?
- 19. ¿Es posible encriptar con clave privada usando .NET RSACryptoServiceProvider?
- 20. Cómo usar operaciones entrelazadas contra archivos mapeados en memoria en .Net
- 21. ¿Cambiar las operaciones de diario en .NET?
- 22. ¿Es posible el registro pasivo en .NET?
- 23. ¿Es posible trabajar con archivos remotos en Eclipse?
- 24. Con gcov, ¿es posible fusionarse a archivos .gcda?
- 25. Operaciones de archivos en Android NDK
- 26. Acelerando el proceso dex con archivos jar, ¿es posible?
- 27. ¿Es posible extraer archivos de subversión sin esas carpetas .svn?
- 28. ¿Es posible comprimir MENOS archivos CSS con htaccess? (¿y cómo?)
- 29. ¿Es posible descompilar toda la aplicación .NET?
- 30. ¿Es posible clonar una transmisión .NET?
El enlace ya no funciona. –
@JamesWilkins debe haber sido temporal. Ambos enlaces me funcionaron. Mejor – kenny