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 |
---|---|
|
CreateUsbTargetDevice hat erfolgreich ein USB-Geräteobjekt erstellt, das auch ein E/A-Ziel ist. |
|
Bei CreateUsbTargetDevice ist ein Zuordnungsfehler aufgetreten. |
|
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.
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 |