我一直在爲WPD(便攜式設備)類(基於http://www.osronline.com/article.cfm?article=446中的示例)編寫KMDF過濾器驅動程序。驅動程序的目的是向設備寫入塊請求。
我在WPF類的UpperFilters的註冊表中設置了它,並且在插入Samsung Galaxy S3時,我能夠捕獲發送到設備的WPD IOCTL(目前,驅動程序只會將請求轉發給下一個驅動程序) 。到現在爲止還挺好。
然後我安裝了Samsung Kies,看看過濾驅動程序是否仍然有效,但是當我插入設備時,Windows試圖安裝「Samsung Mobile MTP Device」並失敗。我試了幾次(我證實驅動程序仍然安裝,這不是一個缺少的驅動程序問題)。當我從UpperFilters中移除我的驅動程序時,該設備已安裝並正在運行。當我把過濾器放回去時,設備無法啓動(代碼10)。使用Windbg我可以看到我的驅動程序啓動,設備被添加,然後驅動程序卸載(我不知道中間會發生什麼......)
當我試圖把它作爲一個較低的過濾器,它再次工作精細。
在搜索網絡時,我發現它也發生在使用WDM而不是WDK時。WPD上部過濾器導致MTP設備安裝失敗
爲什麼在這種情況下放置UpperFilter導致設備無法啓動?
有沒有辦法解決它?
嗨,麗莎,謝謝你的回答。 Samsung Kies確實安裝了兩個驅動程序:ssudmdm.sys,它是一個調制解調器驅動程序,ssudbus.sys似乎更有趣。我比較了Kies安裝前後的設備驅動程序堆棧。在Kies之前(從上到下):MyFilter - > WUDFrd - > WinUsb - > usbhub。 Kies(沒有我的過濾器)後:WUDFrd - > WinUsb - > dg_ssudbus。看起來他們的驅動程序取代了底層驅動程序,但我不明白爲什麼放置我的上層過濾驅動程序會產生任何影響,並且設備無法啓動,因爲我的代碼並未真正阻止任何內容。 – oren671