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。
驱动程序不得在同一旋转锁上合并对 KeAcquireSpinLock 和 KeAcquireInStackQueuedSpinLock 的调用。 旋转锁必须始终作为排队旋转锁或普通旋转锁获取或释放。
要求
要求 | 价值 |
---|---|
标头 | wdm.h (包括 Wdm.h) |
IRQL | IRQL <= DISPATCH_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDIS(storport), MarkingQueuedIrps(wdm), QueuedSpinLock(storport), QueuedSpinLock(wdm)、QueuedSpinLockRelease(storport)、QueuedSpinLockRelease(wdm) |