KeAcquireInStackQueuedSpinLockAtDpcLevel 函数 (wdm.h)

当调用方已在 IRQL >= DISPATCH_LEVEL 运行时,KeAcquireInStackQueuedSpinLockAtDpcLevel 例程获取排队的旋转锁。

语法

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 符合性规则 HwStorPortProhibitedDDI (storport)

另请参阅

KLOCK_QUEUE_HANDLE

KeAcquireSpinLock

KeAcquireInStackQueuedSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLockFromDpcLevel