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à sur 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 de KLOCK_QUEUE_HANDLE fournie par l’appelant que la routine peut utiliser pour retourner le handle de file d’attente de verrouillage de rotation. Pour libérer le verrou, l’appelant passe cette valeur à la routine KeReleaseInStackQueuedSpinLockFromDpcLevel .

Valeur de retour

None

Remarques

Pour un pilote s’exécutant sur IRQL >= DISPATCH_LEVEL, KeAcquireInStackQueuedSpinLockAtDpcLevel acquiert un verrou de rotation en tant que verrou de rotation 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 .

Les pilotes qui sont déjà en cours d’exécution dans 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 qui s’exécute sur irQL > DISPATCH_LEVEL, cette routine acquiert le verrou sans modifier l’IRQL actuel. Pour un pilote qui s’exécute sur IRQL = DISPATCH_LEVEL, cette routine améliore les performances en acquérant le verrou sans définir d’abord l’IRQL 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 de l’utilisation des verrous de rotation, consultez KeAcquireSpinLock.

Les pilotes ne doivent pas combiner les 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 en file d’attente ou d’un verrou de rotation ordinaire.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP
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