为什么SetupDiCallClassInstaller函数仅限于64位程序?

时间:2011-12-30 23:54:12

标签: winapi 64-bit 32-bit setupapi

尝试从32位模式下编译的程序调用SetupDiCallClassInstaller在64位Windows上失败。

显然这是设计的,但我想知道原因。

2 个答案:

答案 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位进程也会成功。