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