我想在Windows XP下爲Ext2分區安裝一個驅動程序,安裝將通過一個自寫的Inno Setup腳本來完成。我需要爲此調用哪些API函數?從我到目前爲止,我似乎沒有需要一個inf文件,因此沒有調用SetupCopyOEMInf。但我不知道該怎麼做...哪個API函數在Windows中安裝文件系統驅動程序?
請賜教!
我想在Windows XP下爲Ext2分區安裝一個驅動程序,安裝將通過一個自寫的Inno Setup腳本來完成。我需要爲此調用哪些API函數?從我到目前爲止,我似乎沒有需要一個inf文件,因此沒有調用SetupCopyOEMInf。但我不知道該怎麼做...哪個API函數在Windows中安裝文件系統驅動程序?
請賜教!
至於你問哪個在這裏安裝驅動程序需要的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。
好吧,我發現了一些更多的信息:
的MSDN指出「你應該使用一個INF文件安裝文件系統驅動程序」(通過調用SetupCopyOEMInf
等),但也指出,在Win2k與舊的系統,
「文件系統驅動程序是常見的由服務控制管理器安裝」,我發現了另一個Ext2 driver at sourceforge附帶的Inno Setup的安裝腳本。在那裏,他們只需在HKLM\SYSTEM\CurrentControlSet\Services\
下添加一些註冊表項。
我相信添加這些條目等於使用sc.exe
工具創建服務,該工具在內部調用OpenSCManager
和CreateService
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推薦的方式。
來吧,夥計們!有一個很好的獎金趕上這裏!
有幾種方法可以解決這個問題。
1 /查看產品是否具有靜默安裝模式(例如,使用配置文件進行安裝)。然後,您只需將其納入您自己的安裝。 2 /有一些程序可以模擬一個用戶,比如Rational Robot(我不會建議那個用戶,因爲它是商業的,但可能會有免費的)。我們主要將這些用於圖形應用程序的自動化測試,但它們可以輕鬆使用它來運行安裝程序。
3請聯繫開發人員以查看實際安裝過程所需的內容,然後複製該內容。
4 /微軟有很多系統工具(在這裏)可以跟蹤對文件系統,註冊表等的更改。您可以使用這些來反向設計安裝過程,並在您自己的安裝中執行相同的操作。
就我個人而言,我會先與3號一起去。開發人員很樂意知道他們的產品正在被使用,並且可以隨時提供信息。他們甚至可能會爲你寫一個無聲的安裝程序,因爲這將成爲他們在公司環境中產品的額外賣點(向他們提出這個建議)。
我寫了一個TDI過濾器驅動程序。
當我編寫.inf文件時,需要花費兩週的時間才能完成一些工作,但我仍然不太瞭解它,因爲它沒有任何意義。你必須做的事情似乎很隨意。當我嘗試使用它們時,INF文件幾乎完全沒有文檔,而且極其複雜。
如果這是您在網上找到的東西,是不是附帶說明?如果它是你自己寫的東西,你以前如何安裝它,在開發它的時候測試它? – 2009-01-31 20:26:05
它附帶一個安裝程序,但我想將它與其他一些東西一起放到我自己的安裝程序中,以便我可以輕鬆調整我家中的每個新Windows安裝。 – Treb 2009-02-01 17:49:34