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) |