Funzione WdfUsbTargetDeviceCreateIsochUrb (wdfusb.h)

[Si applica solo a KMDF]

Il metodo di WdfUsbTargetDeviceCreateIsochUrb alloca un blocco di richieste USB isochronous (RTF).

Sintassi

NTSTATUS WdfUsbTargetDeviceCreateIsochUrb(
  [in]            WDFUSBDEVICE           UsbDevice,
  [in, optional]  PWDF_OBJECT_ATTRIBUTES Attributes,
  [in]            ULONG                  NumberOfIsochPackets,
  [out]           WDFMEMORY              *UrbMemory,
  [out, optional] PURB                   *Urb
);

Parametri

[in] UsbDevice

Handle per un oggetto dispositivo USB ottenuto da una chiamata precedente a WdfUsbTargetDeviceCreateWithParameters.

[in, optional] Attributes

Puntatore a una struttura di WDF_OBJECT_ATTRIBUTES fornita dal chiamante che contiene gli attributi per il nuovo oggetto memoria. Se il driver fornisce questo parametro, il membro ParentObject deve essere un oggetto dispositivo USB (WDFUSBDEVICE) o un oggetto richiesta (WDFREQUEST) creato dal framework o qualsiasi oggetto la cui catena di elementi padre conduce a uno di questi tipi. Questo parametro è facoltativo e può essere WDF_NO_OBJECT_ATTRIBUTES.

[in] NumberOfIsochPackets

Specifica il numero di pacchetti isocroni per i quali il sistema alloca la memoria nell'OGGETTO RUNTIME.

[out] UrbMemory

Puntatore a una posizione tipizzata WDFMEMORY che riceve un handle per un oggetto memoria framework.

[out, optional] Urb

Puntatore a una struttura DI AMMINISTRAZIONE che riceve l'indirizzo del nuovo isocrona). Il framework inizializza il contenuto della struttura SHADOW su zero. Questo parametro è facoltativo e può essere NULL.

Valore restituito

WdfUsbTargetDeviceCreateIsochUrb restituisce STATUS_SUCCESS se l'operazione ha esito positivo. In caso contrario, questo metodo può restituire uno dei valori seguenti:

Codice restituito Descrizione
STATUS_INVALID_PARAMETER
È stato rilevato un parametro non valido.
STATUS_INVALID_DEVICE_STATE
Il driver non ha specificato una versione del contratto client quando ha chiamato WDF_USB_DEVICE_CREATE_CONFIG_INIT.
STATUS_INSUFFICIENT_RESOURCES
Memoria insufficiente disponibile.
 

Questo metodo potrebbe anche restituire altri valori NTSTATUS .

Osservazioni

Prima di chiamare WdfUsbTargetDeviceCreateIsochUrb, un driver deve chiamare WdfUsbTargetDeviceCreateWithParameters. In caso di esito positivo, WdfUsbTargetDeviceCreateIsochUrb restituisce un handle a un oggetto memoria framework che descrive l'isocrona isocrona appena allocata.

Un driver può chiamare WdfUsbTargetDeviceCreateIsochUrb per allocare una struttura ODBC prima di chiamare WdfUsbTargetDeviceFormatRequestForUrb.

In genere, un driver chiama WdfUsbTargetDeviceCreateIsochUrb dall'interno di un gestore di richieste .

L'oggetto memory e il relativo buffer vengono eliminati quando l'oggetto padre viene eliminato. Un driver può anche eliminare un oggetto memoria e il relativo buffer chiamando WdfObjectDelete.

Per informazioni correlate, vedere la sezione Osservazioni di WdfUsbTargetDeviceCreateUrb.

Esempi

L'esempio di codice seguente si basa sulla routine PerformIsochTransfer nel driver di esempio Isorwr. L'esempio chiama WdfUsbTargetDeviceCreateIsochUrb per allocare un blocco di richiesta USB isochronous. Nell'esempio viene determinato il numero di byte necessari per contenere la richiesta di trasferimento isocrona e quindi viene configurata manualmente l'intestazione DHCP e i pacchetti isochronous nell'OGGETTO. A questo punto, il driver può chiamare WdfUsbTargetPipeFormatRequestForUrb, come illustrato nell'esempio in WdfUsbTargetDeviceCreateUrb.


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


Fabbisogno

Requisito Valore
client minimo supportato Windows Vista
piattaforma di destinazione Universale
versione minima di KMDF 1.11
intestazione wdfusb.h (include Wdfusb.h)
libreria Wdf01000.sys (vedere Controllo delle versioni della libreria framework).
IRQL <=DISPATCH_LEVEL
regole di conformità DDI DriverCreate(kmdf)

Vedere anche

WdfUsbTargetDeviceCreateUrb

WdfUsbTargetDeviceCreateWithParameters