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