KeAcquireInStackQueuedSpinLock, fonction (wdm.h)

La routine KeAcquireInStackQueuedSpinLock acquiert un verrou de rotation en file d’attente.

Syntaxe

void KeAcquireInStackQueuedSpinLock(
  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é avec KeInitializeSpinLock.

LockHandle

[out] Pointeur vers une variable KLOCK_QUEUE_HANDLE fournie par l’appelant que la routine peut utiliser pour retourner le handle de file d’attente de verrous spin. L’appelant transmet cette valeur à KeReleaseInStackQueuedSpinLock lors de la libération du verrou. Les pilotes doivent normalement allouer la structure sur la pile chaque fois qu’ils obtiennent le verrou. Un pilote ne doit pas utiliser la même KLOCK_QUEUE_HANDLE à partir de plusieurs sites appelants.

Valeur de retour

Aucun

Remarques

KeAcquireInStackQueuedSpinLock 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. L’appelant libère le verrou de rotation en appelant la routine KeReleaseInStackQueuedSpinLock.

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.

Cette routine élève le niveau IRQL à DISPATCH_LEVEL lors de l’acquisition du verrou de rotation. Si l’appelant est garanti qu’il s’exécute déjà à DISPATCH_LEVEL, il est plus efficace d’appeler KeAcquireInStackQueuedSpinLockAtDpcLevel.

L’appel à KeReleaseInStackQueuedSpinLock qui libère le verrou de rotation doit se produire à IRQL = DISPATCH_LEVEL. Cet appel restaure le runtime d’intégration d’origine enregistré par le système d’exploitation au début de l’appel KeAcquireInStackQueuedSpinLock. Si un pilote acquiert plusieurs verrous de rotation mis en file d’attente en série, il doit les libérer en arrière pour restaurer correctement le runtime d’intégration d’origine.

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é en tant que verrou de rotation mis en file d’attente ou en tant que verrou de rotation ordinaire.

Exigences

Exigence Valeur
d’en-tête wdm.h (include Wdm.h)
IRQL IRQL <= DISPATCH_LEVEL
règles de conformité DDI HwStorPortProhibitedDDIs(storport), MarkingQueuedIrps(wdm), QueuedSpinLock(storport), QueuedSpinLock(wdm), QueuedSpinLockRelease(storport), QueuedSpinLockRelease(wdm)

Voir aussi

KLOCK_QUEUE_HANDLE

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLock