1. 程式人生 > >使用DpInst安裝驅動程式

使用DpInst安裝驅動程式

    出差時發現一些大公司使用DpInst工具安裝驅動,當時覺得這種方式安裝驅動相當方便,出於好奇回來後自己也嘗試這種安裝方式。

    DpInst.exe工具位於ddk目錄redist\DIFx\dpinst\EngMui下,同時M$在src\setup\DPInst目錄下提供了定製DpInst驅動安裝包的樣例。一個基本的驅動安裝包至少要包含cat,sysinf這些檔案,除此之外可能需要dll(CoIntall)檔案。DpInst安裝這樣的驅動包後,控制面板-程式和功能面板中會出現一項,如下圖是我安裝toaster後在程式和功能面板中多出的項: (圖1)
    注重程式外表的人(反正我不是)可能不滿足這樣的圖示,一定要自己定製一個圖示,這就可以參考src\setup\DPInst:提供一個DpIn.xml,裡面指定需要定製的圖示檔案等。
    DpInst安裝驅動包後,會在C:\WINDOWS\system32\DRVSTORE目錄下產生一個形如"驅動程式名_xxxx"(圖2)的資料夾,裡面包含了cat/sys/inf等檔案(圖3)。 (圖2)
(圖3)
當系統檢測到有新裝置插入時,PNP管理器會到這個目錄匹配HDIW,如果HWID和inf檔案中指定的HWID恰能匹配,則為新裝置安裝驅動。     怎樣,是不是覺得DpInst是一個方便的驅動安裝工具?開始時,我的確這樣覺得,但在測試中我發現了一些不足:沒法為已存在的裝置棧再安裝過濾驅動。仍然以toaster驅動為例:用DpInst安裝如下的兩個驅動包:1.toaster功能驅動驅動包(simple.inf/toaster.sys/toaster.cat);2.filter過濾驅動驅動包(filter.inf/devupper.sys/toaster.cat)。雖然DpInst都能成功安裝驅動,但最多隻有功能驅動能正常工作,如圖4
(圖4) 從圖中可以看到DRVSTORE目錄下的確已經存在兩個驅動包,但是模擬裝置插入後僅安裝了simple.inf指定的裝置。另外,登錄檔資訊也反應了toaster裝置堆疊上並沒有插入過濾驅動: (圖5) 如果將DpInst替換為熟悉的devcon.exe工具,倒可以將過濾驅動安裝到裝置棧中,如圖5:
(圖5)
(圖6) 雖然devcon需要通過install/update的一系列複雜動作才能把過濾驅動裝到裝置棧中,但至少比DpInst裝不了第三方驅動要好點,為此我問過日本同事DpInst為什麼不能做到安裝第三方過濾驅動的原因,他的解釋是Pnp管理器在DrvStore目錄中匹配到了符合條件的HWID(simple驅動包),因此就不會再安裝filter過濾驅動包。當然,我們也可以通過用SetupDi介面將過濾驅動安裝到合適的位置。