IWDFIoRequest ::MarkCancelable, 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 MarkCancelable active l’annulation de la requête d’E/S.
Syntaxe
void MarkCancelable(
[in] IRequestCallbackCancel *pCancelCallback
);
Paramètres
[in] pCancelCallback
Pointeur vers l’interface IRequestCallbackCancel dont la méthode appelle l’infrastructure après l’annulation de la requête d’E/S.
Valeur de retour
Aucun
Remarques
Une fois qu’un pilote reçoit une requête d’E/S en entrée à un IQueueCallbackRead ::OnRead, IQueueCallbackWrite ::OnWrite, ou IQueueCallbackDeviceIoControl ::OnDeviceIoControl fonction de rappel d’événement, le pilote peut appeler la méthode MarkCancelable pour activer l’annulation de la requête. Plus tard, le pilote peut appeler la méthode IWDFIoRequest ::UnmarkCancelable pour désactiver l’annulation de la requête.
Avant qu’un pilote appelle MarkCancelable, le pilote doit implémenter la méthode IRequestCallbackCancel ::OnCancel.
L’infrastructure de pilote en mode utilisateur (UMDF) n’autorise qu’un seul IRequestCallbackCancel ::OnCancel méthode par file d’attente. Par conséquent, lorsqu’un pilote appelle MarkCancelable pour les requêtes associées à une file d’attente particulière pour permettre à l’infrastructure d’annuler ces requêtes, le pilote doit passer un pointeur vers l’interface IRequestCallbackCancel pour le même objet de rappel de requête. Plus tard, pour annuler chaque requête, l’infrastructure transmet un pointeur vers l’interface IWDFIoRequest pour la requête dans un appel à la méthode IRequestCallbackCancel ::OnCancel de cet objet de rappel de requête.
Le pilote doit appeler méthode IWDFIoRequest ::Complete, soit à partir de la méthode IRequestCallbackCancel ::OnCancel, soit à partir de son chemin d’achèvement d’E/S normal.
Une fois qu’un pilote appelle MarkCancelable pour activer l’annulation, la demande reste annulable pendant que le pilote a possession de l’objet de requête, sauf si le pilote appelle unmarkCancelable pour désactiver l’annulation.
Si le pilote appelle la méthode IWDFIoRequest ::ForwardToIoQueue pour transférer la requête vers une autre file d’attente, les règles suivantes s’appliquent :
-
L’annulation des demandes d’E/S ne peut pas être activée lorsque le pilote transfère les requêtes à une autre file d’attente.
En règle générale, le pilote ne doit pas appeler MarkCancelable pour activer l’annulation d’une demande avant d’appeler IWDFIoRequest ::ForwardToIoQueue. Le pilote peut également effectuer l’annulation de la demande. Toutefois, le pilote doit ensuite appeler UnmarkCancelable pour désactiver l’annulation de la demande avant d’appeler IWDFIoRequest ::ForwardToIoQueue.
- Bien que la demande se trouve dans une deuxième file d’attente, l’infrastructure le possède et peut l’annuler sans notifier le pilote.
- Une fois que l’infrastructure a mis en file d’attente la requête de la deuxième file d’attente et remet la demande au pilote, le pilote peut appeler MarkCancelable pour activer l’annulation.
Exemples
L’exemple de code suivant configure une requête afin que l’infrastructure puisse l’annuler.
//
// The QueryInteraface should not fail.
//
(VOID)this->QueryInterface(_uuidof(IRequestCallbackCancel),
(PVOID *)&cancelCallback);
pWdfRequest->MarkCancelable(cancelCallback);
Exigences
Exigence | Valeur |
---|---|
fin du support | Indisponible dans UMDF 2.0 et versions ultérieures. |
plateforme cible | Bureau |
version minimale de UMDF | 1.5 |
d’en-tête | wudfddi.h (include Wudfddi.h) |
DLL | WUDFx.dll |
Voir aussi
IQueueCallbackDeviceIoControl ::OnDeviceIoControl
IRequestCallbackCancel ::OnCancel