¿Cómo obtengo la lista de identificadores de archivos abiertos por proceso en C#?

Resuelto Sam Saffron asked hace 15 años • 7 respuestas

¿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.

Sam Saffron avatar Oct 07 '08 10:10 Sam Saffron
Aceptado

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.

Sam Saffron avatar Oct 07 '2008 06:10 Sam Saffron

También puede ejecutar la aplicación de línea de comandos, Handle , de Mark Rusinovich, y analizar el resultado.

Mark Cidade avatar Oct 07 '2008 06:10 Mark Cidade

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

manuc66 avatar Mar 21 '2011 00:03 manuc66

Puede P/INVOKE en la NtQuerySystemInformationfunción para consultar todos los identificadores y luego continuar desde allí. Esta discusión de grupos de Google tiene detalles.

Mark Cidade avatar Oct 07 '2008 06:10 Mark Cidade

Eche un vistazo a Process Hacker versión 1 de wj32 , que puede hacer lo que usted pidió y más.

user541686 avatar Mar 21 '2011 00:03 user541686