Partager via


KeAcquireInStackQueuedSpinLockAtDpcLevel, fonction (wdm.h)

La routine KeAcquireInStackQueuedSpinLockAtDpcLevel acquiert un verrou de rotation en file d’attente lorsque l’appelant s’exécute déjà à IRQL >= DISPATCH_LEVEL.

Syntaxe

void KeAcquireInStackQueuedSpinLockAtDpcLevel(
  PKSPIN_LOCK         SpinLock,
  PKLOCK_QUEUE_HANDLE LockHandle
);

Paramètres

SpinLock

[in, out] Spécifie le verrou de rotation à acquérir. Ce paramètre doit avoir été initialisé par un appel à la routine KeInitializeSpinLock.

LockHandle

[out] Pointeur vers une structure KLOCK_QUEUE_HANDLE fournie par l’appelant que la routine peut utiliser pour retourner le handle de file d’attente de verrouillage de spin. Pour libérer le verrou, l’appelant transmet cette valeur à la routine KeReleaseInStackQueuedSpinLockFromDpcLevel routine.

Valeur de retour

Aucun

Remarques

Pour un pilote s’exécutant à IRQL >= DISPATCH_LEVEL, KeAcquireInStackQueuedSpinLockAtDpcLevel acquiert un verrou de rotation en tant que verrou de spin mis en file d’attente. Pour plus d’informations, consultez verrous de rotation mis en file d’attente. Pour libérer le verrou de rotation, appelez la routine KeReleaseInStackQueuedSpinLockFromDpcLevel routine.

Les pilotes déjà en cours d’exécution à un >IRQL = DISPATCH_LEVEL peuvent appeler cette routine pour acquérir le verrou de rotation mis en file d’attente plus rapidement. Sinon, utilisez la routine KeAcquireInStackQueuedSpinLock pour acquérir le verrou de rotation.

Pour un pilote en cours d’exécution au > DISPATCH_LEVEL IRQL, cette routine acquiert le verrou sans modifier le runtime d’intégration actuel. Pour un pilote qui s’exécute à IRQL = DISPATCH_LEVEL, cette routine améliore les performances en acquérant le verrou sans d’abord définir le runtime d’intégration sur DISPATCH_LEVEL, ce qui, dans ce cas, serait une opération redondante.

Comme les verrous de rotation ordinaires, les verrous de rotation mis en file d’attente ne doivent être utilisés que dans des circonstances très spéciales. Pour obtenir une description du moment où utiliser des verrous de rotation, consultez KeAcquireSpinLock.

Les pilotes ne doivent pas combiner d’appels à KeAcquireSpinLock et KeAcquireInStackQueuedSpinLock sur le même verrou de rotation. Un verrou de rotation doit toujours être acquis ou libéré sous la forme d’un verrou de rotation mis en file d’attente, ou en tant que verrou de rotation ordinaire.

Exigences

Exigence Valeur
client minimum pris en charge Windows XP
d’en-tête wdm.h
IRQL IRQL >= DISPATCH_LEVEL
règles de conformité DDI HwStorPortProhibitedDDIs(storport)

Voir aussi

KLOCK_QUEUE_HANDLE

KeAcquireSpinLock

KeAcquireInStackQueuedSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLockFromDpcLevel