用户拔下设备 (UMDF 1)
警告
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 驱动程序的意外删除顺序。