2009-01-31 62 views
4

我想在Windows XP下爲Ext2分區安裝一個驅動程序,安裝將通過一個自寫的Inno Setup腳本來完成。我需要爲此調用哪些API函數?從我到目前爲止,我似乎沒有需要一個inf文件,因此沒有調用SetupCopyOEMInf。但我不知道該怎麼做...哪個API函數在Windows中安裝文件系統驅動程序?

請賜教!

+0

如果這是您在網上找到的東西,是不是附帶說明?如果它是你自己寫的東西,你以前如何安裝它,在開發它的時候測試它? – 2009-01-31 20:26:05

+0

它附帶一個安裝程序,但我想將它與其他一些東西一起放到我自己的安裝程序中,以便我可以輕鬆調整我家中的每個新Windows安裝。 – Treb 2009-02-01 17:49:34

回答

6

至於你問哪個在這裏安裝驅動程序需要的API函數是一些代碼,我用在C中加載驅動程序:

bool LoadDriver(const char * cpDriverPath, const char * cpDriverName) 
{ 
    SC_HANDLE hSCService; 
    SC_HANDLE hSCManager; 

    hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); 
    if(hSCManager == NULL) 
     return false; 

    hSCService = CreateService(hSCManager, cpDriverName, cpDriverName, 
           SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, 
           SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, 
           cpDriverPath, NULL, NULL, NULL, NULL, NULL); 

    if(hSCService == NULL && GetLastError() == ERROR_SERVICE_EXISTS) 
     hSCService = OpenService(hSCManager, cpDriverName, SERVICE_ALL_ACCESS); 

    if(hSCService == NULL) 
     return false; 

    if(!StartService(hSCService, 0, NULL)) 
    { 
     if(GetLastError() != ERROR_SERVICE_ALREADY_RUNNING) 
      return false; 
    } 

    CloseServiceHandle(hSCManager); 
    CloseServiceHandle(hSCService); 

    return true; 
} 

你可能想使用SERVICE_ BOOT_開始爲文件系統驅動程序,而不是SERVICE_ DEMAND_ START。如果你不能寫一個Inno腳本來完成上述操作,你總是可以從上面創建一個小的EXE,並讓Inno作爲後期安裝運行。

如果您想要沿着INF路線走下去,請查看this Microsoft article

1

好吧,我發現了一些更多的信息:

MSDN指出「你應該使用一個INF文件安裝文件系統驅動程序」(通過調用SetupCopyOEMInf等),但也指出,在Win2k與舊的系統,

「文件系統驅動程序是常見的由服務控制管理器安裝」,我發現了另一個Ext2 driver at sourceforge附帶的Inno Setup的安裝腳本。在那裏,他們只需在HKLM\SYSTEM\CurrentControlSet\Services\下添加一些註冊表項。

我相信添加這些條目等於使用sc.exe工具創建服務,該工具在內部調用OpenSCManagerCreateService api。我更喜歡註冊表方式,因爲它更容易,而且使用api調用時看不出優勢,因爲總是需要重新啓動。

所以我結束了此解決方案:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\YourService] 
"ErrorControl"=dword:00000001 
"Start"=dword:00000003 
"Type"=dword:00000001 
"DisplayName"="YourServiceDisplayName" 
"ImagePath"="System32\Drivers\YourService.sys" 

當然取決於問題的驅動程序的具體情況,可能需要在Parameters子項一些條目。

我仍然希望有人能夠解決這個問題,特別是關於如何使用inf文件進行安裝的一些細節,因爲這是MS推薦的方式。

來吧,夥計們!有一個很好的獎金趕上這裏!

0

有幾種方法可以解決這個問題。

1 /查看產品是否具有靜默安裝模式(例如,使用配置文件進行安裝)。然後,您只需將其納入您自己的安裝。 2 /有一些程序可以模擬一個用戶,比如Rational Robot(我不會建議那個用戶,因爲它是商業的,但可能會有免費的)。我們主要將這些用於圖形應用程序的自動化測試,但它們可以輕鬆使用它來運行安裝程序。

3請聯繫開發人員以查看實際安裝過程所需的內容,然後複製該內容。

4 /微軟有很多系統工具(在這裏)可以跟蹤對文件系統,註冊表等的更改。您可以使用這些來反向設計安裝過程,並在您自己的安裝中執行相同的操作。

就我個人而言,我會先與3號一起去。開發人員很樂意知道他們的產品正在被使用,並且可以隨時提供信息。他們甚至可能會爲你寫一個無聲的安裝程序,因爲這將成爲他們在公司環境中產品的額外賣點(向他們提出這個建議)。

0

我寫了一個TDI過濾器驅動程序。

當我編寫.inf文件時,需要花費兩週的時間才能完成一些工作,但我仍然不太瞭解它,因爲它沒有任何意義。你必須做的事情似乎很隨意。當我嘗試使用它們時,INF文件幾乎完全沒有文檔,而且極其複雜。

相關問題