我是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)上成功运行。在安装过程中有两行脚本运行:
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吗?也许还有别的事?
发布于 2014-04-10 14:32:33
我还没有看到这个特定的问题,但是我以前也遇到过类似"WOW64“的问题。这通常意味着您的软件中有32位的东西正在以该模式运行,所以您所做的任何事情都将以"Program (x86)“或"WOW64”类型的位置结束。以下是我认为可能会发生的事情:
这可能与调用rundll32.exe的方式有关。见以下帖子:
如果您的InstallSheild安装正在创建一个32位的可执行文件,那么它可能已经在WOW模式下运行,这意味着它可能正在选择位于WOW目录中的rundll32.exe,因此您的安装也在那里结束。
您可能会考虑修改脚本以根据平台调用特定的脚本,或者查看是否可以将InstallShield更改为以64位应用程序的形式在非WOW64模式下运行。
https://stackoverflow.com/questions/22973851
复制相似问题