WdfRequestCancelSentRequest, fonction (wdfrequest.h)
[S’applique à KMDF et UMDF]
La méthode WdfRequestCancelSentRequest tente d’annuler une demande d’E/S que l’appelant a précédemment envoyée à une cible d’E/S.
Syntaxe
BOOLEAN WdfRequestCancelSentRequest(
[in] WDFREQUEST Request
);
Paramètres
[in] Request
Handle pour un objet de requête d’infrastructure.
Valeur retournée
WdfRequestCancelSentRequest retourne TRUE s’il remet correctement la demande d’annulation à la cible d’E/S du pilote. Cette méthode retourne FALSE si la requête a déjà été effectuée ou annulée, ou si le pilote cible d’E/S n’a pas appelé WdfRequestMarkCancelable ou WdfRequestMarkCancelableEx.
Un bogue case activée se produit si le pilote fournit un handle d’objet non valide.
Remarques
Un pilote peut appeler WdfRequestCancelSentRequest pour tenter d’annuler une demande d’E/S qu’il avait précédemment envoyée à une cible d’E/S en appelant WdfRequestSend.
Si la requête se trouve dans la file d’attente de la cible d’E/S, l’infrastructure annule la demande. Si l’infrastructure a déjà remis la demande au pilote de la cible d’E/S et si ce pilote a appelé WdfRequestMarkCancelable ou WdfRequestMarkCancelableEx pour activer l’annulation, l’infrastructure appelle la fonction de rappel EvtRequestCancel de ce pilote. Si le pilote de la cible n’a pas appelé WdfRequestMarkCancelable ou WdfRequestMarkCancelableEx, la demande n’est pas annulée, sauf si la demande devient annulable.
Si le pilote a inscrit une fonction de rappel CompletionRoutine pour la demande, l’infrastructure appelle la fonction de rappel une fois la demande annulée.
En règle générale, si votre pilote appelle WdfRequestCancelSentRequest, il doit incrémenter le nombre de références de l’objet de requête. Pour plus d’informations, consultez Synchronisation de l’annulation des demandes envoyées.
Pour plus d’informations sur l’annulation des demandes, consultez Annulation des demandes d’E/S.
Exemples
L’exemple de code suivant provient de l’exemple de pilote kmdf_fx2 . Cet exemple est une fonction de rappel EvtIoStop . Étant donné que ce pilote envoie chaque requête à sa cible d’E/S, la fonction de rappel EvtIoStop appelle WdfRequestCancelSentRequest si l’appareil a été supprimé.
VOID
OsrFxEvtIoStop(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN ULONG ActionFlags
)
{
UNREFERENCED_PARAMETER(Queue);
if (ActionFlags & WdfRequestStopActionSuspend) {
WdfRequestStopAcknowledge(Request, FALSE);
} else if (ActionFlags & WdfRequestStopActionPurge) {
WdfRequestCancelSentRequest(Request);
}
return;
}
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) |
Bibliothèque | Wdf01000.sys (KMDF) ; WUDFx02000.dll (UMDF) |
IRQL | <=DISPATCH_LEVEL |
Règles de conformité DDI | DriverCreate(kmdf), EvtIoStopCancel(kmdf), EvtIoStopCompleteOrStopAck(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |