2011-12-30 17 views
5

Intentar llamar a SetupDiCallClassInstaller desde un programa compilado en modo de 32 bits falla en Windows de 64 bits.¿Por qué la función SetupDiCallClassInstaller está restringida a programas de 64 bits?

Al parecer, esto es por diseño, pero me gustaría saber el motivo.

+1

Hola, me enfrento al mismo problema con "SetupDiCallClassInstaller" en Windows 7, máquina de 64 bits. ¿Puedes decir cuál es la solución para esto? – 2vision2

+0

@ 2vision2 ¿Alguna suerte de resolver esto? – amadib

+0

Microsoft simplemente no implementó la versión de 32 bits, la que podría ejecutarse en el emulador Wow64 en el que se ejecutan los procesos de 32 bits. Ya sea que sea un artículo pendiente o una restricción técnica no está claro, yo voto por este último. –

Respuesta

0

Si realiza la llamada desde un proceso de 32 bits en un sistema operativo de 64 bits, falla porque tiene que modificar algunas claves de registro en la parte de 64 bits del registro. En otro caso, si realizara esa llamada desde un proceso de 64 bits en un sistema operativo de 64 bits, también tendría éxito con un proceso de 32 bits en un sistema operativo de 32 bits.

+0

Un proceso de 32 bits puede acceder al registro de 64 bits mediante el indicador 'KEY_WOW64_64KEY' al abrir/crear una clave, por lo que no debería ser el factor limitante de por qué la API no funciona en WOW64, a menos que sea un descuido de parte de Microsoft y simplemente no ha habilitado la API para usar esa bandera todavía. –

1

Según MSDN:

Device Installations on 64-Bit Systems:

La versión de 32 bits de la aplicación debe comprobar el valor devuelto por UpdateDriverForPlugAndPlayDevices. Si el valor de retorno es ERROR_IN_WOW64, la aplicación de 32 bits se está ejecutando en una plataforma de 64 bits y no puede actualizar los controladores de la bandeja de entrada. En su lugar, debe llamar a CreateProcess (descrito en la documentación del SDK de Windows) para iniciar la versión de 64 bits de la aplicación. La versión de 64 bits puede llamar a UpdateDriverForPlugAndPlayDevices, especificando un parámetro FullInfPath que identifica la ubicación de las versiones de 64 bits de todos los archivos.

lo que parece que cualquier API que está diseñado para informar ERROR_IN_WOW64 está destinado específicamente a no trabajar en WOW64, un proceso de 32 bits tiene que invocar un proceso de 64 bits a llamar a la API.

Cuestiones relacionadas