x64 sistemas sistema que programas programa procesador pasa operativos operativo instalo entre ejecutar diferencia c++ c windows wow64

c++ - sistemas - ¿Cómo puedo compartir HWND entre aplicaciones de 32 y 64 bits en Win x64?



sistema operativo de 64 bits (5)

Acabo de recibir un correo electrónico de un desarrollador de Microsoft WOW64 que confirma:

Las asas son de 32 bits y se pueden truncar de forma segura / cero. Es cierto tanto para los controladores de objetos del kernel como para los controles USER / GDI.

MSDN me dice que los identificadores de Windows (HWND) se pueden compartir entre aplicaciones de 32 y 64 bits, en Comunicación entre procesos (MSDN). Sin embargo, en Win32 un HWND es de 32 bits, mientras que en Windows de 64 bits es de 64 bits. Entonces, ¿cómo se pueden compartir las asas?

Supongo que la misma pregunta se aplica a los manejadores de objetos nombrados, como mutexes, semáforos y manejadores de archivos.


Como señala Daniel Rose arriba, la msdn.microsoft.com/en-us/library/aa384203.aspx ahora dice:

... es seguro truncar el identificador (cuando se pasa de 64 bits a 32 bits) o extender el identificador (al pasarlo de 32 bits a 64 bits).

Todavía parece haber cierta confusión aquí, dado que un desarrollador de WOW64 me dijo que la extensión cero es la forma correcta. Si está escribiendo un módulo de 64 bits que obtiene identificadores de los módulos de 32 bits, la apuesta más segura podría ser comparar solo los 32 bits más bajos del identificador (es decir, truncar). De lo contrario, puede quedar atrapado en una diferencia de signatura frente a extensión cero.


Consulte la Guía de portabilidad del Lenguaje de definición de interfaz de Microsoft (MIDL), página 12 (http://msdn.microsoft.com/en-us/library/ms810720.aspx)

Aquí tiene un vistazo a los identificadores USER y GDI son valores extendidos de signo 32b


Creo que tienes razón para ser cauteloso en general. Sin embargo, MSDN que afirma que se pueden compartir es un contrato para nosotros, los programadores. No pueden decir "compartirlo hoy" y luego "ya no" mañana, sin romper una gran cantidad de software.

Del mismo modo, para que el software de x64 y 32 bits se ejecute simultáneamente en una máquina determinada, y para que todos se lleven bien, los HWND (y muchos HANDLE) deben seguir siendo de 32 bits y compatibles.

Supongo que lo que estoy diciendo es que creo que esta es una apuesta muy segura, al menos durante la vida útil de Windows 7 y, probablemente, la "próxima" de Windows.


¿El hecho de que se puedan compartir no implica que solo se usen los 32 bits más bajos en los procesos de Win64? Los manejadores de Windows son índices, no punteros, al menos por lo que puedo decir, así que a menos que MS quiera permitir más de 2 ^ 32 ventana / archivo / mutex / etc. manijas no hay razón para usar los 32 bits altos de un void* en Win64.