次の方法で共有


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 リストではなく、二重にリンクされたインターロック キューと NdisInterlockedInsertHeadListNdisInterlockedInsertTailListおよび 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 任意のレベル

こちらもご覧ください

NdisInitializeNPagedLookasideList

NdisInterlockedPopEntrySList

NdisInterlockedPushEntrySList

NdisQueryDepthSList

NdisQueueIoWorkItem