2014-08-27 244 views
0

我有Windows WDF設備驅動程序代碼,試圖使其工作在預安裝(設備存在之前)。它首先檢查有效的設備ID的存在,和任何被發現它這樣做:SetupCopyOemINF預安裝不工作Windows 7

if (UpdateDriverForPlugAndPlayDevices(0, // No Window Handle 
    hwid, // Hardware ID 
    inffile, // FileName 
    INSTALLFLAG_FORCE, 
    &RebootRequired)) 
     // success 

但是,如果沒有器件/插入,它這樣做:

if(SetupCopyOEMInf(inffile, 
    NULL, 
    SPOST_PATH, 
    0, 
    NULL, 
    0, 
    NULL, 
    NULL)) 
     // etc. 

在第一種情況下(裝置存在),一切都很好。但在第二種情況下,根據微軟的「預安裝驅動程序包」,它應該將INF複製到c:\ Windows \ inf \ oem.inf(它所做的),然後一旦存在設備,就應該安裝驅動程序在INF中的信息,它不,並且我必須去設備管理器,刪除未知的設備,並掃描硬件的變化,使其安裝。

在第一種情況下(設備存在),我們的驅動程序.sys文件被複制到c:\ windows \ system32 \ drivers目錄中,而在第二種情況下它永遠不會。如果我只是單獨將.sys文件複製到c:\ windows \ system32 \ drivers,一切正常。我可以這麼做,但是由於我閱讀了微軟的「預安裝驅動程序包」文檔,因此它似乎都是自動處理的,似乎是kludgey(並且有風險)。

回答

0

當您預安裝驅動程序時,它只在驅動程序存儲中註冊該驅動程序。然後,當插入的設備與預裝的驅動程序相匹配時,它將通過將SYS文件複製到C:\ Windows \ system32 \ drivers目錄並將INF文件作爲OEMxx.inf文件安裝到C:\ Windows \ inf \目錄。

如果您調用該命令並且設備存在,如您所見,Windows將安裝該驅動程序。如果設備不存在,則會在與其匹配的下一個設備插入時安裝。

您提到您可以手動轉至設備管理器以「刪除」和「重新掃描」觸發安裝。你也可以在你的SetupCOpyOEMInf調用後有命令來以編程方式執行它。請參閱devcon文檔,WDK中提供了該源代碼。您可以使用devcon remove XXXX在命令行嘗試此操作,其中XXXX是設備上的一些匹配信息,devcon rescan用於觸發新硬件的掃描。

此外,不要將SYS文件自己複製到驅動程序文件夾 - 使用提供的方法來安裝Microsoft建議的方式 - 它將在以後節省您的麻煩。