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 vers un objet de requête de framework.
Valeur de retour
WdfRequestCancelSentRequest retourne TRUE si elle remet correctement la demande d’annulation à la cible d’E/S du pilote. Cette méthode retourne FAUX si la requête a déjà été terminée ou annulée, ou si le pilote cible d’E/S n’a pas appelé WdfRequestMarkCancelable ou WdfRequestMarkCancelableEx.
Une vérification de bogue 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’elle avait précédemment envoyée à une cible d’E/S en appelant WdfRequestSend.
Si la demande 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 requête 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 fonction de rappel. Si le pilote de la cible n’a pas appelé WdfRequestMarkCancelable ou WdfRequestMarkCancelableEx, la requête 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 l’annulation des requêtes 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;
}
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) |
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) |