Fonction IoSetCancelRoutine (wdm.h)
La routine IoSetCancelRoutine configure une routine Cancel fournie par le pilote à appeler si une IRP donnée est annulée.
Syntaxe
PDRIVER_CANCEL IoSetCancelRoutine(
[in] PIRP Irp,
[in] PDRIVER_CANCEL CancelRoutine
);
Paramètres
[in] Irp
Pointeur vers l’IRP en cours de mise en place ou de suppression d’un état annulable.
[in] CancelRoutine
Spécifie le point d’entrée de la routine Cancel fournie par l’appelant à appeler si l’IRP spécifié est annulé ou a la valeur NULL si l’IRP donné est supprimé de l’état annulable. Cette routine est déclarée comme suit :
VOID
(*PDRIVER_CANCEL)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
Valeur retournée
IoSetCancelRoutine retourne la valeur précédente de Irp-CancelRoutine>. Si aucune routine d’annulation n’a été définie précédemment ou si l’annulation IRP est déjà en cours, IoSetCancelRoutine renvoie la valeur NULL.
Remarques
Cette routine peut désactiver la routine Annuler actuellement définie dans un IRP.
Un pilote doit tenir le verrou d’annulation du système lors de l’appel de cette routine si le pilote utilise la file d’attente de périphériques fournie par le gestionnaire d’E/S dans l’objet de périphérique. Le pilote s’exécute à IRQL = DISPATCH_LEVEL après avoir appelé IoAcquireCancelSpinLock jusqu’à ce qu’il libère le verrou d’annulation de rotation avec IoReleaseCancelSpinLock.
Si le pilote gère ses propres files d’attente d’irps, il n’a pas besoin de tenir le verrou d’annulation de rotation lors de l’appel de cette routine. IoSetCancelRoutine utilise une intrinsèque d’échange verrouillée pour définir l’adresse de la routine Cancel en tant qu’opération atomique. Une utilisation réduite du verrouillage de rotation d’annulation peut améliorer les performances du pilote et les performances globales du système.
Les routines d’annulation de pilote sont appelées dans IRQL = DISPATCH_LEVEL avec le verrouillage d’annulation de rotation maintenu. La routine Cancel doit libérer le verrou de rotation d’annulation avant de retourner le contrôle.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | DISPATCH_LEVEL (voir la section Remarques) |
Règles de conformité DDI | IrpCancelField(wdm), StartIoCancel(wdm) |