次の方法で共有


NdisAcquireSpinLock マクロ (ndis.h)

NdisAcquireSpinLock 関数はスピン ロックを取得するため、呼び出し元は、スピン ロックが保護するドライバー関数間で共有されるリソースへの排他的アクセスを取得します。

構文

void NdisAcquireSpinLock(
  [in]  _SpinLock
);

パラメーター

[in] _SpinLock

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

戻り値

なし

解説

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

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

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

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

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

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

要件

要件
サポートされている最小のクライアント Windows Vista の NDIS 6.0 および NDIS 5.1 ドライバー (「NdisAcquireSpinLock (NDIS 5.1)」を参照) でサポートされています。 Windows XP の NDIS 5.1 ドライバー (「NdisAcquireSpinLock (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

MiniportHaltEx

MiniportInitializeEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAllocateSpinLock

NdisDprAcquireSpinLock

NdisMSynchronizeWithInterruptEx

NdisReleaseSpinLock