Méthode IWDFIoRequest2 ::StopAcknowledge (wudfddi.h)
[Avertissement : UMDF 2 est la dernière version d’UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide d’UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et la prise en charge d’UMDF 1 est limitée sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2. Pour plus d’informations, consultez Prise en main avec UMDF.]
La méthode StopAcknowledge informe l’infrastructure que le pilote a cessé de traiter une demande d’E/S spécifiée.
Syntaxe
void StopAcknowledge(
[in] BOOL Requeue
);
Paramètres
[in] Requeue
Valeur booléenne qui, si elle est TRUE, oblige l’infrastructure à mettre la demande de nouveau en file d’attente afin que l’infrastructure la remet à nouveau au pilote. Si la valeur est FALSE, l’infrastructure ne met pas la demande en file d’attente. Pour plus d'informations, consultez la section Notes qui suit.
Valeur de retour
None
Remarques
Si un pilote inscrit une fonction de rappel IQueueCallbackIoStop ::OnIoStop 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 opérationnel (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 terminer, annuler ou reporter le traitement de chaque requête en effectuant l’une des opérations suivantes :
- Si le pilote est propriétaire de la demande, il peut appeler IWDFIoRequest ::Complete pour terminer ou annuler la demande.
- Si le pilote a transféré la demande à une cible d’E/S, il peut appeler IWDFIoRequest ::CancelSentRequest pour tenter d’annuler la demande.
- Si le pilote reporte le traitement de la demande, il doit appeler StopAcknowledge.
Si le pilote n’appelle pas IWDFIoRequest ::Complete ou StopAcknowledge pour chaque requête qu’une fonction de rappel IQueueCallbackIoStop ::OnIoStop reçoit, le framework n’autorise pas l’appareil à quitter son état opérationnel (D0). Potentiellement, cette inaction peut empêcher un système d’entrer dans son état de mise en veille prolongée ou d’un autre état de faible alimentation du système.
Quand la fonction de rappel IQueueCallbackIoStop ::OnIoStop d’un pilote appelle StopAcknowledge, elle peut définir le paramètre Requeue sur TRUE ou FALSE :
-
Si vous définissez Requeue sur TRUE , l’infrastructure replace la requête dans sa file d’attente d’E/S.
Lorsque l’appareil sous-jacent revient à son état opérationnel (D0), le framework réélise la demande au pilote.
-
Si vous définissez Requeue sur FALSE , la propriété de la demande reste au pilote. Le pilote doit cesser d’effectuer tout traitement d’E/S nécessitant un accès matériel.
Lorsque l’appareil sous-jacent revient à son état opérationnel (D0), l’infrastructure appelle la fonction de rappel IQueueCallbackIoResume ::OnIoResume du pilote, afin que le pilote puisse continuer à traiter la demande.
Avant d’appeler StopAcknowledge, la fonction de rappel IQueueCallbackIoStop ::OnIoStop du pilote doit arrêter tout le traitement de la demande d’E/S qui nécessite l’accès à l’appareil sous-jacent, car l’appareil est sur le point de passer à un état de faible consommation.
Exemples
L’exemple de code suivant est une fonction de rappel IQueueCallbackIoStop ::OnIoStop qui vérifie si une requête reçue est annulable et, si elle l’est, 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 la fonction de rappel IQueueCallbackIoResume ::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);
}
Configuration requise
Condition requise | Valeur |
---|---|
Fin de la prise en charge | Non disponible dans UMDF 2.0 et versions ultérieures. |
Plateforme cible | Desktop (Expérience utilisateur) |
Version UMDF minimale | 1,9 |
En-tête | wudfddi.h (inclure Wudfddi.h) |
DLL | WUDFx.dll |
Voir aussi
IQueueCallbackIoResume ::OnIoResume