Windows設備CoInstaller功能是這樣的,從微軟WDK Toaster示例:如何從CoInstaller代碼中知道設備是否存在(present = plugged in)?
extern"C" __declspec(dllexport) DWORD CALLBACK
ToasterCoInstaller (
__in DI_FUNCTION InstallFunction,
__in HDEVINFO Dis,
__in PSP_DEVINFO_DATA Did,
__inout PCOINSTALLER_CONTEXT_DATA Context
)
{
...
}
我知道派息並沒有對用於識別設備節點。即使設備已從系統中拔出(例如拔出USB磁盤),用戶仍可能會告訴設備管理器顯示不存在的設備,然後我們的聯合安裝程序仍然可以從未拔下的設備接收DIS-DID - 因爲該devnode已在註冊表中註冊。
所以我的問題很清楚,我如何從ToasterCoInstaller()確定當前的DIS-DID是指現在還是不存在的設備?我能想到的
一種方法是使用SetupDiGetClassDevs
找到所有DIGCF_PRESENT
devnodes然後將自己的設備,例如-ID進行比較的查詢之一,如果沒有找到匹配,我可以推斷查詢DIS-DID不存在。
但是有沒有更簡潔的方法?一些特定的SetupDi ...可以直接告訴答案嗎?