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。
驱动程序不得将对 KeAcquireSpinLock 和 KeAcquireInStackQueuedSpinLock 的调用合并在同一个旋转锁上。 必须始终以排队的旋转锁或普通旋转锁的形式获取或释放旋转锁。
要求
要求 | 值 |
---|---|
Header | wdm.h (包括 Wdm.h) |
IRQL | IRQL <= DISPATCH_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDDI (storport) 、 MarkingQueuedIrps (wdm) 、 QueuedSpinLock (storport) 、 QueuedSpinLock (wdm) 、 QueuedSpinLockRelease (storport) 、 QueuedSpinLockRelease (wdm) |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈