2012-01-03 23 views
6

Necesito enumerar todos los identificadores abiertos en el proceso actual. Como no pude encontrar ninguna función como "EnumHandles", estaba pensando en hacer un ciclo de 0 a 1000. La pregunta es ¿cómo puedo recuperar el nombre de cada identificador? Estoy usando C++ y el sistema operativo es Win7 de 32 bits EDIT: El identificador del que necesito nombre es un Mutex. Al comparar el nombre del mutex, quiero obtener el identificador de mango que parecen haber encontrado la solución usando OpenMutex, pero no saben lo que pase el 3 de parámetro,Obtener el nombre de todos los identificadores en el proceso actual

+2

¿Qué quiere decir con el "nombre de cada identificador"? Las manijas no tienen nombres. ¿Te refieres a la ID del identificador, a las clases de ventana o a los títulos de texto correspondientes? –

+0

No todos los identificadores hacen referencia a archivos con nombres. ¿Has considerado mirar a Process Explorer? –

+0

Ese enfoque no funcionará. ¿Qué tipo de mangos? – SLaks

Respuesta

5

Creo que usted tiene que utilizar el NTDLL.DLL. Que yo sepa, esto es lo que todas las herramientas que supervisan procesos, identificadores y otra información del sistema, deben usarse al final, bajo Windows. Lo usé en una pequeña herramienta de Win32, sin embargo, nunca tuve que enumerar los identificadores.

Compruebe aquí una buena introducción de esa biblioteca y relacionada con su pregunta. http://forum.sysinternals.com/howto-enumerate-handles_topic18892.html

También la función getObjectName en el primer puesto de http://forum.sysinternals.com/enumerate-opened-files_topic3577.html

de acceder a este tipo de información en Windows puede parecer mucho trabajo y se ve alarmante porque Microsoft no quiere que lo soporte, pero verá que cuando la API 'fácil' no le proporciona lo que necesita, debe excavar en NTDLL. Esto es lo que las herramientas como ProcessExplorer usan al final. No es tan difícil de usar: cargue la DLL, obtenga los punteros de la función correcta para completar las estructuras que usted declara con lo que encontrará en la red.

+0

No soy un proceso de tutoría, su identificador está ubicado en el proceso actual – WePro2

+0

Lo he explicado mal. La biblioteca NTDLL.DLL está destinada a obtener información sobre la información profunda del sistema (procesos, identificadores, etc.). Esta es una DLL que no está documentada por Microsoft pero puede encontrar documentación en los enlaces que brindé o en Google. Solo tiene que saber las estructuras y funciones para llamar en la DLL. – fury

+0

Parece mucho trabajo solo para recuperar el nombre de los identificadores. Creo que OpenMutex podría ser la respuesta que estoy buscando, pero no estoy seguro si necesito pasar la ruta completa de mutex (\ Sessions \ 1 \ BaseNamedObjects \ somemutex) o solo algo de mutex en el 3er parámetro. He probado ambos, pero no he logrado – WePro2

Cuestiones relacionadas