Freigeben über


IWDFUsbTargetFactory::CreateUsbTargetDevice-Methode (wudfusb.h)

[Warnung: UMDF 2 ist die neueste Version von UMDF und ersetzt UMDF 1. Alle neuen UMDF-Treiber sollten mit UMDF 2 geschrieben werden. UMDF 1 werden keine neuen Features hinzugefügt, und die Unterstützung für UMDF 1 in neueren Versionen von Windows 10 ist eingeschränkt. Universelle Windows-Treiber müssen UMDF 2 verwenden. Weitere Informationen finden Sie unter Erste Schritte mit UMDF.]

Die CreateUsbTargetDevice-Methode erstellt ein USB-Geräteobjekt, das auch ein E/A-Ziel ist.

Syntax

HRESULT CreateUsbTargetDevice(
  [out] IWDFUsbTargetDevice **ppDevice
);

Parameter

[out] ppDevice

Ein Zeiger auf einen Puffer, der einen Zeiger auf die IWDFUsbTargetDevice-Schnittstelle für das USB-Zielgerätobjekt empfängt.

Rückgabewert

CreateUsbTargetDevice gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK

CreateUsbTargetDevice hat erfolgreich ein USB-Geräteobjekt erstellt, das auch ein E/A-Ziel ist.

E_OUTOFMEMORY

Bei CreateUsbTargetDevice ist ein Zuordnungsfehler aufgetreten.

Ein Fehlercode, der in "Winerror.h" definiert ist
Dieser Wert entspricht dem Fehlercode, den die funktion WinUsb_Initialize zurückgegeben hat.

Hinweise

Ein UMDF-Treiber sollte den IWDFUsbTargetDevice-Schnittstellenzeiger freigeben, den die CreateUsbTargetDevice-Methode im ppDevice-Parameter zurückgibt, wenn der Treiber mit der Schnittstelle fertig ist.

Wenn das Dateiobjekt, das dem erstellten E/A-Zielobjekt zugeordnet ist, erforderlich ist, sollte der Treiber die IWDFIoTarget::GetTargetFile-Methode aufrufen. Weitere Informationen zu diesem Dateiobjekt finden Sie unter Dateierstellung durch ein USB-E/A-Ziel.

HinweisCreateUsbTargetDevice erbt alle Methoden der IWDFIoTarget-Schnittstelle .
 
Um das neu erstellte USB-E/A-Zielobjekt in einem Gerätestapel zu verwenden, muss die INF-Datei, die den UMDF-Treiber installiert, die UmdfDispatcher-Direktive enthalten und UmdfDispatcher im Abschnitt DDInstall.WDF auf WinUsb (UmdfDispatcher=WinUsb) festlegen. UmdfDispatcher ist erforderlich, um die UMDF-Plattform darüber zu informieren, dass sie den Zugriff auf das USB-E/A-Ziel zulassen kann. Weitere Informationen zu UmdfDispatcher finden Sie unter Angeben von WDF-Direktiven.

Beispiele

Das folgende Codebeispiel zeigt, wie Sie ein USB-Geräteobjekt in einer Implementierung der IPnpCallbackHardware::OnPrepareHardware-Methode des UMDF-Treibers erstellen und verwenden.

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;
}

Anforderungen

Anforderung Wert
Ende des Supports In UMDF 2.0 und höher nicht verfügbar.
Zielplattform Desktop
UMDF-Mindestversion 1.5
Kopfzeile wudfusb.h (schließen Sie Wudfusb.h ein)
DLL WUDFx.dll

Weitere Informationen

IWDFIoTarget

IWDFIoTarget::GetTargetFile

IWDFUsbTargetDevice

IWDFUsbTargetFactory

WinUsb_Initialize