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 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)

Voir aussi

CompletionRoutine

EvtRequestCancel

WdfRequestMarkCancelable

WdfRequestMarkCancelableEx

WdfRequestSend