繁体   English   中英

为什么将我的64位微型过滤器驱动程序安装在SysWOW64 \\ drivers文件夹中?

[英]Why is my 64 bit minifilter driver installing in the SysWOW64\drivers folder?

我是Windows设备驱动程序的新手。 我的近期任务是采用现有的32位微型过滤器驱动程序并将其移植到64位Windows。 我的开发环境是Windows 7/64位,Visual Studio 2012 Ultimate,DDK 7600.16385.1和SDK 7.1A。 安装软件包是使用InstallShield 2013创建的setup.exe。

我找到了一些有关将驱动程序移植到64位的文档,但这全都涉及代码问题。 我还没有找到一个白痴指南,其中涵盖了您可能需要更改的所有其他内容的分步说明,因此我决定采用朴素的尝试一下,看看会发生什么的方法,然后重新编译为64位,唯一的例外是代码签名,因为我确实读过Win64需要签名驱动程序的地方。

驱动程序项目的现有构建使用DDKBuild.cmd ,并且我修改了Win64平台的属性,以在构建命令行上指定../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 \\ drivers中,而不是System32 \\ drivers中。

我知道这是错误的,因为Win64是对立的,所以System32是应该存放64位内容的位置,而SysWOW64是应该存放32位内容的位置。 我不知道为什么它会在那里结束。 .inf文件中是否有必要进行更改,以将其标识为64位驱动程序? 在InstallShield项目中,我可能需要做些什么来告诉它构建64位安装程序或在64位引擎中运行脚本? 该脚本是否需要执行某些操作来强制使用Rundll32的64位版本? 也许还有其他东西吗?

我还没有看到这个特定的问题,但是以前我遇到过这类“ WOW64”问题。 这通常意味着您的软件中有些东西是32位的,并且正在以该模式运行,因此您所做的任何事情都将最终出现在“程序文件(x86)”或“ WOW64”类型的位置。 我认为这可能正在发生:

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

等同于64位DLL的rundll32.exe

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM