Метод IWDFUsbTargetFactory::CreateUsbTargetDevice (wudfusb.h)
[Предупреждение: UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. В UMDF 1 новые функции не добавляются, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2. Дополнительные сведения см. в разделе начало работы с UMDF.]
Метод CreateUsbTargetDevice создает объект USB-устройства, который также является целевым объектом ввода-вывода.
Синтаксис
HRESULT CreateUsbTargetDevice(
[out] IWDFUsbTargetDevice **ppDevice
);
Параметры
[out] ppDevice
Указатель на буфер, который получает указатель на интерфейс IWDFUsbTargetDevice для объекта целевого устройства USB.
Возвращаемое значение
CreateUsbTargetDevice возвращает одно из следующих значений:
Код возврата | Описание |
---|---|
|
CreateUsbTargetDevice успешно создал объект USB-устройства, который также является целевым объектом ввода-вывода. |
|
В CreateUsbTargetDevice произошла ошибка выделения. |
|
Это значение соответствует коду ошибки, возвращенной функцией WinUsb_Initialize . |
Комментарии
Драйвер UMDF должен освободить указатель интерфейса IWDFUsbTargetDevice , который метод CreateUsbTargetDevice возвращает в параметре ppDevice , когда драйвер завершает работу с интерфейсом.
Если требуется объект файла, связанный с созданным целевым объектом ввода-вывода, драйвер должен вызвать метод IWDFIoTarget::GetTargetFile . Дополнительные сведения об этом объекте файла см. в разделе Создание файла целевым объектом ввода-вывода USB.
UmdfDispatcher=WinUsb
) в разделе DDInstall.WDF . UmdfDispatcher требуется для информирования платформы UMDF о том, что она может разрешить доступ к целевому объекту USB-ввода-вывода. Дополнительные сведения о UmdfDispatcher см. в разделе Указание директив WDF.
Примеры
В следующем примере кода показано, как создать и использовать объект USB-устройства в реализации метода IPnpCallbackHardware драйвера UMDF::OnPrepareHardware .
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 |