2010-04-23 22 views
5

¿Es posible que un proceso hijo herede un controlador de su proceso primario si un proceso es de 32 bits y el otro es de 64 bits?¿Puede manejar la herencia de Windows cruzar el límite de 32 bits/64 bits?

HANDLE es un tipo de 64 bits en Win64 y un tipo de 32 bits en Win32, lo que sugiere que incluso se suponía que era posible en todos los casos, habría algunos casos en los que fallaría: un proceso principal de 64 bits , un proceso hijo de 32 bits y un identificador que no se puede representar en 32 bits.

¿O está nombrando el objeto de la única manera para un proceso de 32 bits y un proceso de 64 bits para obtener un control para el mismo objeto?

Respuesta

7

Si es un identificador de archivo u otro identificador de kernel, entonces sí.

Sucede que, aunque HANDLE es un tipo de 64 bits, siempre se puede convertir a 32 bits y viceversa para cualquier valor válido del controlador.

Los identificadores de GDI no se pueden heredar.

0

Sí, pero al convertir manejos de 32 bits a identificadores de 64 bits, asegúrese de firmar y extender el valor. Es decir, establezca los bits 32-63 en el valor del bit 31. Por lo tanto, 0x80000000 se convierte en 0xFFFFFFFF80000000, no en 0x0000000080000000. Además, tenga en cuenta que esta compatibilidad entre los controladores de 32 y 64 bits solo está garantizada para los manejadores de modo de usuario (que es todo lo que siempre debe hacer si no está escribiendo un controlador o algo similar que se ejecute en modo kernel).

Ver también: this SO question and its answer (¿Qué es el rango de Windows HANDLE en una aplicación de 64 bits?)

Cuestiones relacionadas