在 UMDF 1.x 驱动程序中使用 USB 设备

警告

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 设备表示为框架 USB 设备对象。 UMDF 驱动程序必须先创建框架 USB 设备对象,然后驱动程序才能访问框架对 USB I/O 目标的支持。 UMDF 提供 USB 设备对象方法,使 UMDF 驱动程序能够:

创建 UMDF-USB 设备对象

若要使用框架的 USB I/O 目标功能,UMDF 驱动程序必须先获取指向 IWDFUsbTargetFactory 接口的指针。 若要获取指针,驱动程序必须调用设备的 IWDFDevice 接口的 QueryInterface 方法。 下面的代码示例演示如何调用 QueryInterface 以获取指针:

hr = pdevice->QueryInterface(IID_IWDFUsbTargetFactory, (LPVOID*)&ppUsbTargetFactory);

驱动程序接下来必须调用 IWDFUsbTargetFactory::CreateUsbTargetDevice 方法,以便为设备创建 USB I/O 目标对象。 驱动程序创建 USB I/O 目标后,驱动程序可以将请求发送到 I/O 目标。 通常,驱动程序从 IPnpCallbackHardware::OnPrepareHardware 回调函数中调用 IWDFUsbTargetFactory::CreateUsbTargetDevice

驱动程序调用 IWDFUsbTargetFactory::CreateUsbTargetDevice 后,驱动程序可以 (获取 USB 设备信息 ,例如,设备的 USB 描述符、USB 接口和接口终结点) 。 USB 规范中介绍了 USB 描述符。

获取 UMDF-USB 设备信息

在 UMDF 驱动程序调用 IWDFUsbTargetFactory::CreateUsbTargetDevice 方法来创建 UMDF-USB 目标设备对象后,驱动程序可以调用 USB 目标设备对象为获取 USB 设备信息而定义的以下方法:

IWDFUsbTargetDevice::RetrieveDescriptor
获取设备的 USB 设备描述符。

IWDFUsbTargetDevice::GetNumInterfaces
获取设备支持的 USB 接口数。

IWDFUsbTargetDevice::RetrieveUsbInterface
获取指向 IWDFUsbInterface 接口的指针,该接口公开设备支持的 USB 接口之一。

IWDFUsbTargetDevice::RetrieveDeviceInformation
检索与 USB 设备关联的功能信息。

IWDFUsbTargetDevice::RetrievePowerPolicy
检索 WinUsb 电源策略。

IWDFUsbTargetDevice::GetWinUsbHandle
获取与 I/O 目标设备对象关联的 WinUsb 接口句柄。

将控制传输发送到 UMDF-USB 设备对象

UMDF 驱动程序可以调用 IWDFUsbTargetDevice::FormatRequestForControlTransfer 方法,以设置描述标准、特定于设备类或特定于供应商的 USB 控制传输的 I/O 请求的格式。 然后,驱动程序可以调用 IWDFIoRequest::Send 方法以同步或异步方式发送请求。

为 UMDF-USB 设备设置电源策略

UMDF 驱动程序可以调用 IWDFUsbTargetDevice::SetPowerPolicy 方法来设置 WinUsb 用于 USB 设备的电源策略。 USB 设备的电源策略会影响设备电源管理状态的更改。