EVT_WDF_REQUEST_COMPLETION_ROUTINE fonction de rappel (wdfrequest.h)
[S’applique à KMDF et UMDF]
La fonction de rappel d’événement CompletionRoutine d’un pilote s’exécute lorsqu’un autre pilote termine une demande d’E/S spécifiée.
Syntaxe
EVT_WDF_REQUEST_COMPLETION_ROUTINE EvtWdfRequestCompletionRoutine;
void EvtWdfRequestCompletionRoutine(
[in] WDFREQUEST Request,
[in] WDFIOTARGET Target,
[in] PWDF_REQUEST_COMPLETION_PARAMS Params,
[in] WDFCONTEXT Context
)
{...}
Paramètres
[in] Request
Handle pour un objet de demande d’infrastructure qui représente la demande d’E/S terminée.
[in] Target
Handle vers un objet cible d’E/S qui représente la cible d’E/S qui a terminé la demande.
[in] Params
Pointeur vers une structure WDF_REQUEST_COMPLETION_PARAMS qui contient des informations sur la requête terminée. Voir la remarque ci-dessous concernant la validité des paramètres d’achèvement.
[in] Context
Informations de contexte fournies par le pilote, que le pilote a spécifiées dans un appel précédent à WdfRequestSetCompletionRoutine.
Valeur de retour
None
Remarques
Pour inscrire une fonction de rappel CompletionRoutine pour une requête d’E/S, un pilote doit appeler WdfRequestSetCompletionRoutine. Pour plus d’informations sur cette fonction de rappel, consultez Achèvement des demandes d’E/S.
La structure des paramètres d’achèvement est entièrement remplie avec des informations valides uniquement si le pilote a mis en forme la demande en appelant l’une des options suivantes :
- Méthodes WdfIoTargetFormatXxx , par exemple WdfIoTargetFormatRequestForRead
- Méthodes WdfUsbTargetDeviceFormatRequestForXxx , par exemple WdfUsbTargetDeviceFormatRequestForString
- Méthodes WdfUsbTargetPipeFormatRequestForXxx , par exemple WdfUsbTargetPipeFormatRequestForWrite
Si le pilote a mis en forme la requête à l’aide de WdfRequestFormatRequestUsingCurrentType ou WdfRequestWdmFormatUsingStackLocation, seul le champ IoStatus dans la structure des paramètres d’achèvement est valide.
Le CompletionRoutine d’un pilote KMDF peut s’exécuter à IRQL <= DISPATCH_LEVEL indépendamment de la valeur ExecutionLevel spécifiée dans la structure WDF_OBJECT_ATTRIBUTES pour l’objet de requête d’E/S.
Exemples
Le type de fonction est déclaré dans Wdfrequest.h, comme suit.
typedef VOID
(EVT_WDF_REQUEST_COMPLETION_ROUTINE)(
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
IN PWDF_REQUEST_COMPLETION_PARAMS Params,
IN WDFCONTEXT Context
);
Pour définir une fonction de rappel CompletionRoutine nommée MyCompletionRoutine, vous devez d’abord fournir une déclaration de fonction requise par SDV et d’autres outils de vérification, comme suit :
EVT_WDF_REQUEST_COMPLETION_ROUTINE MyCompletionRoutine;
Ensuite, implémentez votre fonction de rappel comme suit :
VOID
MyCompletionRoutine (
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
IN PWDF_REQUEST_COMPLETION_PARAMS Params,
IN WDFCONTEXT Context
)
{...}
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
Version KMDF minimale | 1.0 |
Version UMDF minimale | 2.0 |
En-tête | wdfrequest.h (inclure Wdf.h) |
IRQL | <=DISPATCH_LEVEL |