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