NdisInterlockedInsertHeadList マクロ (ndis.h)
NdisInterlockedInsertHeadList 関数は、リストへのアクセスがマルチプロセッサ セーフな方法で同期されるように、二重リンク リストの先頭にエントリ (通常はパケット) を挿入します。
構文
void NdisInterlockedInsertHeadList(
[in] _ListHead,
[in] _ListEntry,
[in] _SpinLock
);
パラメーター
[in] _ListHead
エントリを挿入する二重リンク リストの先頭へのポインター。
[in] _ListEntry
リストの先頭に挿入するエントリへのポインター。
[in] _SpinLock
呼び出し元が指定したスピン ロックへのポインター。リストへのアクセスを同期するために使用されます。
戻り値
何一つ
備考
NdisInterlockedInsertHeadList 呼び出す前に、ドライバーは、NdisInitializeListHead 関数を使用して、ListHead の変数を初期化し、NdisAllocateSpinLock 関数を使用して spinLock 変数を初期化する必要があります。 ドライバーは、これらの変数とその内部キューの常駐ストレージも提供する必要があります。
呼び出し元が指定したスピン ロックは、ドライバーがマルチプロセッサ コンピューターで実行されている場合でも、NdisInterlockedInsertHeadList が指定されたエントリを挿入している間に、他の関数がドライバーの内部キューにアクセスできないようにします。
NdisInterlockedInsertHeadList は、指定されたスピン ロックを取得し、元の IRQL を復元してから制御を返すときに、IRQL をDISPATCH_LEVELに発生させます。 そのため、NdisInterlockedInsertHeadList 呼び出すドライバー関数は、ページング可能なコードにすることはできません。
ほとんどの NDIS ドライバーは FIFO の順序でパケットを処理するため、インターロックされたキューを使用するすべてのドライバーは、次の処理を実行する傾向があります。 NdisInterlockedInsertTailList 関数は、NdisInterlockedInsertHeadList よりもはるかに頻繁に機能します。 このようなドライバーは通常、再試行操作 パケットを再キューするためにのみ、NdisInterlockedInsertHeadList を呼び出します。
戻り値を挿入されたエントリのアドレスに変換するには、ドライバーは、CONTAINING_RECORD マクロを使用できます。
IRQL >= DISPATCH_LEVEL で NdisInterlockedInsertHeadList 呼び出された場合、ListHead パラメーターのストレージとリスト エントリは常駐している必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows Vista の NDIS 6.0 および NDIS 5.1 ドライバー (NdisInterlockedInsertHeadList (NDIS 5.1) を参照) でサポートされています。 Windows XP の NDIS 5.1 ドライバー (NdisInterlockedInsertHeadList (NDIS 5.1) を参照) でサポートされています。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | ndis.h (Ndis.h を含む) |
ライブラリ | Ndis.lib |
IRQL | 任意のレベル |
関連項目
NdisAllocateSpinLock の
NdisInitializeListHead の
NdisInterlockedRemoveHeadList NdisInterlockedRemoveHeadList をする