EVT_WDF_REQUEST_COMPLETION_ROUTINE fonction de rappel (wdfrequest.h)
[S’applique à KMDF et UMDF]
La fonction de rappel d’événement CompletionRoutine du pilote s’exécute quand un autre pilote termine une requête 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 vers un objet de requête framework qui représente la requête 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 requête.
[in] Params
Pointeur vers une structure WDF_REQUEST_COMPLETION_PARAMS qui contient des informations sur la requête terminée. Consultez 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 spécifié dans un appel précédent à WdfRequestSetCompletionRoutine.
Valeur de retour
Aucun
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 Fin des requêtes 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 requête 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 De saisie semi-automatique d’un pilote KMDF peut s’exécuter à l'<IRQL = DISPATCH_LEVEL quel que soit le ExecutionLevel spécifié dans la structure WDF_OBJECT_ATTRIBUTES de 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 que SDV et d’autres outils de vérification nécessitent, 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
)
{...}
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Universel |
version minimale de KMDF | 1.0 |
version minimale de UMDF | 2.0 |
d’en-tête | wdfrequest.h (include Wdf.h) |
IRQL | <=DISPATCH_LEVEL |