KeAcquireInStackQueuedSpinLock 函数 (wdm.h)

KeAcquireInStackQueuedSpinLock 例程获取排队的旋转锁。

语法

void KeAcquireInStackQueuedSpinLock(
  PKSPIN_LOCK         SpinLock,
  PKLOCK_QUEUE_HANDLE LockHandle
);

参数

SpinLock

[in, out]指定要获取的旋转锁。 此参数必须已使用 KeInitializeSpinLock 进行初始化。

LockHandle

[out]指向调用方提供的 KLOCK_QUEUE_HANDLE 变量的指针,例程可用于返回旋转锁队列句柄。 调用方在释放锁时将此值传递给 KeReleaseInStackQueuedSpinLock 。 驱动程序通常应在每次获取锁时在堆栈上分配结构。 驱动程序不应使用来自多个调用站点的相同KLOCK_QUEUE_HANDLE。

返回值

备注

KeAcquireInStackQueuedSpinLock 将获取旋转锁作为 排队的旋转锁。 有关详细信息,请参阅 排队的旋转锁。 调用方通过调用 KeReleaseInStackQueuedSpinLock 例程释放旋转锁。

与普通旋转锁一样,排队的旋转锁只能在非常特殊的情况下使用。 有关何时使用旋转锁的说明,请参阅 KeAcquireSpinLock

获取旋转锁时,此例程会将 IRQL 级别提高到 DISPATCH_LEVEL。 如果调用方保证已在 DISPATCH_LEVEL 运行,则调用 KeAcquireInStackQueuedSpinLockAtDpcLevel 会更有效。

对释放旋转锁的 KeReleaseInStackQueuedSpinLock 的调用必须在 IRQL = DISPATCH_LEVEL进行。 此调用将还原操作系统在 KeAcquireInStackQueuedSpinLock 调用开始时保存的原始 IRQL。

驱动程序不得将对 KeAcquireSpinLockKeAcquireInStackQueuedSpinLock 的调用合并在同一个旋转锁上。 必须始终以排队的旋转锁或普通旋转锁的形式获取或释放旋转锁。

要求

要求
Header wdm.h (包括 Wdm.h)
IRQL IRQL <= DISPATCH_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) MarkingQueuedIrps (wdm) QueuedSpinLock (storport) QueuedSpinLock (wdm) QueuedSpinLockRelease (storport) QueuedSpinLockRelease (wdm)

另请参阅

KLOCK_QUEUE_HANDLE

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLock