WdfUsbTargetDeviceCreateUrb-Funktion (wdfusb.h)
[Gilt nur für KMDF]
Die WdfUsbTargetDeviceCreateUrb-Methode weist einen USB-Anforderungsblock (URB) zu.
Syntax
NTSTATUS WdfUsbTargetDeviceCreateUrb(
[in] WDFUSBDEVICE UsbDevice,
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
[out] WDFMEMORY *UrbMemory,
[out, optional] PURB *Urb
);
Parameter
[in] UsbDevice
Ein Handle für ein USB-Geräteobjekt, das von einem vorherigen Aufruf von WdfUsbTargetDeviceCreateWithParameters abgerufen wurde.
[in, optional] Attributes
Ein Zeiger auf eine vom Aufrufer bereitgestellte WDF_OBJECT_ATTRIBUTES-Struktur , die Attribute für das neue Speicherobjekt enthält. Wenn der Treiber diesen Parameter bereitstellt, muss das ParentObject-Element der Struktur ein USB-Geräteobjekt (WDFUSBDEVICE) oder ein vom Framework erstelltes Anforderungsobjekt (WDFREQUEST) oder ein beliebiges Objekt sein, dessen Kette von übergeordneten Elementen zu einem dieser Typen führt. Dieser Parameter ist optional und kann WDF_NO_OBJECT_ATTRIBUTES werden.
[out] UrbMemory
Ein Zeiger auf einen WDFMEMORY-typisierten Speicherort, der ein Handle für ein Frameworkspeicherobjekt empfängt.
[out, optional] Urb
Ein Zeiger auf eine URB-Struktur, die die Adresse der neu zugewiesenen URB empfängt. Dieser Parameter ist optional und kann NULL sein.
Rückgabewert
WdfUsbTargetDeviceCreateUrb gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist. Andernfalls kann diese Methode einen der folgenden Werte zurückgeben:
Rückgabecode | Beschreibung |
---|---|
|
Ein ungültiger Parameter wurde erkannt. |
|
Der Treiber hat keine Clientvertragsversion angegeben, als er WDF_USB_DEVICE_CREATE_CONFIG_INIT aufgerufen hat. |
|
Es war nicht genügend Arbeitsspeicher vorhanden, um eine neue URB zu erstellen. |
Diese Methode kann auch andere NTSTATUS-Werte zurückgeben.
Hinweise
Vor dem Aufrufen von WdfUsbTargetDeviceCreateUrb muss ein Treiber WdfUsbTargetDeviceCreateWithParameters aufrufen. Bei erfolgreicher Ausführung gibt WdfUsbTargetDeviceCreateUrb ein Handle an ein Frameworkspeicherobjekt zurück, das die neu zugewiesene URB beschreibt. In der Regel ruft ein Treiber WdfUsbTargetDeviceCreateUrb innerhalb eines Anforderungshandlers auf.
Ein Treiber kann WdfUsbTargetDeviceCreateUrb aufrufen, um eine URB-Struktur zuzuweisen, bevor WdfUsbTargetDeviceFormatRequestForUrb aufgerufen wird.
WdfUsbTargetDeviceCreateUrb ähnelt im Betrieb WdfMemoryCreate. Beide Methoden weisen ein Frameworkspeicherobjekt zu, und beide Methoden bieten auch die Möglichkeit, den Puffer (in diesem Fall die URB) zu empfangen, der dem Speicherobjekt zugeordnet ist. In beiden Fällen kann der Aufrufer den Puffer auch später abrufen, indem er WdfMemoryGetBuffer aufruft.
Wenn der Treiber beim Aufrufen von WdfUsbTargetDeviceCreateUrb einen Urb-Parameter bereitstellt, können Sie die URB manuell oder durch Aufrufen der UsbBuildXxx-Routinen formatieren.
Das Speicherobjekt und sein Puffer werden gelöscht, wenn das übergeordnete Objekt gelöscht wird. Ein Treiber kann auch ein Speicherobjekt und seinen Puffer löschen, indem er WdfObjectDelete aufruft.
Beispiele
Im folgenden Codebeispiel wird ein Frameworkspeicherobjekt deklariert. Das Beispiel ruft WdfUsbTargetDeviceCreateUrb auf, um einen USB-Anforderungsblock zuzuweisen, und ruft dann WdfUsbTargetDeviceFormatRequestForUrb auf, um eine Anforderung zu formatieren, die den Inhalt der URB-Struktur verwendet. Schließlich registriert das Beispiel eine CompletionRoutine-Rückruffunktion und sendet die Anforderung an ein E/A-Ziel.
WDFMEMORY memory;
PURB urb = NULL;
WDF_OBJECT_ATTRIBUTES_INIT(&objectAttribs);
objectAttribs.ParentObject = UsbDevice;
status = WdfUsbTargetDeviceCreateUrb(
pDevContext->WdfUsbTargetDevice,
&objectAttribs,
&memory,
&urb);
status = WdfUsbTargetDeviceFormatRequestForUrb(
deviceContext->WdfUsbTargetDevice,
request,
memory,
NULL);
WdfRequestSetCompletionRoutine(
request,
MyCompletionRoutine,
NULL);
if (!WdfRequestSend(
request,
WdfUsbTargetDeviceGetIoTarget(UsbDevice),
NULL)) {
status = WdfRequestGetStatus(request);
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows Vista |
Zielplattform | Universell |
KMDF-Mindestversion | 1.11 |
Kopfzeile | wdfusb.h (einschließlich Wdfusb.h) |
Bibliothek | Wdf01000.sys (siehe Versionierung der Frameworkbibliothek.) |
IRQL | <=DISPATCH_LEVEL |
DDI-Complianceregeln | DriverCreate(kmdf) |
Weitere Informationen
WDF_USB_DEVICE_CREATE_CONFIG_INIT
WdfUsbTargetDeviceCreateIsochUrb