KeAcquireInStackQueuedSpinLockAtDpcLevel 函数 (wdm.h)

KeAcquireInStackQueuedSpinLockAtDpcLevel 例程在 IRQL >= DISPATCH_LEVEL 运行时获取排队旋转锁。

语法

void KeAcquireInStackQueuedSpinLockAtDpcLevel(
  PKSPIN_LOCK         SpinLock,
  PKLOCK_QUEUE_HANDLE LockHandle
);

参数

SpinLock

[in, out]指定要获取的旋转锁。 必须通过调用 KeInitializeSpinLock 例程来初始化此参数。

LockHandle

[out]指向调用方提供的 KLOCK_QUEUE_HANDLE 结构的指针,例程可用于返回旋转锁队列句柄。 若要释放锁,调用方会将此值传递给 KeReleaseInStackQueuedSpinLockFromDpcLevel 例程。

返回值

没有

言论

对于在 IRQL >= DISPATCH_LEVEL 运行的驱动程序,KeAcquireInStackQueuedSpinLockAtDpcLevel 获取旋转锁作为 排队旋转锁。 有关详细信息,请参阅 排队旋转锁。 若要释放旋转锁,请调用 KeReleaseInStackQueuedSpinLockFromDpcLevel 例程。

已在 IRQL >= DISPATCH_LEVEL上运行的驱动程序可以调用此例程来更快地获取排队的旋转锁。 否则,请使用 KeAcquireInStackQueuedSpinLock 例程获取旋转锁。

对于在 IRQL > DISPATCH_LEVEL 上运行的驱动程序,此例程获取锁而不修改当前的 IRQL。 对于在 IRQL = DISPATCH_LEVEL 运行的驱动程序,此例程通过在不首先将 IRQL 设置为DISPATCH_LEVEL的情况下获取锁来提高性能,在本例中为冗余作。

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

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

要求

要求 价值
最低支持的客户端 Windows XP
标头 wdm.h
IRQL IRQL >= DISPATCH_LEVEL
DDI 符合性规则 HwStorPortProhibitedDIS(storport)

另请参阅

KLOCK_QUEUE_HANDLE

KeAcquireSpinLock

KeAcquireInStackQueuedSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLockFromDpcLevel