處理GUID_TARGET_DEVICE_QUERY_REMOVE事件
在 PnP 管理員將 IRP_MN_QUERY_REMOVE_DEVICE IRP 傳送給裝置的驅動程式之前,它會呼叫在裝置上註冊 EventCategoryTargetDeviceChange 的任何通知回呼常式。 PnP 管理員會指定 NotificationStructure。GUID_TARGET_DEVICE_QUERY_REMOVE的事件 。
為了回應這類通知,回呼常式會判斷是否可以移除裝置,而不會中斷系統。
如果不應該移除裝置,回呼常式會傳回STATUS_UNSUCCESSFUL。 為了回應此狀態,PnP 管理員中止查詢移除處理,且不會移除裝置。
如果可以移除裝置,回呼常式應該執行任何適當的作業來準備移除裝置,例如盡可能關閉裝置上開啟的任何控制碼 () 。 如果裝置上的控制碼保持開啟狀態,PnP 管理員就無法移除裝置,而 PnP 管理員中止查詢移除處理。
成功處理GUID_TARGET_DEVICE_QUERY_REMOVE事件時,通知回呼常式應該:
關閉裝置的任何開啟控制碼。
如果驅動程式在檔案物件上具有未處理的參考,請取值檔案物件。
持續註冊未來 EventCategoryTargetDeviceChange 通知。 這很重要,因為可能取消即將移除作業。
關閉裝置的控制碼並不會取消 PnP 目標裝置變更通知的驅動程式註冊。 PnP 管理員仍然可以呼叫驅動程式的通知回呼常式,但在這類呼叫 中,NotificationStructure 中的檔案物件無效。