2012-12-14 76 views
4

我正在使用一個小工具來記錄USB設備中的活動。 我的工具作爲一個窗口服務來捕捉所有的設備事件,基本上我開始監視USB設備,只要我趕上一個DBT_DEVICEARRIVAL事件。在此之後,我需要儘快停止顯示器,只要我得到DBT_DEVICEQUERYREMOVE(否則我的服務將拒絕設備安全彈出)。問題在於該工具應該能夠監視多個設備,所以我需要能夠確定用戶試圖彈出哪個設備。 我發現DBT_DEVICEQUERYREMOVE事件攜帶DEV_BROADCAST_HANDLE結構。我試圖從這個結構中提取一些有用的信息,可以讓我確定哪個設備被彈出。我發現設備存在句柄,我嘗試使用系統函數GetFinalPathNameByHandle提取驅動器盤符,但無法正常工作(返回空值)。 任何想法我怎麼能做到這一點?從C#中的設備句柄獲取驅動器號

非常感謝!

+0

@MSalters我的問題是一個具體的問題,不包括在你的評論中陳述的問題。有任何想法嗎? –

回答

1

由於答案似乎不如我想象的那麼明顯:請致電RegisterDeviceNotification對您感興趣的每個設備,通過其手柄識別設備。由於您創建註冊,您將知道哪個驅動器號映射到哪個通知句柄。

+0

我想通過[pinvoke](http://pinvoke.net/default.aspx/user32/RegisterDeviceNotification.html)使用該函數? – Default

+0

@Default:我認爲沒有別的辦法。 Windows的本地API仍然是基於C的。 – MSalters