NdisInitializeReadWriteLock 関数 (ndis.h)

NdisInitializeReadWriteLock 関数は、NDIS_RW_LOCK型の読み取りまたは書き込みロック変数初期化します。

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

構文

void NdisInitializeReadWriteLock(
  [out] PNDIS_RW_LOCK Lock
);

パラメーター

[out] Lock

ロックを表す不透明な NDIS_RW_LOCK 変数へのポインター。 呼び出し元は、このロックを使用して、ISR 以外のドライバー スレッド間で共有されているリソースへの書き込みまたは読み取りアクセスを取得できます。

戻り値

なし

解説

NDIS_RW_LOCK変数は、共有リソースへの書き込みアクセスを一度に 1 つの ISR 以外のドライバー スレッドに制限するために使用されます。 この NDIS_RW_LOCK では、ISR 以外の複数のドライバー スレッドがそれらのリソースへの同時読み取りアクセスを許可できます。 このような読み取りアクセスは、書き込みアクセス中は許可されません。

NdisInitializeReadWriteLock に渡される Lock ポインターは、他のすべての Ndis に必要なパラメーターです。ReadWriteLock 関数。

ドライバーが NdisAcquireReadWriteLock 関数を呼び出してリソースへの書き込みアクセスまたは読み取りアクセスを取得する前に、ドライバーは NdisInitializeReadWriteLock を呼び出して、そのリソースに関連付けられているロックを初期化する必要があります。 呼び出し元は 、Lock で変数の非ページ ストレージを提供する必要があります。

NdisInitializeReadWriteLock を呼び出した後、ドライバーは NdisAcquireReadWriteLock を呼び出して、リソースへの書き込みアクセスまたは読み取りアクセスを取得できます。 リソースへの書き込みアクセス権を取得できるのは、ISR 以外のドライバー スレッドが一度に 1 つだけです。 1 つの ISR 以外のスレッドが書き込みアクセス権を持つ場合、他の ISR 以外のスレッドによる読み取りおよび書き込みアクセスはすべて、書き込みアクセス所有者がロックを解放するまで待機する必要があります。 ただし、ISR 以外のスレッドに読み取りアクセス権がある場合、他の ISR 以外のスレッドは読み取りアクセスを同時に取得できます。

読み取り用に頻繁にアクセスされ、書き込み用にアクセス頻度の低いリソースに対して、この種類のロックを初期化して使用します。

リソース アクセスが完了すると、ドライバーは を呼び出します。 NdisReleaseReadWriteLock 関数。

ドライバーが初期化する各ロックは、次のいずれかの処理を行います。

  • IRQL <= DISPATCH_LEVELで実行されるドライバー スレッドによる同時書き込みと読み取りアクセスから、共有リソースの個別のセットを保護します。
  • IRQL <= DISPATCH_LEVELで実行されるドライバー スレッドによる同時読み取りアクセスに、共有リソースの個別のセットを公開します。
NdisInitializeReadWriteLock の呼び出し元は、任意の IRQL で実行できます。 通常、呼び出し元は初期化中に IRQL = PASSIVE_LEVELで実行されています。

要件

要件
サポートされている最小のクライアント NdisInitializeReadWriteLock の代わりに NdisAllocateRWLock を使用する必要がある NDIS 6.20 以降のドライバーでは非推奨です。 Windows Vista の NDIS 6.0 および NDIS 5.1 ドライバー (「NdisInitializeReadWriteLock (NDIS 5.1)」を参照) でサポートされています。 Windows XP で NDIS 5.1 ドライバー (NdisInitializeReadWriteLock (NDIS 5.1) を参照) でサポートされています。
対象プラットフォーム ユニバーサル
Header ndis.h (Ndis.h を含む)
Library Ndis.lib
[DLL] Ndis.sys
IRQL 任意のレベル (「解説」セクションを参照)

こちらもご覧ください

NdisAcquireReadWriteLock

NdisReleaseReadWriteLock