Partager via


IoSetCancelRoutine, fonction (wdm.h)

La routine IoSetCancelRoutine configure une routine Annuler fournie par le pilote pour être appelée si un IRP donné est annulé.

Syntaxe

PDRIVER_CANCEL IoSetCancelRoutine(
  [in] PIRP           Irp,
  [in] PDRIVER_CANCEL CancelRoutine
);

Paramètres

[in] Irp

Pointeur vers l’IRP entré ou supprimé d’un état annulable.

[in] CancelRoutine

Spécifie le point d’entrée de la routine Cancel fournie par l’appelant pour être appelée si l’IRP spécifié est annulé ou est 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 de retour

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 retourne NULL.

Remarques

Cette routine peut désactiver la routine Annuler actuellement définie dans un IRP.

Un pilote doit contenir le verrou de rotation d’annulation du système lors de l’appel de cette routine si le pilote utilise la file d’attente de périphérique fournie par le gestionnaire d’E/S dans l’objet de l’appareil. Le pilote s’exécute à IRQL = DISPATCH_LEVEL après avoir appelé IoAcquireCancelSpinLock jusqu’à ce qu’il libère le verrou de rotation d’annulation avec IoReleaseCancelSpinLock.

Si le pilote gère ses propres files d’attente d’IRPs, le pilote n’a pas besoin de conserver le verrou de rotation d’annulation lors de l’appel de cette routine. IoSetCancelRoutine utilise une intrinsèque d’échange interblocée pour définir l’adresse de la routine d’annulation comme opération atomique. La réduction de l’utilisation du verrou de rotation d’annulation peut améliorer les performances du pilote et les performances globales du système.

Les routines d’annulation Annuler sont appelées à IRQL = DISPATCH_LEVEL avec le verrou de rotation d’annulation conservé. La routine Annuler doit libérer le verrou de rotation d’annulation avant de retourner le contrôle.

Exigences

Exigence Valeur
plateforme cible Bureau
d’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