次の方法で共有


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を参照してください。

このルーチンは、スピン ロックを取得するときにDISPATCH_LEVELする IRQL レベルを上げます。 呼び出し元がDISPATCH_LEVELで既に実行されていることが保証されている場合は、KeAcquireInStackQueuedSpinLockAtDpcLevel呼び出す方が効率的です。

スピン ロックを解放 KeReleaseInStackQueuedSpinLock の呼び出しは、IRQL = DISPATCH_LEVELで行う必要があります。 この呼び出しは、KeAcquireInStackQueuedSpinLock 呼び出しの開始時にオペレーティング システムが保存した元の IRQL を復元します。 ドライバーが複数のキューに置かれたスピン ロックを連続して取得した場合、元の IRQL を適切に復元するには、ドライバーが逆に解放する必要があります。

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

必要条件

要件 価値
ヘッダー 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