Partager via


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)

Voir aussi

IoAcquireCancelSpinLock

IoReleaseCancelSpinLock