IWDFUsbTargetFactory::CreateUsbTargetDevice 方法 (wudfusb.h)
[警告: UMDF 2 是最新版本的 UMDF,取代了 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 未向 UMDF 1 添加新功能,并且较新版本的 Windows 10 上对 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。 有关详细信息,请参阅使用 UMDF 入门。]
CreateUsbTargetDevice 方法创建也是 I/O 目标的 USB 设备对象。
语法
HRESULT CreateUsbTargetDevice(
[out] IWDFUsbTargetDevice **ppDevice
);
参数
[out] ppDevice
指向缓冲区的指针,该缓冲区接收指向 USB 目标设备对象的 IWDFUsbTargetDevice 接口的指针。
返回值
CreateUsbTargetDevice 返回以下值之一:
返回代码 | 说明 |
---|---|
|
CreateUsbTargetDevice 已成功创建也是 I/O 目标的 USB 设备对象。 |
|
CreateUsbTargetDevice 遇到分配失败。 |
|
此值对应于 WinUsb_Initialize 函数返回的错误代码。 |
注解
当驱动程序使用 接口完成时,UMDF 驱动程序应释放 CreateUsbTargetDevice 方法在 ppDevice 参数中返回的 IWDFUsbTargetDevice 接口指针。
如果需要与创建的 I/O 目标对象关联的文件对象,驱动程序应调用 IWDFIoTarget::GetTargetFile 方法。 有关此文件对象的详细信息,请参阅 通过 USB I/O 目标创建文件。
注意CreateUsbTargetDevice 继承 IWDFIoTarget 接口的所有方法。
UmdfDispatcher=WinUsb
) 。 UmdfDispatcher 需要通知 UMDF 平台可以允许访问 USB I/O 目标。 有关 UmdfDispatcher 的详细信息,请参阅 指定 WDF 指令。
示例
下面的代码示例演示如何在 UMDF 驱动程序的 IPnpCallbackHardware::OnPrepareHardware 方法的实现中创建和使用 USB 设备对象。
HRESULT
CUmdfHidDevice::OnPrepareHardware(
__in IWDFDevice* WdfDevice
)
{
CComPtr<IWDFUsbTargetFactory> factory;
USB_INTERFACE_DESCRIPTOR interfaceDescriptor;
bool hidInterfaceFound = false;
PUSB_HID_DESCRIPTOR hidDescriptor;
NTSTATUS status;
HRESULT hr = S_OK;
//
// Get the USB I/O target factory interface.
//
hr = WdfDevice->QueryInterface(IID_PPV_ARGS(&factory));
//
// Create the USB I/O target.
//
hr = factory->CreateUsbTargetDevice(&m_UsbTargetDevice);
//
// Get the configuration descriptor for the target device.
//
if (SUCCEEDED(hr))
{
hr = RetrieveConfigDescriptor(&m_ConfigDescriptor,
&m_ConfigDescriptorCb);
}
//
// Iterate through the interfaces on the device and find the HID interface.
//
if (SUCCEEDED(hr))
{
CComPtr<IWDFUsbInterface> usbInterface;
UCHAR index;
bool found = true;
for (index = 0; index < m_ConfigDescriptor->bNumInterfaces; index += 1)
{
hr = m_UsbTargetDevice->RetrieveUsbInterface(index, &usbInterface);
if (SUCCEEDED(hr))
{
usbInterface->GetInterfaceDescriptor(&interfaceDescriptor);
if (interfaceDescriptor.bInterfaceClass == 0x3)
{
hidInterfaceFound = true;
break;
}
}
else
{
break;
}
}
if (SUCCEEDED(hr) && (hidInterfaceFound == false))
{
hr = E_FAIL;
}
}
//
// Get the HID descriptor associated with this interface.
//
if (SUCCEEDED(hr))
{
hr = ParseHidDescriptor(
m_ConfigDescriptor,
m_ConfigDescriptorCb,
interfaceDescriptor.bInterfaceNumber
);
}
//
// Process the HID information from the device and setup
// the collection data structures.
//
if (SUCCEEDED(hr))
{
hr = SetupCollections();
}
return hr;
}
要求
要求 | 值 |
---|---|
结束支持 | 在 UMDF 2.0 及更高版本中不可用。 |
目标平台 | 桌面 |
最低 UMDF 版本 | 1.5 |
标头 | wudfusb.h (包括 Wudfusb.h) |
DLL | WUDFx.dll |