Partager via


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)

Voir aussi

CompletionRoutine

EvtRequestCancel

WdfRequestMarkCancelable

WdfRequestMarkCancelableEx

WdfRequestSend