共用方式為


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。

驅動程式不得將呼叫合併至相同微調鎖定上的 KeAcquireSpinLockKeAcquireInStackQueuedSpinLock。 微調鎖定必須一律取得或釋放為佇列微調鎖定,或作為一般的微調鎖定。

要求

要求 價值
標頭 wdm.h (包括 Wdm.h)
IRQL IRQL <= DISPATCH_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIS(storport)MarkingQueuedIrps(wdm)QueuedSpinLock(storport)QueuedSpinLock(wdm)QueuedSpinLockRelease(storport)QueuedSpinLockRelease(wdm)

另請參閱

KLOCK_QUEUE_HANDLE

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLock