次の方法で共有


NdisDprAcquireSpinLock マクロ (ndis.h)

NdisDprAcquireSpinLock 関数は、呼び出し元がマルチプロセッサ セーフな方法で ISR 以外のドライバー関数間で共有されているリソースへのアクセスを同期できるように、スピン ロックを取得します。

構文

void NdisDprAcquireSpinLock(
  [in]  _SpinLock
);

パラメーター

[in] _SpinLock

呼び出し元によって既に初期化されている不透明なスピン ロックへのポインター。

戻り値

なし

解説

ミニポート ドライバーは、他の Ndis を呼び出す前に 、NdisAllocateSpinLock を使用してNDIS_SPIN_LOCK型の変数を初期化する必要があります 。SpinLock 関数。 ドライバーは、使用するスピン ロックの常駐ストレージを提供する必要があります。

NdisDprAcquireSpinLock は、ミニポート ドライバーが IRQL = DISPATCH_LEVELで実行中にのみ呼び出すことができる NdisAcquireSpinLock の最適化されたバージョンです。

NdisDprAcquireSpinLock を使用してスピン ロックを取得した後、呼び出し元は NdisDprReleaseSpinLock の呼び出しでそのロックを解放する必要があります。 ミニポート ドライバーは、 NdisDprAcquireSpinLock の各呼び出しの後に NdisDprReleaseSpinLock を呼び出す必要があります。 それ以外の場合は、ドライバーがハングしてデッドロックが発生します。

NdisDprAcquireSpinLock で取得したスピン ロックは、NdisDprReleaseSpinLock で解放する必要があります。 NdisAcquireSpinLock で取得したスピン ロックは、NdisReleaseSpinLock で解放する必要があります。

ドライバーは、長期間にわたってスピン ロックを保持しないでください (いくつかの手順を超える)。 スピン ロックを 25 マイクロ秒より長く保持すると、システムとドライバーの両方のパフォーマンスが低下します。

ミニポート ドライバーは、スピン ロックを使用して、その他の関数が MiniportInterrupt および/または と共有するリソースを保護することはできません MiniportDisableInterruptEx 関数。 代わりに、ミニポート ドライバーは を呼び出す必要があります。 NdisMSynchronizeWithInterruptEx MiniportSynchronizeInterrupt 関数は、同じ DIRQL でこのような共有リソースにアクセスします。
MiniportInterrupt 関数および /または MiniportDisableInterruptEx 関数を使用します。

NDIS スピン ロックの取得と解放の詳細については、「 ネットワーク ドライバーでの同期と通知」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Vista の NDIS 6.0 および NDIS 5.1 ドライバー (NdisDprAcquireSpinLock (NDIS 5.1) を参照) でサポートされています。 Windows XP の NDIS 5.1 ドライバー (「NdisDprAcquireSpinLock (NDIS 5.1)」を参照) でサポートされています。
対象プラットフォーム ユニバーサル
Header ndis.h (Ndis.h を含む)
Library Ndis.lib
IRQL DISPATCH_LEVEL
DDI コンプライアンス規則 Irql_Synch_Function(ndis)SpinLock(ndis)SpinLockBalanced(ndis)SpinLockDpr(ndis)SpinLockDprRelease(ndis)SpinlockRelease(ndis)

こちらもご覧ください

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAcquireSpinLock

NdisAllocateSpinLock

NdisDprReleaseSpinLock

NdisMSynchronizeWithInterruptEx

NetTimerCallback