KeAcquireInStackQueuedSpinLock, fonction (wdm.h)

La routine KeAcquireInStackQueuedSpinLock acquiert un verrou de rotation mis 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 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. 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 acquièrent le verrou. Un pilote ne doit pas utiliser le même KLOCK_QUEUE_HANDLE à partir de plusieurs sites appelants.

Valeur de retour

None

Remarques

KeAcquireInStackQueuedSpinLock acquiert un verrou de rotation en tant que verrou de rotation 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 de l’utilisation des verrous de rotation, consultez KeAcquireSpinLock.

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

L’appel à KeReleaseInStackQueuedSpinLock qui libère le verrouillage de rotation doit se produire à IRQL = DISPATCH_LEVEL. Cet appel restaure l’IRQL d’origine que le système d’exploitation a enregistré au début de l’appel KeAcquireInStackQueuedSpinLock .

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

Configuration requise

Condition requise Valeur
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