首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的64位微型驱动程序安装在SysWOW64 64\ driver文件夹中?

为什么我的64位微型驱动程序安装在SysWOW64 64\ driver文件夹中?
EN

Stack Overflow用户
提问于 2014-04-09 21:01:44
回答 1查看 1.2K关注 0票数 1

我是Windows设备驱动程序的新手。我当前的任务是使用现有的32位小型机驱动程序,并将其移植到64位Windows。我的开发环境是Windows 7/64位、Visual 2012终极版、DDK 7600.16385.1和SDK7.1A。安装包是使用InstallShield 2013创建的一个InstallShield。

我在将驱动程序移植到64位上找到了一些文档,但都是关于代码问题的。我还没有找到一个白痴的指南,涵盖了你可能需要改变的其他事情的一步步的说明,所以我决定采取天真的尝试,看看会发生什么,重新编译64位,除了代码签名之外,因为我在某个地方读到了Win64需要签名的驱动程序。

驱动程序项目的现有构建使用了DDKBuild.cmd,我已经修改了Win64平台的属性,以便在build命令行上指定../scripts/build.cmd -WNETAMD64 free $(OutDir)。编译和链接成功。我对InstallShield项目进行了修改,使其引入了已签名的64位代码文件,而不是32位代码。

安装似乎在64位系统(Win2008 R2)上成功运行。在安装过程中有两行脚本运行:

代码语言:javascript
复制
rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 .\xxxxxflt.inf
fltmc load xxxxxflt

我们的应用程序的其余部分实际上是Java,它对两个DLL进行了一些JNI调用,其中一个调用了FilterLoad()。(顺便说一句,JVM和DLL仍然是32位,但我的理解是32位代码应该能够通过FilterLoad()加载64位驱动程序。如果我错了,请纠正我。)来自FilterLoad()的返回是ERROR_FILE_NOT_FOUND,这使我注意到,正如问题中所述,xxxxxxflt.sys文件已被复制到SysWOW64 64\驱动程序中,而不是系统32\驱动程序中。

我知道这是错误的,因为Win64是相反的,所以System32是64位的东西应该去的地方,SysWOW64是32位的东西应该去的地方。我不知道的是它为什么会在那里结束。.inf文件中是否需要更改才能将其识别为64位驱动程序?在InstallShield项目中,我可能需要做什么才能让它构建64位安装程序或在64位引擎中运行脚本?脚本需要做些什么来强制使用64位版本的rundll32吗?也许还有别的事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-10 14:32:33

我还没有看到这个特定的问题,但是我以前也遇到过类似"WOW64“的问题。这通常意味着您的软件中有32位的东西正在以该模式运行,所以您所做的任何事情都将以"Program (x86)“或"WOW64”类型的位置结束。以下是我认为可能会发生的事情:

这可能与调用rundll32.exe的方式有关。见以下帖子:

对于64位DLL等效的rundll32.exe

如果您的InstallSheild安装正在创建一个32位的可执行文件,那么它可能已经在WOW模式下运行,这意味着它可能正在选择位于WOW目录中的rundll32.exe,因此您的安装也在那里结束。

您可能会考虑修改脚本以根据平台调用特定的脚本,或者查看是否可以将InstallShield更改为以64位应用程序的形式在非WOW64模式下运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22973851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档