Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[Gilt nur für KMDF]
Die WdfUsbTargetDeviceCreateIsochUrb Methode weist einen isochronen USB-Anforderungsblock (URB) zu.
Syntax
NTSTATUS WdfUsbTargetDeviceCreateIsochUrb(
[in] WDFUSBDEVICE UsbDevice,
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
[in] ULONG NumberOfIsochPackets,
[out] WDFMEMORY *UrbMemory,
[out, optional] PURB *Urb
);
Parameter
[in] UsbDevice
Ein Handle für ein USB-Geräteobjekt, das aus einem vorherigen Aufruf von WdfUsbTargetDeviceCreateWithParametersabgerufen 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 Member der Struktur ein USB-Geräteobjekt (WDFUSBDEVICE) oder ein vom Framework erstelltes Anforderungsobjekt (WDFREQUEST) oder ein Objekt sein, dessen Übergeordnete Kette zu einem dieser Typen führt. Dieser Parameter ist optional und kann WDF_NO_OBJECT_ATTRIBUTES werden.
[in] NumberOfIsochPackets
Gibt die Anzahl der isochronen Pakete an, für die das System Speicher in der URB zuweist.
[out] UrbMemory
Ein Zeiger auf einen WDFMEMORY-typierten Speicherort, der ein Handle für ein Framework-Speicherobjekt empfängt.
[out, optional] Urb
Ein Zeiger auf eine URB-Struktur, die die Adresse der neuen isochronen URB empfängt. Das Framework initialisiert den Inhalt der URB-Struktur auf Null. Dieser Parameter ist optional und kann NULL sein.
Rückgabewert
WdfUsbTargetDeviceCreateIsochUrb 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, wenn er WDF_USB_DEVICE_CREATE_CONFIG_INITaufgerufen hat. |
|
Nicht genügend Arbeitsspeicher verfügbar. |
Diese Methode kann auch andere NTSTATUS-Wertezurückgeben.
Bemerkungen
Vor dem Aufrufen WdfUsbTargetDeviceCreateIsochUrbmuss ein Treiber WdfUsbTargetDeviceCreateWithParametersaufrufen. Bei erfolgreicher Ausführung gibt WdfUsbTargetDeviceCreateIsochUrb ein Handle an ein Framework-Speicherobjekt zurück, das die neu zugeordnete isochrone URB beschreibt.
Ein Treiber kann WdfUsbTargetDeviceCreateIsochUrb aufrufen, um eine URB-Struktur zuzuweisen, bevor WdfUsbTargetDeviceFormatRequestForUrbaufgerufen wird.
In der Regel ruft ein Treiber WdfUsbTargetDeviceCreateIsochUrb innerhalb eines Anforderungshandlersauf.
Das Speicherobjekt und dessen Puffer werden gelöscht, wenn das übergeordnete Objekt gelöscht wird. Ein Treiber kann auch ein Speicherobjekt und dessen Puffer löschen, indem WdfObjectDeleteaufgerufen wird.
Verwandte Informationen finden Sie im Abschnitt "Hinweise" von WdfUsbTargetDeviceCreateUrb.
Beispiele
Das folgende Codebeispiel basiert auf der PerformIsochTransfer-Routine im Isorwr-Beispieltreiber. Im Beispiel wird WdfUsbTargetDeviceCreateIsochUrb aufgerufen, um einen isochronen USB-Anforderungsblock zuzuweisen. Das Beispiel bestimmt die Anzahl der Bytes, die erforderlich sind, um die isochrone Übertragungsanforderung zu enthalten, und konfiguriert dann manuell den URB-Header und die isochronen Pakete in der URB. An diesem Punkt kann der Treiber WdfUsbTargetPipeFormatRequestForUrbaufrufen, wie im Beispiel in WdfUsbTargetDeviceCreateUrbdargestellt.
USBD_PIPE_HANDLE usbdPipeHandle;
ULONG numPackets = UserBufferLength/TransferSizePerFrame;
ULONG urbSize;
PURB urb;
WDFMEMORY memory;
WDF_OBJECT_ATTRIBUTES_INIT(&objectAttribs);
objectAttribs.ParentObject = UsbDevice;
status = WdfUsbTargetDeviceCreateIsochUrb(
pDevContext->WdfUsbTargetDevice,
&objectAttribs,
0,
numPackets,
&memory,
NULL
);
urb = WdfMemoryGetBuffer(urbMemory, &urbSize);
urbSize = GET_ISO_URB_SIZE(numPackets);
usbdPipeHandle = WdfUsbTargetPipeWdmGetPipeHandle(pipe);
urb->UrbIsochronousTransfer.Hdr.Length = GET_ISO_URB_SIZE(numPackets);
urb->UrbIsochronousTransfer.Hdr.Function = URB_FUNCTION_ISOCH_TRANSFER;
urb->UrbIsochronousTransfer.PipeHandle = usbdPipeHandle;
for (packetId = 0; packetId < numberOfPackets; packetId++) {
Urb-> UrbIsochronousTransfer.IsoPacket[packetId].Offset = xxx;
Urb-> UrbIsochronousTransfer.IsoPacket[packetId].YYY = yyy;
}
Anforderungen
| Anforderung | Wert |
|---|---|
| mindestens unterstützte Client- | Windows Vista |
| Zielplattform- | Universal |
| Minimale KMDF-Version | 1.11 |
| Header- | wdfusb.h (include Wdfusb.h) |
| Library | Wdf01000.sys (siehe Framework-Bibliotheksversionsverwaltung.) |
| IRQL- | <=DISPATCH_LEVEL |
| DDI-Complianceregeln | DriverCreate(kmdf) |