尝试从32位模式下编译的程序调用SetupDiCallClassInstaller在64位Windows上失败。
显然这是设计的,但我想知道原因。
答案 0 :(得分:1)
根据MSDN:
Device Installations on 64-Bit Systems:
32位版本的应用程序必须检查UpdateDriverForPlugAndPlayDevices返回的值。如果返回值为ERROR_IN_WOW64,则32位应用程序正在64位平台上执行,无法更新收件箱驱动程序。相反,它必须调用CreateProcess(在Windows SDK文档中描述)来启动64位版本的应用程序。然后,64位版本可以调用UpdateDriverForPlugAndPlayDevices,指定FullInfPath参数,该参数标识所有文件的64位版本的位置。
因此,看起来任何旨在报告ERROR_IN_WOW64
的API都不适用于WOW64,32位进程必须调用64位进程才能调用API。
答案 1 :(得分:-1)
如果您在64位操作系统上从32位进程进行该调用,则会失败,因为它必须修改注册表的64位部分中的某些注册表项。如果您在64位操作系统上使用64位进程进行该调用,那么在32位操作系统上使用32位进程也会成功。