次の方法で共有


NdisInterlockedRemoveHeadList マクロ (ndis.h)

NdisInterlockedRemoveHeadList 関数は、リストへのアクセスがマルチプロセッサセーフな方法で同期されるように、二重にリンクされたリストの先頭からエントリ (通常はパケット) を削除します。

構文

PLIST_ENTRY NdisInterlockedRemoveHeadList(
  [in]  _ListHead,
  [in]  _SpinLock
);

パラメーター

[in] _ListHead

エントリの削除元となる二重リンク リストの先頭へのポインター。

[in] _SpinLock

リストへのアクセスを同期するために使用される、呼び出し元が指定したスピン ロックへのポインター。

戻り値

NdisInterlockedRemoveHeadList は、 リストから削除された LIST_ENTRY 構造体へのポインターを返します。 リストが空の場合、ルーチンは NULL を返します。

注釈

NdisInterlocked を呼び出す前..List 関数は、ドライバーが NdisInitializeListHead 関数を使用して ListHead で変数を初期化し、NdisAllocateSpinLock 関数を使用して SpinLock の変数を初期化する必要があります。 ドライバーは、これらの変数とその内部キューの常駐ストレージも提供する必要があります。

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

こちらもご覧ください

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertHeadList NdisInterlockedInsertTailList