次の方法で共有


NdisInterlockedInsertTailList マクロ (ndis.h)

NdisInterlockedInsertTailList 関数は、リストへのアクセスがマルチプロセッサ セーフな方法で同期されるように、二重にリンクされたリストの末尾にエントリ (通常はパケット) を挿入します。

構文

void NdisInterlockedInsertTailList(
  [in]  _ListHead,
  [in]  _ListEntry,
  [in]  _SpinLock
);

パラメーター

[in] _ListHead

エントリを挿入する二重リンク リストの先頭へのポインター。

[in] _ListEntry

リストの末尾に挿入するエントリへのポインター。

[in] _SpinLock

呼び出し元が指定したスピン ロックへのポインター。リストへのアクセスを同期するために使用されます。

戻り値

何一つ

備考

NdisInterlockedInsertTailList 呼び出す前に、ドライバーは、NdisInitializeListHead 関数と、NdisAllocateSpinLock 関数を使用して、SpinLock の変数を使用して、ListHead で変数を初期化する必要があります。 ドライバーは、これらの変数とその内部キューの常駐ストレージも提供する必要があります。

呼び出し元が指定したスピン ロックにより、ドライバーがマルチプロセッサ コンピューターで実行されている場合でも、NdisInterlockedInsertTailList が特定のエントリを挿入している間、他の関数がドライバーの内部キューにアクセスできなくなります。

NdisInterlockedInsertTailList 指定されたスピン ロックを取得し、コントロールを返す前に元の IRQL を復元するときに、IRQL をDISPATCH_LEVELに発生させます。 そのため、NdisInterlockedInsertTailList 呼び出すドライバー関数は、ページング可能なコードにすることはできません。

戻り値を挿入されたエントリのアドレスに変換するには、ドライバーは、CONTAINING_RECORD マクロを使用できます。

IRQL >= DISPATCH_LEVEL で NdisInterlockedInsertTailList 呼び出された場合、ListHead パラメーターのストレージとリスト エントリは常駐している必要があります。

必要条件

要件 価値
サポートされる最小クライアント Windows Vista の NDIS 6.0 および NDIS 5.1 ドライバー (NdisInterlockedInsertTailList (NDIS 5.1) を参照) でサポートされています。 Windows XP の NDIS 5.1 ドライバー (NdisInterlockedInsertTailList (NDIS 5.1) を参照) でサポートされています。
ターゲット プラットフォーム 万国
ヘッダー ndis.h (Ndis.h を含む)
ライブラリ Ndis.lib
IRQL 任意のレベル

関連項目

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedRemoveHeadList NdisInterlockedRemoveHeadList をする