Share via


KeAcquireInStackQueuedSpinLock 関数 (wdm.h)

KeAcquireInStackQueuedSpinLock ルーチンは、キューに入ったスピン ロックを取得します。

構文

void KeAcquireInStackQueuedSpinLock(
  PKSPIN_LOCK         SpinLock,
  PKLOCK_QUEUE_HANDLE LockHandle
);

パラメーター

SpinLock

[入力、出力]取得するスピン ロックを指定します。 このパラメーターは 、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 が復元されます。

ドライバーは、同じスピン ロックで KeAcquireSpinLockKeAcquireInStackQueuedSpinLock の呼び出しを組み合わせてはいけません。 スピン ロックは常に、キューに登録されたスピン ロックとして、または通常のスピン ロックとして取得または解放する必要があります。

要件

要件
Header wdm.h (Wdm.h を含む)
IRQL IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 HwStorPortProhibitedDDIs(storport), MarkingQueuedIrps(wdm), QueuedSpinLock(storport), QueuedSpinLock(wdm), QueuedSpinLockRelease(storport), QueuedSpinLockRelease(wdm)

こちらもご覧ください

KLOCK_QUEUE_HANDLE

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLock