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) を参照) でサポートされています。 |
対象プラットフォーム | ユニバーサル |
Header | ndis.h (Ndis.h を含む) |
Library | Ndis.lib |
IRQL | 任意のレベル |