Поделиться через


Метод 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 возвращает одно из следующих значений:

Код возврата Описание
S_OK

CreateUsbTargetDevice успешно создал объект USB-устройства, который также является целевым объектом ввода-вывода.

E_OUTOFMEMORY

В CreateUsbTargetDevice произошла ошибка выделения.

Код ошибки, определенный в Winerror.h
Это значение соответствует коду ошибки, возвращенной функцией WinUsb_Initialize .

Комментарии

Драйвер UMDF должен освободить указатель интерфейса IWDFUsbTargetDevice , который метод CreateUsbTargetDevice возвращает в параметре ppDevice , когда драйвер завершает работу с интерфейсом.

Если требуется объект файла, связанный с созданным целевым объектом ввода-вывода, драйвер должен вызвать метод IWDFIoTarget::GetTargetFile . Дополнительные сведения об этом объекте файла см. в разделе Создание файла целевым объектом ввода-вывода USB.

Примечание. CreateUsbTargetDevice наследует все методы интерфейса IWDFIoTarget .
 
Чтобы использовать только что созданный целевой объект USB-ввода-вывода в стеке устройств, INF-файл, устанавливающий драйвер UMDF, должен содержать директиву UmdfDispatcher и задать для параметра UmdfDispatcher значение WinUsb (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

См. также раздел

IWDFIoTarget

IWDFIoTarget::GetTargetFile

IWDFUsbTargetDevice

IWDFUsbTargetFactory

WinUsb_Initialize