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。
驱动程序不得将对 KeAcquireSpinLock 和 KeAcquireInStackQueuedSpinLock 的调用组合在同一个旋转锁上。 必须始终以排队的旋转锁或普通旋转锁的形式获取或释放旋转锁。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP |
标头 | wdm.h |
IRQL | IRQL >= DISPATCH_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDDI (storport) |