2010-04-09 16 views
7

Me gustaría saber si es posible enumerar identificadores de archivo en C#, quizás usando Win32API. Esto se hace fácilmente para los identificadores de ventana y proceso, pero parece que no es posible manejar los archivos.Enumeración de identificadores de archivo en C#

Aunque NtQuerySystemInformation ofrece alguna funcionalidad, esta se está eliminando y, por lo tanto, no se recomienda el uso de dicho método.

+0

posible duplicado http://stackoverflow.com/questions/231547/tracing-which-process-that-has-opened-a-particular-file –

Respuesta

7

Bueno, ya sabes que es posible, la utilidad de la manija SysInternals' lo hace. NtQueryInformation no va a ser eliminado, es una interfaz esencial de bajo nivel entre Win32 y el sistema operativo "real".

Lo que nunca sucederá es que los argumentos de NtQueryInformation que permiten iterar identificadores van a estar documentados. Como no se detiene solo allí, algunos muppet lo usarán para llamar a CloseHandle() en un archivo que no quiere que se bloquee. Que es muy buena manera de destruir el contenido de su disco duro.

El proceso que pertenecía al identificador no sabe que el identificador está cerrado. Seguirá escribiéndole, probablemente ignorando por completo el código de retorno "no funcionó" de WriteFile(). Lo cual es inofensivo hasta que el programa abra otro controlador, recuperando el mismo valor que el que se cerró antes. Ahora comienza a escribir una mezcla de basura (destinada al identificador anterior) y datos nuevos al manejador. Destruyendo completamente el contenido de lo que está escribiendo. Haga girar las cintas de respaldo si eso es algo así como una base de datos de misión crítica.

0

me encontré con un ejemplo práctico de archivo de lista de asas con nombres en C# aquí ...

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ac990847-6d04-4ae0-aafe-8355bbc3f769

de desplazamiento hasta el último hilo y seguir el enlace allí. Y se prevenido, una vez que descargues el código, los comentarios están en francés. Resulta que tomo francés, así que puedo darle sentido a la mayor parte.

+0

El enlace en esa dirección está roto. – mg30rg