2011-12-30 20 views
5

在64位Windows上尝试从以32位模式编译的程序调用SetupDiCallClassInstaller失败。SetupDiCallClassInstaller函数为什么限制为64位程序?

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

+1

嗨,我面对同样的问题与Windows 7,64位机器中的“SetupDiCallClassInstaller”。你能告诉我有什么解决方案吗? – 2vision2 2012-08-01 09:58:04

+0

@ 2vision2得到这个结果有什么好运? – amadib 2014-05-02 17:53:06

+0

微软只是没有实现它的32位版本,它可以在运行32位进程的Wow64模拟器中运行。不管这是一个待办事项还是技术限制,我都不清楚,我选择了后者。 – 2014-08-08 16:58:15

回答

0

如果您是从64位操作系统上的32位进程进行该调用,则会失败,因为它必须修改注册表的64位部分中的某些注册表项。如果您要在64位操作系统上使用64位进程进行该调用,则32位操作系统上的32位进程也会成功。

+0

32位进程可以在打开/创建密钥时通过KEY_WOW64_64KEY标志访问64位注册表,因此不应该成为API在WOW64中无法工作的限制因素,除非这是微软部分的疏忽,它们根本没有启用该API来使用该标志。 – 2014-08-08 17:42:08

1

根据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。

相关问题