ExInterlockedInsertHeadList 関数 (wdm.h)

ExInterlockedInsertHeadList ルーチンは、LIST_ENTRY構造体の二重にリンクされたリストの先頭にエントリアトミックに挿入します。

構文

PLIST_ENTRY ExInterlockedInsertHeadList(
  [in, out] PLIST_ENTRY                  ListHead,
  [in, out] __drv_aliasesMem PLIST_ENTRY ListEntry,
  [in, out] PKSPIN_LOCK                  Lock
);

パラメーター

[in, out] ListHead

リスト ヘッダーとして機能する LIST_ENTRY 構造体へのポインター。

[in, out] ListEntry

リストに挿入するエントリを表す LIST_ENTRY 構造体へのポインター。

[in, out] Lock

リストへのアクセスを同期するために使用されるスピン ロックとして機能する KSPIN_LOCK 構造体へのポインター。 スピン ロックのストレージは常駐であり、 KeInitializeSpinLock を呼び出して初期化されている必要があります。 このスピン ロックは、 ExInterlockedXxxList ルーチンでのみ使用する必要があります。

戻り値

ExInterlockedInsertHeadList は、新しいエントリが挿入される のリストの最初のエントリへのポインターを返します。 リストが空の場合、ルーチンは NULL を返します。

注釈

ExInterlockedInsertHeadListInsertHeadList と同じ操作を実行しますが、アトミックに実行します。 同じリストでアトミック呼び出しと非アトミック呼び出しを混在させないでください。

このルーチンを使用して二重リンク リストを実装する方法の詳細については、「Singly および Doubly Linked Lists」を参照してください。

ExInterlockedInsertHeadList ルーチンは、任意の IRQL で呼び出すことができます。 ListHead パラメーターとリスト エントリのストレージは、すべての IRQLs に常駐している必要があります。

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL 任意のレベル (「解説」セクションを参照)
DDI コンプライアンス規則 IoAllocateFree(wdm), IoReuseIrp(wdm), MarkingInterlockedQueuedIrps(wdm), RemoveLockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl(wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm), , RemoveLockForwardRead2(wdm), RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm)RemoveLockRelease2(wdm)RemoveLockReleaseCleanup(wdm)RemoveLockReleaseClose(wdm)RemoveLockReleaseCreate(wdm)RemoveLockReleaseDeviceControl(wdm)RemoveLockReleaseInternalDeviceControl(wdm)RemoveLockReleasePower(wdm)RemoveLockReleaseRead(wdm)RemoveLockReleaseShutdown(wdm)RemoveLockReleaseSystemControl(wdm)RemoveLockReleaseWrite(wdm)

こちらもご覧ください

ExInterlockedInsertTailList

ExInterlockedRemoveHeadList

InitializeListHead

InsertHeadList

KeInitializeSpinLock