Condividi tramite


Funzione WdfUsbTargetPipeResetSynchronously (wdfusb.h)

[Si applica a KMDF e UMDF]

Il metodo WdfUsbTargetPipeResetSynchronously compila una richiesta di reimpostazione e lo invia in modo sincrono a una pipe USB specificata.

Sintassi

NTSTATUS WdfUsbTargetPipeResetSynchronously(
  [in]           WDFUSBPIPE                Pipe,
  [in, optional] WDFREQUEST                Request,
  [in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions
);

Parametri

[in] Pipe

Handle per 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 altre informazioni, vedere la sezione Osservazioni seguente.

[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 altre informazioni, vedere la sezione Osservazioni seguente.

Valore restituito

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

Codice restituito Descrizione
STATUS_INFO_LENGTH_MISMATCH
Dimensioni della struttura WDF_REQUEST_SEND_OPTIONS specificata dal parametro RequestOptions non corretto.
STATUS_INVALID_PARAMETER
È stato rilevato un parametro non valido.
STATUS_INSUFFICIENT_RESOURCES
Memoria insufficiente disponibile.
STATUS_INVALID_DEVICE_REQUEST
IrQL del chiamante non è stato PASSIVE_LEVEL o la richiesta di I/O che il parametro Request specificato è già stato accodato 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 di I/O (IRP) rappresentato dal parametro Request non fornisce strutture IO_STACK_LOCATION sufficienti per consentire al driver di inoltrare la richiesta.
 

Questo metodo potrebbe restituire anche altri valori NTSTATUS.

Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.

Osservazioni

Usare il metodo WdfUsbTargetPipeResetSynchronously per inviare in modo sincrono una richiesta di reimpostazione USB. Per inviare tali richieste in modo asincrono, usare WdfUsbTargetPipeFormatRequestForReset, seguito da WdfRequestSend.

Prima che il framework reimposta la pipe USB della destinazione di I/O, annulla tutte le richieste di I/O che rimangono nella coda della destinazione di I/O. Il driver non deve inviare richieste di I/O aggiuntive alla destinazione di I/O fino a quando non restituisce WdfUsbTargetPipeResetSynchronously .

Il driver deve chiamare WdfIoTargetStop prima di chiamare WdfUsbTargetPipeResetSynchronously. Dopo la restituzione di WdfUsbTargetPipeResetSynchronously , il driver può chiamare WdfIoTargetStart.

Quando un driver chiama WdfUsbTargetPipeResetSynchronously, il framework invia una richiesta URB_FUNCTION_RESET_PIPE alla destinazione di I/O. Per altre informazioni sulla reimpostazione di una pipe USB, vedere la specifica USB.

Il metodo WdfUsbTargetPipeResetSynchronously 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.

È possibile inoltrare una richiesta di I/O ricevuta dal driver in una coda di I/O oppure 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 WdfUsbTargetPipeResetSynchronously.

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

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

Per informazioni su come ottenere informazioni sullo stato dopo il completamento di una richiesta di I/O, vedere Recupero di informazioni di completamento.

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

Esempi

L'esempio di codice seguente invia una richiesta di reimpostazione alla pipe di un dispositivo USB.

NTSTATUS  status;

status = WdfUsbTargetPipeResetSynchronously(
                                            Pipe, 
                                            WDF_NO_HANDLE,
                                            NULL
                                            );

Fabbisogno

Requisito Valore
Piattaforma di destinazione Universale
versione minima di KMDF 1.0
versione minima di UMDF 2.0
Header wdfusb.h (include Wdfusb.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
regole di conformità DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), RequestForUrbXrb(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

Vedere anche

WdfObjectDereference

WdfRequestCancelSentRequest

WdfRequestSend

WdfUsbTargetPipeAbortSynchronously