Condividi tramite


Funzione WdfRequestReuse (wdfrequest.h)

[Si applica a KMDF e UMDF]

Il metodo WdfRequestReuse reinizializza un oggetto richiesta framework in modo che possa essere riutilizzato.

Sintassi

NTSTATUS WdfRequestReuse(
  [in] WDFREQUEST                Request,
  [in] PWDF_REQUEST_REUSE_PARAMS ReuseParams
);

Parametri

[in] Request

Handle per un oggetto richiesta del framework.

[in] ReuseParams

Puntatore a una struttura WDF_REQUEST_REUSE_PARAMS allocata dal chiamante.

Valore restituito

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

Codice restituito Descrizione
STATUS_INVALID_PARAMETER
Un parametro di input non è valido.
STATUS_WDF_REQUEST_INVALID_STATE
Il driver ha fornito un IRP nella struttura WDF_REQUEST_REUSE_PARAMS , ma l'oggetto richiesta specificato non è stato ottenuto da WdfRequestCreateFromIrp.
 

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

Commenti

Un driver basato su framework può riutilizzare gli oggetti di richiesta del framework creati dalle chiamate precedenti a WdfRequestCreate o WdfRequestCreateFromIrp. I driver possono anche riutilizzare gli oggetti richiesta ricevuti dal framework, ma non possono impostare il flag di WDF_REQUEST_REUSE_SET_NEW_IRP per tali oggetti richiesta.

Nota

I driver devono prestare attenzione quando si riutilizzano gli oggetti richiesta ricevuti dal framework. Il riutilizzo di una richiesta di questo tipo reimposta il flag di annullamento dell'IRP sottostante e può impedire a un driver chiamante di annullare la richiesta.

Un driver può riutilizzare un oggetto richiesta dopo il completamento della richiesta originale. Dopo che un driver ha chiamato WdfRequestReuse, il contenuto della richiesta deve essere reinizializzato. Il driver può specificare alcuni parametri di richiesta nella struttura WDF_REQUEST_REUSE_PARAMS .

Se si vuole che la richiesta riutilizzata disponga di una funzione di callback CompletionRoutine , il driver deve chiamare WdfRequestSetCompletionRoutine dopo aver chiamato WdfRequestReuse.

Per altre informazioni su WdfRequestReuse, vedere Riutilizzo degli oggetti richiesta framework.

Esempio

L'esempio di codice seguente fa parte di una funzione di callback CompletionRoutine che chiama WdfRequestReuse in modo che il driver possa riutilizzare una richiesta allocata dal driver.

VOID
MyRequestCompletionRoutine(
    IN WDFREQUEST  Request,
    IN WDFIOTARGET  Target,
    PWDF_REQUEST_COMPLETION_PARAMS  CompletionParams,
    IN WDFCONTEXT  Context
    )
{
    WDF_REQUEST_REUSE_PARAMS  params;
    NTSTATUS  status;
...
    WDF_REQUEST_REUSE_PARAMS_INIT(
                                  &params,
                                  WDF_REQUEST_REUSE_NO_FLAGS,
                                  STATUS_SUCCESS
                                  );

    status = WdfRequestReuse(
                             Request,
                             &params
                             );
    ASSERT(NT_SUCCESS(status));
...
}

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1.0
Versione UMDF minima 2,0
Intestazione wdfrequest.h (include Wdf.h)
Libreria Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Regole di conformità DDI DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), ReqSendFail(kmdf)

Vedi anche

CompletionRoutine

WDF_REQUEST_REUSE_PARAMS

WDF_REQUEST_REUSE_PARAMS_INIT

WdfRequestCreate

WdfRequestCreateFromIrp

WdfRequestSetCompletionRoutine