警告
UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的UMDF驅動程式都應該使用UMDF 2撰寫。 未將新功能新增至 UMDF 1,而且較新版本的 Windows 10 上對 UMDF 1 的支援有限。 通用 Windows 驅動程式必須使用 UMDF 2。
封存的 UMDF 1 範例可在 Windows 11 版本 22H2 - 2022 年 5 月驅動程式範例更新中找到。
如需詳細資訊,請參閱 開始使用UMDF。
當系統執行時,使用者可以透過下列兩種方式之一移除裝置: 依序移除,這表示使用者會通知系統即將移除裝置(例如,使用[拔除或退出硬體] 程式):或 意外移除,這表示使用者在不通知系統的情況下拔除裝置。 如果總線支援無預警移除(例如 USB),裝置的驅動程式必須能夠應對裝置突然不再存在的情況。
有序移除
使用者會使用系統的「拔除或退出硬體」程式、使用設備管理器停用裝置,或按下可彈射裝置的退出按鈕來要求移除。 架構可讓裝置移除或停用,除非驅動程式已提供 IPnpCallback::OnQueryRemove 回呼函式,而且回呼函式已否決移除。
下圖顯示在關閉電源和移除期間UMDF回呼的順序。 序列會以處於工作電源狀態 (D0) 的裝置開始於圖頂端。
意外移除
在此案例中,使用者未經預期地從電源拔除裝置。 在意外移除序列中,UMDF 會呼叫 IPnpCallback::OnSurpriseRemoval 回呼函式,以通知驅動程式裝置已被意外移除。 此回呼不保證會以任何特定順序與移除序列中的其他回呼一起發生。
一般而言,驅動程式應該避免存取移除路徑中的硬體。 如果嘗試存取硬體時長時間等候,反射器會逾時。 下圖顯示 UMDF 驅動程式的意外移除順序。