Funzione WdfUsbTargetPipeSendUrbSynchronously (wdfusb.h)

[Si applica solo a KMDF]

Il metodo WdfUsbTargetPipeSendUrbSynchronously compila una richiesta USB per una pipe USB specificata, usando i parametri di richiesta descritti da UN'ISTANZA specificata.

Sintassi

NTSTATUS WdfUsbTargetPipeSendUrbSynchronously(
  [in]           WDFUSBPIPE                Pipe,
  [in, optional] WDFREQUEST                Request,
  [in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions,
  [in]           PURB                      Urb
);

Parametri

[in] Pipe

Handle a un oggetto pipe del framework ottenuto chiamando WdfUsbInterfaceGetConfiguredPipe.

[in, optional] Request

Handle per un oggetto richiesta framework. Questo parametro è facoltativo e può essere NULL. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

[in, optional] RequestOptions

Puntatore a una struttura WDF_REQUEST_SEND_OPTIONS allocata dal chiamante che specifica le opzioni per la richiesta. Questo puntatore è facoltativo e può essere NULL. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

[in] Urb

Puntatore a una struttura DI DIRECTORY inizializzata dal driver.

Se il driver chiamato in precedenza WdfUsbTargetDeviceCreateWithParameters per creare UsbDevice, il driver deve usare WdfUsbTargetDeviceCreateUrb oWdfUsbTargetDeviceCreateIsochUrb per creare questo VALORE DI URB.

Valore restituito

WdfUsbTargetPipeSendUrbSynchronously restituisce il valore dello stato di completamento della destinazione di I/O se l'operazione ha esito positivo. In caso contrario, questo metodo potrebbe restituire uno dei valori seguenti:

Codice restituito Descrizione
STATUS_INFO_LENGTH_MISMATCH
La dimensione della struttura WDF_REQUEST_SEND_OPTIONS specificata dal parametro RequestOptions non è corretta.
STATUS_INVALID_PARAMETER
È stato rilevato un parametro non valido.
STATUS_INSUFFICIENT_RESOURCES
Memoria insufficiente disponibile.
STATUS_INVALID_DEVICE_REQUEST
Il chiamante IRQL non è PASSIVE_LEVEL oppure la richiesta di I/O specificata è già stata accodata a una destinazione di I/O.
STATUS_IO_TIMEOUT
Il driver ha fornito un valore di timeout e la richiesta non è stata completata entro il tempo assegnato.
STATUS_REQUEST_NOT_ACCEPTED
Il pacchetto di richiesta I/O (IRP) che il parametro Request rappresenta non fornisce strutture IO_STACK_LOCATION sufficienti per consentire al driver di inoltrare la richiesta.
 

Questo metodo potrebbe restituire anche altri valori NTSTATUS.

Un controllo di bug si verifica se il driver fornisce un handle di oggetti non valido.

Commenti

Usare il metodo WdfUsbTargetPipeSendUrbSynchronously per inviare una richiesta USB in modo sincrono. Per inviare tali richieste in modo asincrono, usare WdfUsbTargetPipeFormatRequestForUrb, seguito da WdfRequestSend.

Il metodo WdfUsbTargetPipeSendUrbSynchronously non restituisce fino al completamento della richiesta, a meno che il driver non fornisca un valore di timeout nella struttura WDF_REQUEST_SEND_OPTIONS a cui punta il parametro RequestOptions o a meno che non venga rilevato un errore.

Il framework non esamina la richiesta USB. Se la richiesta modifica lo stato della pipe USB, il framework non sarà a conoscenza della modifica.

È possibile inoltrare una richiesta di I/O ricevuta dal driver in una coda di I/O oppure è possibile creare e inviare una nuova richiesta.

Per inoltrare una richiesta di I/O ricevuta dal driver in una coda di I/O, specificare l'handle della richiesta ricevuta per il parametro Request del metodo WdfUsbTargetPipeSendUrbSynchronously.

Per creare e inviare una nuova richiesta, specificare un handle di richiesta NULL per il parametro Request oppure creare un nuovo oggetto request e specificare il relativo handle:

  • Se si specifica un handle di richiesta NULL , il framework usa un oggetto request interno. Questa tecnica è semplice da usare, ma il driver non può annullare la richiesta.
  • Se si chiama WdfRequestCreate per creare uno o più oggetti richiesta, è possibile riutilizzare questi oggetti richiesta chiamando WdfRequestReuse. Questa tecnica consente all'evtDriverDevice del driverAggiungi la funzione di callback per preallocare gli oggetti di richiesta per un dispositivo. Inoltre, un altro thread driver può chiamare WdfRequestCancelSentRequest per annullare la richiesta, se necessario.
Il driver può specificare un parametroRequestOptions diverso da NULL, indipendentemente dal fatto che il driver fornisca un parametro non NULL o null Request. È possibile, ad esempio, usare il parametro RequestOptions per specificare un valore di timeout.

Per informazioni sull'acquisizione di informazioni sullo stato dopo il completamento di una richiesta di I/O, vedere Recupero delle informazioni di completamento.

Per altre informazioni sul metodo WdfUsbTargetPipeSendUrbSynchronously e sulle destinazioni di I/O USB, vedere Destinazioni di I/O USB.

Esempio

Nell'esempio di codice seguente viene inizializzato un OGGETTO URB e viene inviato IL VALORE a una pipe USB.

URB  urb;
PURB  pUrb = NULL;
NTSTATUS status;

pUrb = &urb;
pUrb->UrbHeader.Length = (USHORT) sizeof(struct _URB_GET_CURRENT_FRAME_NUMBER);
pUrb->UrbHeader.Function = URB_FUNCTION_GET_CURRENT_FRAME_NUMBER;
pUrb->UrbGetCurrentFrameNumber.FrameNumber = 0; 

status = WdfUsbTargetPipeSendUrbSynchronously(
                                              Pipe,
                                              Request,
                                              NULL,
                                              pUrb
                                              );

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1,0
Intestazione wdfusb.h (include Wdfusb.h)
Libreria Wdf01000.sys (vedere Framework Library Versioning).
IRQL PASSIVE_LEVEL
Regole di conformità DDI DriverCreate(kmdf), IoctlReqs(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), SyncReqSend(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

Vedi anche

WDF_REQUEST_SEND_OPTIONS

WdfRequestCancelSentRequest

WdfUsbInterfaceGetConfiguredPipe