2009-10-03 7 views

Respuesta

6

hay algunas opciones:

+1

en el caso de enumeración, ¿hay alguna manera de determinar cuál de los hilos enumerados corresponde a un MANIPULADOR que tiene? – bdonlan

+0

Pasa tu identificador de proceso actual a CreateToolhelp32Snapshot con el indicador TH32CS_SNAPMODULE. Esto solo enumerará los hilos en su proceso. –

+1

Pero no te dejará decir la diferencia entre hilos _within_ tu módulo, ¿o sí? – bdonlan

3

Si de alguna manera puede hacer que el hilo en cuestión llame al GetCurrentThreadId y lo almacene en alguna parte, podría leer el resultado.

+0

Esto funcionó mejor para mí, simplemente llamando a crear y almacenarlo con threadhandle! Gracias –

3

Si el hilo en cuestión entra frecuentemente en estado de espera alertable, puede enviarle un APC con QueueUserAPC; el controlador de APC puede llamar al GetCurrentThreadId y comunicar el resultado a la persona que llama utilizando el método que desee.

También puede hacerlo con las funciones NT no documentadas. El uso de NtQueryInformationThread() en la clase ThreadBasicInformation le dará la identificación del hilo en el returned structure. Un ejemplo se puede encontrar en el wine source. Sin embargo, no estoy seguro de en qué versiones de Windows está disponible: tenga en cuenta que estas funciones no documentadas pueden cambiar en cualquier momento, por lo que es mejor probarlas en las versiones anteriores de las ventanas que le interesan, y simplemente use GetThreadId() donde está disponible.

Tenga en cuenta que estas funciones no documentadas solo pueden ser accedidas por LoadLibrary() y GetProcAddress() en NTDLL; no tienen una biblioteca de importación According to MSDN, las declaraciones para las estructuras de datos se pueden encontrar en Winternl.h, pero si no, simplemente defínelas basándose en los enlaces ntinternals anteriores.

+0

Quien esté interesado aquí es cómo se puede llamar a 'NtQueryInformationThread': http://www.snip2code.com/Snippet/85443/GetProcessIdOfThread()-on-Windows-XP – c00000fd

Cuestiones relacionadas