Surprise-Removal 序列
如果使用者移除裝置而不發出警告,只要在不使用 裝置管理員 或安全移除硬體公用程式的情況下將其取消叢集,裝置就會被視為「意外移除」。發生這種情況時,架構會遵循稍微不同的移除順序。 如果另一個驅動程式在裝置上呼叫 IoInvalidateDeviceState ,它也會遵循意外移除順序,即使裝置仍然實際存在也一樣。 在意外移除序列中,架構會先呼叫 EvtDeviceSurpriseRemoval 回呼,再呼叫移除序列中的其他回呼。 當序列完成時,架構會終結裝置物件。 所有卸載式裝置的驅動程式都必須確保關機和啟動路徑中的回呼都可以處理失敗,特別是移除硬體所造成的失敗。 任何存取硬體的嘗試不應無限期等候,但應該受限於逾時或監視程式計時器。
下圖顯示意外移除所涉及的回呼:
如果裝置在移除時未處於工作狀態,架構會在EvtDeviceSurpriseRemoval之後立即呼叫EvtDeviceReleaseHardware事件回呼。 它會省略當裝置離開工作狀態時已執行的交錯步驟。