¿Cómo obtengo la lista de identificadores de archivos abiertos por proceso en C#?
¿Cómo obtengo la lista de identificadores de archivos abiertos por ID de proceso en C#?
Estoy interesado en profundizar y obtener los nombres de los archivos también.
Buscando el equivalente programático de lo que hace el explorador de procesos.
Lo más probable es que esto requiera interoperabilidad.
Considerando agregar una recompensa por esto, la implementación es muy complicada.
Ay, esto será difícil de hacer desde el código administrado.
Hay una muestra en codeproject.
La mayoría de las cosas se pueden hacer en interoperabilidad, pero necesita un controlador para obtener el nombre del archivo porque se encuentra en el espacio de direcciones del kernel. Process Explorer incorpora el controlador en sus recursos. Conectar todo esto desde C# y admitir 64 bits y 32 será un gran dolor de cabeza.
También puede ejecutar la aplicación de línea de comandos, Handle , de Mark Rusinovich, y analizar el resultado.
Eche un vistazo a este archivo: http://vmccontroller.codeplex.com/SourceControl/changeset/view/47386#195318
Y use:
DetectOpenFiles.GetOpenFilesEnumerator(processID);
Manifestación:
using System;
using System.Diagnostics;
namespace OpenFiles
{
class Program
{
static void Main(string[] args)
{
using (var openFiles = VmcController.Services.DetectOpenFiles.GetOpenFilesEnumerator(Process.GetCurrentProcess().Id))
{
while (openFiles.MoveNext())
{
Console.WriteLine(openFiles.Current);
}
}
Console.WriteLine();
Console.ReadKey();
}
}
}
Tiene dependencia sobre el ensamblaje.System.EnterpriseServices
Puede P/INVOKE en la NtQuerySystemInformation
función para consultar todos los identificadores y luego continuar desde allí. Esta discusión de grupos de Google tiene detalles.
Eche un vistazo a Process Hacker versión 1 de wj32 , que puede hacer lo que usted pidió y más.