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 を返します。
注釈
ExInterlockedInsertHeadList は InsertHeadList と同じ操作を実行しますが、アトミックに実行します。 同じリストでアトミック呼び出しと非アトミック呼び出しを混在させないでください。
このルーチンを使用して二重リンク リストを実装する方法の詳細については、「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) |