警告
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入门。
框架和 UMDF 驱动程序通过 UMDF DDI 进行通信。 UMDF DDI 类似于 KMDF DDI,但 UMDF DDI 是基于 COM 之上的。 因此,熟悉 KMDF 的驱动程序编写器将了解 UMDF。
对于每种类型的框架对象,UMDF 定义了一个接口,通过它可以操作对象的实例。 每个接口都支持方法和属性。 方法定义了可以代表对象执行的操作,属性则设置并获取该对象的特征。 某些接口由框架实现,其他接口由驱动程序实现。 在框架对象中公开的接口形式为 IWDF<对象>,而在驱动程序中公开的事件回调接口形式为 I<对象><动作>,其中<对象>表示队列、请求等,动作<指示接口的功能。 回调接口的方法以“On”开头。
UMDF 驱动程序通过其方法和属性与框架的对象通信。 框架通过事件通知与驱动程序通信,这是框架可以调用的回调函数,以通知驱动程序有关特定事件。 若要注册回调函数,驱动程序可以调用以下框架对象方法,并且可以将指针传递给与驱动程序支持的回调函数的所有接口关联的 IUnknown 接口。
作为驱动程序到框架通信的示例,请考虑设备的默认 I/O 队列对象。 驱动程序可以调用 IWDFIoQueue::GetState 等方法来检索有关 I/O 队列的状态信息,或 IWDFIoQueue::RetrieveNextRequest 以从 I/O 队列检索请求。 驱动程序还可以通过调用 IWDFDevice::CreateIoQueue 方法注册回调接口(如 IQueueCallbackRead 和 IQueueCallbackWrite)来请求 I/O 队列上的通知。 应用程序发送读取和写入请求时,框架随后会调用这些接口的方法。
该框架提供跨驱动程序回调方法所需的任何同步。 默认情况下,框架在设备对象级别同步;也就是说,框架不会同时在设备对象级别或以下调用事件回调方法。 驱动程序可以通过请求不同步来替代此默认值。 有关详细信息,请参阅 指定回调同步模式。