2014-04-09 41 views
1

我是Windows設備驅動程序的新手。我目前的任務是採用現有的32位微型過濾器驅動程序並將其移植到64位Windows。我的開發環境是Windows 7/64位,Visual Studio 2012 Ultimate,DDK 7600.16385.1和SDK 7.1A。安裝包是使用InstallShield 2013年爲什麼我的64位微過濾器驅動程序安裝在SysWOW64 drivers文件夾中?

創建的setup.exe,我發現了一些文檔上porting drivers to 64 bit,但它是所有關於代碼問題。我一直無法找到一個白癡指南,涵蓋了你可能需要改變的其他一切的一步一步的指導,所以我決定採取天真的嘗試 - 看 - 發生什麼事的方法,只是重新編譯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,這讓一些JNI調用一對夫婦的DLL,其中一個叫FilterLoad()。 (順便說一句,JVM和DLLs仍然是32位,但我的理解是,32位代碼應該能夠通過FilterLoad()加載64位驅動程序,如果我錯了,請糾正我。)FilterLoad()是ERROR_FILE_NOT_FOUND,這讓我注意到,正如上面在問題中所述,xxxxxxflt.sys文件已被複制到SysWOW64 \ drivers而不是System32 \ drivers。

我知道這是錯誤的,因爲Win64的是oppositeland,所以System32下就是64位的東西應該去Syswow64資料就是32位的東西應該去。我不知道的是爲什麼它結束了。 .inf文件中是否需要進行更改以將其識別爲64位驅動程序?在InstallShield項目中,我可能需要做什麼才能告訴它在64位引擎中構建64位安裝程序或運行腳本?該腳本是否必須採取措施強制使用64位版本的rundll32?也許還有別的東西?

+0

無論命令是複製文件可能運行在32位模式。所以文件系統重定向器將它從system32重定向到syswow64。您正在登錄牆後使用非標準構建工具,因此很難縮小它的範圍。 –

回答

1

我還沒有看到這個具體問題,但是我之前遇到過這種類型的「WOW64」問題。這通常意味着你的軟件中有32位的內容在該模式下運行,所以你所做的任何事情都將以「Program Files(x86)」或「WOW64」類型位置結束。這是我認爲可能發生的:

這可能有些事情要和你在呼喚RUNDLL32.EXE的方式。請參閱下面的帖子:

rundll32.exe equivalent for 64-bit DLLs

這是可能的,如果你的InstallSheild安裝創建一個32位可執行則在WOW模式下運行已經,這意味着它可能選擇RUNDLL32.EXE是在WOW目錄,這也是你安裝結束的原因。

你可以看看你的修改腳本調用基於平臺的具體之一,或者看看是否可以改變你的InstallShield作爲非WOW64模式下的64位應用程序運行。

+0

謝謝,更改腳本以顯式調用c:\ windows \ system32 \ rundll32.exe的伎倆。 (之後我仍然遇到了簽名問題,但我已經解決了。) –

相關問題