WdfRequestReuse, fonction (wdfrequest.h)

[S’applique à KMDF et UMDF]

La méthode WdfRequestReuse réinitialise un objet de demande d’infrastructure afin qu’il puisse être réutilisé.

Syntaxe

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

Paramètres

[in] Request

Handle d’un objet de requête d’infrastructure.

[in] ReuseParams

Pointeur vers une structure de WDF_REQUEST_REUSE_PARAMS allouée par l’appelant.

Valeur retournée

WdfRequestReuse retourne STATUS_SUCCESS si l’opération réussit. Sinon, cette méthode peut retourner l’une des valeurs suivantes :

Code de retour Description
STATUS_INVALID_PARAMETER
Un paramètre d’entrée n’est pas valide.
STATUS_WDF_REQUEST_INVALID_STATE
Le pilote a fourni un IRP dans la structure WDF_REQUEST_REUSE_PARAMS , mais l’objet de requête spécifié n’a pas été obtenu à partir de WdfRequestCreateFromIrp.
 

Un bogue case activée se produit si le pilote fournit un handle d’objet non valide.

Remarques

Un pilote basé sur l’infrastructure peut réutiliser les objets de requête d’infrastructure qu’il a créés par les appels précédents à WdfRequestCreate ou WdfRequestCreateFromIrp. Les pilotes peuvent également réutiliser les objets de requête qu’ils ont reçus de l’infrastructure, mais ils ne peuvent pas définir l’indicateur WDF_REQUEST_REUSE_SET_NEW_IRP pour ces objets de requête.

Notes

Les pilotes doivent faire preuve de prudence lors de la réutilisation des objets de demande reçus de l’infrastructure. La réutilisation d’une telle demande réinitialise l’indicateur d’annulation de l’IRP sous-jacent et peut empêcher un pilote appelant d’annuler la demande.

Un pilote peut réutiliser un objet de requête une fois la demande d’origine terminée. Une fois qu’un pilote a appelé WdfRequestReuse, le contenu de la requête doit être réinitialisé. Le pilote peut spécifier certains paramètres de requête dans la structure WDF_REQUEST_REUSE_PARAMS .

Si vous souhaitez que la demande réutilisée ait une fonction de rappel CompletionRoutine , le pilote doit appeler WdfRequestSetCompletionRoutine après avoir appelé WdfRequestReuse.

Pour plus d’informations sur WdfRequestReuse, consultez Réutilisation d’objets de demande d’infrastructure.

Exemples

L’exemple de code suivant fait partie d’une fonction de rappel CompletionRoutine qui appelle WdfRequestReuse afin que le pilote puisse réutiliser une requête allouée par le pilote.

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

Configuration requise

Condition requise Valeur
Plateforme cible Universal
Version KMDF minimale 1.0
Version UMDF minimale 2.0
En-tête wdfrequest.h (include Wdf.h)
Bibliothèque Wdf01000.sys (KMDF) ; WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Règles de conformité DDI DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), ReqSendFail(kmdf)

Voir aussi

CompletionRoutine

WDF_REQUEST_REUSE_PARAMS

WDF_REQUEST_REUSE_PARAMS_INIT

WdfRequestCreate

WdfRequestCreateFromIrp

WdfRequestSetCompletionRoutine