在64位Windows上尝试从以32位模式编译的程序调用SetupDiCallClassInstaller失败。SetupDiCallClassInstaller函数为什么限制为64位程序?
显然这是设计,但我想知道原因。
在64位Windows上尝试从以32位模式编译的程序调用SetupDiCallClassInstaller失败。SetupDiCallClassInstaller函数为什么限制为64位程序?
显然这是设计,但我想知道原因。
如果您是从64位操作系统上的32位进程进行该调用,则会失败,因为它必须修改注册表的64位部分中的某些注册表项。如果您要在64位操作系统上使用64位进程进行该调用,则32位操作系统上的32位进程也会成功。
32位进程可以在打开/创建密钥时通过KEY_WOW64_64KEY标志访问64位注册表,因此不应该成为API在WOW64中无法工作的限制因素,除非这是微软部分的疏忽,它们根本没有启用该API来使用该标志。 – 2014-08-08 17:42:08
根据MSDN:
Device Installations on 64-Bit Systems:
应用程序必须检查由UpdateDriverForPlugAndPlayDevices返回的值的32位版本。如果返回值为ERROR_IN_WOW64,则32位应用程序在64位平台上执行,并且无法更新收件箱驱动程序。相反,它必须调用CreateProcess(在Windows SDK文档中描述)来启动64位版本的应用程序。然后,64位版本可以调用UpdateDriverForPlugAndPlayDevices,指定一个FullInfPath参数来标识所有文件的64位版本的位置。
所以它看起来像一个旨在汇报ERROR_IN_WOW64
具体是指不以WOW64工作的任何API,32位进程必须调用64位进程调用的API。
嗨,我面对同样的问题与Windows 7,64位机器中的“SetupDiCallClassInstaller”。你能告诉我有什么解决方案吗? – 2vision2 2012-08-01 09:58:04
@ 2vision2得到这个结果有什么好运? – amadib 2014-05-02 17:53:06
微软只是没有实现它的32位版本,它可以在运行32位进程的Wow64模拟器中运行。不管这是一个待办事项还是技术限制,我都不清楚,我选择了后者。 – 2014-08-08 16:58:15