Partager via


IWDFIoRequest2 ::StopAcknowledge, méthode (wudfddi.h)

[Avertissement : UMDF 2 est la dernière version de UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide de UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et il existe une prise en charge limitée de UMDF 1 sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2. Pour plus d’informations, consultez Bien démarrer avec UMDF.]

La méthode StopAcknowledge informe l’infrastructure que le pilote a arrêté de traiter une requête d’E/S spécifiée.

Syntaxe

void StopAcknowledge(
  [in] BOOL Requeue
);

Paramètres

[in] Requeue

Valeur booléenne qui, si TRUE, entraîne la remise de la requête dans la file d’attente afin que l’infrastructure la remet à nouveau au pilote. Si faux, l’infrastructure ne met pas à nouveau la demande en file d’attente. Pour plus d’informations, consultez la section Remarques suivante.

Valeur de retour

Aucun

Remarques

Si un pilote inscrit un IQueueCallbackIoStop ::OnIoStop fonction de rappel pour une file d’attente d’E/S, l’infrastructure l’appelle lorsque l’appareil sous-jacent de la file d’attente quitte son état de fonctionnement (D0). L’infrastructure appelle cette fonction de rappel pour chaque demande d’E/S que le pilote possède au moment où la file d’attente est arrêtée. Le pilote doit effectuer, annuler ou reporter le traitement de chaque requête en effectuant l’une des opérations suivantes :

  • Si le pilote possède la requête, il peut appeler IWDFIoRequest ::Complete pour terminer ou annuler la requête.
  • Si le pilote a transféré la requête à une cible d’E/S, il peut appeler IWDFIoRequest ::CancelSentRequest pour tenter d’annuler la requête.
  • Si le pilote reporte le traitement de la demande, il doit appeler StopAcknowledge.
Si votre pilote appelle StopAcknowledge, il doit appeler cette méthode à partir de son IQueueCallbackIoStop ::OnIoStop fonction de rappel.

Si le pilote n’appelle pas IWDFIoRequest ::Complete ou StopAcknowledge pour chaque requête indiquant qu’un IQueueCallbackIoStop ::OnIoStop fonction de rappel reçoit, l’infrastructure n’autorise pas l’appareil à quitter son état de travail (D0). Potentiellement, cette inaction peut empêcher un système d’entrer son état de mise en veille prolongée ou un autre état d’alimentation faible du système.

Lorsqu’une fonction de rappel IQueueCallbackIoStop ::OnIoStop appelle StopAcknowledge, elle peut définir le paramètre requeue sur TRUE ou FALSE:

  • Le fait de définir mise en file d’attente sur TRUE entraîne le retour de la requête dans sa file d’attente d’E/S.

    Lorsque l’appareil sous-jacent retourne à son état de fonctionnement (D0), l’infrastructure redélise la demande au pilote.

  • La définition requeue sur faux entraîne la propriété de la requête à rester avec le pilote. Le pilote doit arrêter d’effectuer tout traitement d’E/S nécessitant un accès matériel.

    Lorsque l’appareil sous-jacent retourne à son état de fonctionnement (D0), l’infrastructure appelle la IQueueCallbackIoResume ::OnIoResume fonction de rappel, afin que le pilote puisse continuer à traiter la demande.

Si le pilote avait précédemment appelé IWDFIoRequest ::MarkCancelable, il doit appeler IWDFIoRequest ::UnmarkCancelable avant d’appeler StopAcknowledge avec Requeue défini sur TRUE.

Avant d’appeler StopAcknowledge, la fonction de rappel IQueueCallbackIoStop ::OnIoStop fonction de rappel doit arrêter tout le traitement de la requête d’E/S qui nécessite l’accès à l’appareil sous-jacent, car l’appareil est sur le point d’entrer un état de faible alimentation.

Exemples

L’exemple de code suivant est un IQueueCallbackIoStop ::OnIoStop fonction de rappel qui vérifie si une demande reçue est annulable et, si c’est le cas, appelle IWDFIoRequest ::UnmarkCancelable. Si IWDFIoRequest ::UnmarkCancelable retourne HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED), l’exemple retourne simplement parce que la fonction de rappel IRequestCallbackCancel ::OnCancel du pilote gère la requête. Sinon, l’exemple appelle StopAcknowledge et spécifie FALSE afin que l’infrastructure appelle finalement la fonction de rappel IQueueCallbackIoResume ::OnIoResume ::OnIoResume du pilote.

void
CMyReadWriteQueue::OnIoStop(
    __in IWDFIoQueue*  pWdfQueue,
    __in IWDFIoRequest*  pWdfRequest,
    __in ULONG  ActionFlags
    )
{ HRESULT status;

    if (ActionFlags & WdfRequestStopRequestCancelable) {
        status = pWdfRequest->UnmarkCancelable();
        if (status == HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED)) {
        return;
        }
    }
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;

    r2->StopAcknowledge(FALSE);
}

Exigences

Exigence Valeur
fin du support Indisponible dans UMDF 2.0 et versions ultérieures.
plateforme cible Bureau
version minimale de UMDF 1.9
d’en-tête wudfddi.h (include Wudfddi.h)
DLL WUDFx.dll

Voir aussi

IQueueCallbackIoResume ::OnIoResume

IQueueCallbackIoStop ::OnIoStop

IWDFIoRequest2