UMDF DDI 编程模型

警告

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<对象><操作>,其中 <object> 表示队列、请求等,而 <action> 指示接口的作用。 回调接口的方法以“On”开头。

UMDF 驱动程序通过其方法和属性与框架的对象通信。 框架通过事件通知与驱动程序通信,事件通知是框架可以调用的回调函数,以通知驱动程序有关特定事件的信息。 若要注册回调函数,驱动程序可以调用以下框架对象方法,并可以传递指向与驱动程序支持的回调函数的所有接口关联的 IUnknown 接口的指针。

作为驱动程序到框架通信的示例,请考虑设备的默认 I/O 队列对象。 驱动程序可以调用 IWDFIoQueue::GetState 等方法来检索有关 I/O 队列的状态信息,或 调用 IWDFIoQueue::RetrieveNextRequest 等方法来检索 I/O 队列中的请求。 驱动程序还可以通过调用 IWDFDevice::CreateIoQueue 方法注册回调接口(如 IQueueCallbackReadIQueueCallbackWrite)来请求 I/O 队列上的通知。 应用程序发送读取和写入请求时,框架随后会调用这些接口的方法。

框架提供跨驱动程序回调方法所需的任何同步。 默认情况下,框架在设备对象级别同步;也就是说,框架不会同时在设备对象级别或低于设备对象级别调用事件回调方法。 驱动程序可以通过不请求不同步来替代此默认值。 有关详细信息,请参阅 指定回调同步模式