NdisAcquireReadWriteLock 関数 (ndis.h)

NdisAcquireReadWriteLock 関数は、ドライバー スレッド間で共有されているリソースへの書き込みまたは読み取りアクセスに呼び出し元が使用するロックを取得します。

メモNDIS 6.20 以降のドライバーでは、読み取り/書き込みロック インターフェイスは非推奨です。NdisAcquireReadWriteLock の代わりに NdisAcquireRWLockRead または NdisAcquireRWLockWrite を使用する必要があります。
 

構文

void NdisAcquireReadWriteLock(
  [in, out] PNDIS_RW_LOCK Lock,
  [in]      BOOLEAN       fWrite,
  [_out_]   PLOCK_STATE   LockState
);

パラメーター

[in, out] Lock

ロックを表す不透明な変数へのポインター。 呼び出し元は、このロックを使用して共有リソースにアクセスできます。

[in] fWrite

ブール値です。 値が TRUE の場合、この関数には共有リソースへの書き込みアクセスが提供されます。値が FALSE の場合、この関数には読み取りアクセスが提供されます。

[_out_] LockState

LockState。 ロックの状態を追跡する不透明な変数へのポインター。 この変数は、呼び出し元がロックを取得して解放するまでの間隔に存在します。 呼び出し元は、同じ ISR 以外のドライバー スレッドからロックを取得しようとするたびに、 LOCK_STATE型の 異なる変数を使用する必要があります。

戻り値

なし

解説

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

NdisAcquireReadWriteLock を使用してロックを取得した後、呼び出し元は を呼び出してロックを解放する必要があります。 NdisReleaseReadWriteLock 関数。 ロックの参照カウントをデクリメントするには、ドライバーが を呼び出す必要があります
NdisAcquireReadWriteLock の呼び出しごとに NdisReleaseReadWriteLock を 1 回実行します。

ドライバー スレッド間で共有されるリソースを変更するには、ドライバー スレッドが書き込みロックを取得する必要があります。 これらのリソースを監視するには、ドライバー スレッドが読み取り専用ロックを取得する必要があります。 読み取りアクセスでは、スピン ロックのインターロック操作や競合は必要ありません。 読み取り専用アクセスを使用すると、オペレーティング システムとドライバーのパフォーマンスを維持するのに役立ちます。

ドライバー スレッドは、25 マイクロ秒を超える書き込みロックを保持しないでください。 書き込みロックを長期間保持すると、オペレーティング システムとドライバーの両方のパフォーマンスが低下します。

ドライバーは、ロックを使用して、その他の関数が MiniportInterrupt および/またはと共有する読み取りまたは書き込みアクセスからリソースを保護することはできません。 MiniportDisableInterruptEx 関数。 代わりに、ドライバーは を呼び出す必要があります NdisMSynchronizeWithInterruptEx MiniportSynchronizeInterrupt 関数は、同じ DIRQL にある共有リソースにアクセスします。
MiniportInterrupt および/または MiniportDisableInterruptEx 関数は、 を実行します。

NdisAcquireReadWriteLock は 常に IRQL を発生させます。 書き込み操作の場合、 NdisAcquireReadWriteLock はスピン ロックを取得して IRQL を発生させます。 読み取り操作の場合、 NdisAcquireReadWriteLock は IRQL を IRQL = DISPATCH_LEVELに明示的に発生させます。

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

要件

要件
サポートされている最小のクライアント 代わりに NdisAcquireRWLockRead または NdisAcquireRWLockWrite を使用する必要がある NDIS 6.20 以降のドライバーでは非推奨です。 Windows Vista の NDIS 6.0 および NDIS 5.1 ドライバー (NdisAcquireReadWriteLock (NDIS 5.1) を参照) でサポートされています。 Windows XP で NDIS 5.1 ドライバー (NdisAcquireReadWriteLock (NDIS 5.1) を参照) でサポートされています。
対象プラットフォーム ユニバーサル
Header ndis.h (Ndis.h を含む)
Library Ndis.lib
[DLL] Ndis.sys
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 Irql_Synch_Function(ndis)

こちらもご覧ください

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAcquireRWLockRead

NdisAcquireRWLockWrite

NdisInitializeReadWriteLock

NdisMSynchronizeWithInterruptEx

NdisReleaseReadWriteLock