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。 如果驱动程序在系列中获取多个排队旋转锁,则必须反向释放它们才能正确还原原始 IRQL。

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

要求

要求 价值
标头 wdm.h (包括 Wdm.h)
IRQL IRQL <= DISPATCH_LEVEL
DDI 符合性规则 HwStorPortProhibitedDIS(storport)MarkingQueuedIrps(wdm)QueuedSpinLock(storport)QueuedSpinLock(wdm)QueuedSpinLockRelease(storport)QueuedSpinLockRelease(wdm)

另请参阅

KLOCK_QUEUE_HANDLE

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLock