NdisAcquireRWLockWrite 関数 (ndis.h)
NdisAcquireRWLockWrite 関数は、呼び出し元がドライバー スレッド間で共有されているリソースへの書き込みアクセスに使用する書き込みロックを取得します。
構文
void NdisAcquireRWLockWrite(
[in] PNDIS_RW_LOCK_EX Lock,
[out] PLOCK_STATE_EX LockState,
[in] UCHAR Flags
);
パラメーター
[in] Lock
ロックを表す不透明な NDIS_RW_LOCK_EX 変数へのポインター。 呼び出し元は、このロックを使用して、ISR 以外のドライバー スレッド間で共有されているリソースへの書き込みまたは読み取りアクセスを取得できます。
[out] LockState
ロックの状態を追跡する不透明な LOCK_STATE_EX 変数へのポインター。 この変数は、呼び出し元がロックを取得して解放するまでの間隔に存在します。 呼び出し元は、同じ ISR 以外のドライバー スレッドからロックを取得しようとするたびに、LOCK_STATE_EX 型の異なる変数を使用する必要があります。
[in] Flags
ロック フラグを含む ULONG 値。 呼び出し元の現在の IRQL が DISPATCH_LEVEL場合は、このパラメーターを NDIS_RWL_AT_DISPATCH_LEVEL に設定します。 それ以外の場合は、このパラメーターを 0 に設定します。 ディスパッチ IRQL 追跡の詳細については、「ディスパッチ IRQL 追跡」を参照してください。
戻り値
何一つ
備考
NDIS ドライバーは、NdisAcquireRWLockWrite 関数を呼び出して、ドライバー スレッド間で共有されるリソースを変更します。
ドライバーは、NdisAcquireRWLockWrite 関数を呼び出す前に、NdisAllocateRWLock 関数で NDIS_RW_LOCK_EX 型の変数を割り当てる必要があります。 ドライバーは、使用するロックの常駐ストレージの NdisAllocateRWLock を するハンドルを提供する必要があります。
ドライバーが NdisAllocateRWLock 呼び出した後、NdisAcquireRWLockWrite 呼び出すか、NdisAcquireRWLockRead を して、リソースへの書き込みアクセスまたは読み取りアクセスを取得できます。 リソースへの書き込みアクセス権を取得できるのは、ISR 以外のドライバー スレッドが一度に 1 つだけです。 1 つの ISR 以外のスレッドが書き込みアクセス権を持つ場合、他の ISR 以外のスレッドによるすべての読み取りおよび書き込みアクセスは、書き込みアクセス所有者がロックを解放するまで待機する必要があります。 ただし、ISR 以外のスレッドに読み取りアクセス権がある場合、他の ISR 以外のスレッドは読み取りアクセスを同時に取得できます。
NDIS_RW_LOCK_EX ロックでは、読み取りから書き込みへの昇格はサポートされていません。 プロセッサが読み取りアクセス用の NDIS_RW_LOCK_EX を取得した後 (NdisAcquireRWLockRead 呼び出すことによって)、同じプロセッサは、前の読み取りアクセスが解放されるまで(ndisAcquireRWLockWrite 呼び出すことによって) 書き込みアクセスを取得しようとしてはなりません。
NDIS_RW_LOCK_EX 書き込みロックは、同じプロセッサで再帰的に取得できます。 NdisAcquireRWLockWrite をする呼び出しごとに、NdisReleaseRWLock 対応する呼び出しが必要です。 ロックは、NdisReleaseRWLock 最後の呼び出しの後にのみ解放されます。
ドライバー スレッドは、数マイクロ秒以上の書き込みロックを保持しないでください。 書き込みロックを長期間保持すると、オペレーティング システムとドライバーの両方のパフォーマンスが低下します。
ドライバーは、読み取りまたは書き込みアクセスからリソースを保護するロックを使用することはできません。その他の関数は、ミニポートInterrupt または ミニポートDisableInterruptEx 関数、またはその両方。 代わりに、ドライバーが呼び出す必要がありますNdisMSynchronizeWithInterruptEx を します。 ミニポートSynchronizeInterrupt 関数は、その ミニポートInterrupt または同じ DIRQL でこのような共有リソースにアクセスします。 ミニポートDisableInterruptEx 関数、またはその両方を行います。
NdisAcquireRWLockWrite 、スピン ロックを取得して IRQL を DISPATCH_LEVEL します。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | NDIS 6.20 以降でサポートされています。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | ndis.h (Ndis.h を含む) |
ライブラリ | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
関連項目
ミニポート同期InterruptNdisAcquireRWLockRead の
NdisMSynchronizeWithInterruptEx の