NdisInitializeSListHead マクロ (ndis.h)
NdisInitializeSListHead 関数は、一連の連結された、1 つのリンクされたリストの先頭を初期化します。
構文
void NdisInitializeSListHead(
[in] SListHead
);
パラメーター
[in] SListHead
初期化する呼び出し元が指定したリスト ヘッドへのポインター。これは常駐メモリ内にある必要があります。 構造体は、64 ビット プラットフォームで 16 バイトアラインされている必要があります。
戻り値
なし
解説
NdisInitializeSListHead は 、SListHead で不透明なリスト ヘッドをゼロ初期化し、最初のエントリ ポインターを NULL に設定します。
S-List のシーケンス番号は、エントリがリストに挿入されるか、リストから削除されるたびにインクリメントされます。
S-List 内のすべてのエントリは非ページである必要があります。
S リストを使用するすべてのドライバーは、 にスピン ロックを提供する必要があります。 NdisInterlockedPushEntrySList と NdisInterlockedPopEntrySList 関数。 これらの関数のいずれかに対する最初の呼び出しの前に、ドライバーは NdisAllocateSpinLock 関数を使用してスピン ロックを初期化する必要があります。 デッドロックを防ぐために、ドライバーは、NdisInterlockedPushEntrySList および NdisInterlockedPopEntrySList に対して後続の呼び出しを行うときに、このスピン ロックを保持しないようにする必要があります。
非ページ メモリから固定サイズのエントリのプールを管理するには、S-List の代わりにルックアサイド リストを使用することを検討してください。
I/O 操作を再試行するドライバーでは、S リストではなく、二重にリンクされたインターロック キューと NdisInterlockedInsertHeadList、 NdisInterlockedInsertTailList、 および NdisInterlockedRemoveHeadList 関数を使用する必要があります。
IRQL >= DISPATCH_LEVELで NdisInitializeSListHead が呼び出される場合、SListHead パラメーターのストレージは常駐である必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista の NDIS 6.0 および NDIS 5.1 ドライバー (「NdisInitializeSListHead (NDIS 5.1)」を参照) でサポートされています。 Windows XP の NDIS 5.1 ドライバー (「NdisInitializeSListHead (NDIS 5.1)」を参照) でサポートされています。 |
対象プラットフォーム | デスクトップ |
Header | ndis.h (Ndis.h を含む) |
IRQL | 任意のレベル |