KeAcquireInStackQueuedSpinLockAtDpcLevel 関数 (wdm.h)
呼び出し元が IRQL >= DISPATCH_LEVELで既に実行されている場合、KeAcquireInStackQueuedSpinLockAtDpcLevel ルーチンはキューに入ったスピン ロックを取得します。
構文
void KeAcquireInStackQueuedSpinLockAtDpcLevel(
PKSPIN_LOCK SpinLock,
PKLOCK_QUEUE_HANDLE LockHandle
);
パラメーター
SpinLock
[入力、出力]取得するスピン ロックを指定します。 このパラメーターは、 KeInitializeSpinLock ルーチンの呼び出しによって初期化されている必要があります。
LockHandle
[out]呼び出し元が指定した KLOCK_QUEUE_HANDLE 構造体へのポインター。この構造体を使用して、スピン ロック キュー ハンドルを返すことができます。 ロックを解除するために、呼び出し元はこの値を KeReleaseInStackQueuedSpinLockFromDpcLevel ルーチンに 渡します。
戻り値
なし
解説
IRQL >= DISPATCH_LEVELで実行されているドライバーの場合、 KeAcquireInStackQueuedSpinLockAtDpcLevel は 、キューに入ったスピン ロックとしてスピン ロックを取得します。 詳細については、「 キューに入ったスピン ロック」を参照してください。 スピン ロックを解放するには、 KeReleaseInStackQueuedSpinLockFromDpcLevel ルーチンを 呼び出します。
IRQL >= DISPATCH_LEVEL で既に実行されているドライバーは、このルーチンを呼び出して、キューに入ったスピン ロックをより迅速に取得できます。 それ以外の場合は、 KeAcquireInStackQueuedSpinLock ルーチンを使用してスピン ロックを取得します。
IRQL > DISPATCH_LEVELで実行されているドライバーの場合、このルーチンは現在の IRQL を変更せずにロックを取得します。 IRQL = DISPATCH_LEVELで実行されているドライバーの場合、このルーチンは、最初に IRQL をDISPATCH_LEVELに設定せずにロックを取得することでパフォーマンスを向上させます。この場合は冗長操作になります。
通常のスピン ロックと同様に、キューに置かれたスピン ロックは、非常に特殊な状況でのみ使用する必要があります。 スピン ロックを使用するタイミングの詳細については、「 KeAcquireSpinLock」を参照してください。
ドライバーは、同じスピン ロックで KeAcquireSpinLock と KeAcquireInStackQueuedSpinLock の呼び出しを組み合わせてはなりません。 スピン ロックは、キューに登録されたスピン ロックまたは通常のスピン ロックとして、常に取得または解放する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP |
Header | wdm.h |
IRQL | IRQL >= DISPATCH_LEVEL |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport) |