英語で読む

次の方法で共有


ExInterlockedPushEntryList 関数 (wdm.h)

ExInterlockedPushEntryList ルーチンは、SINGLE_LIST_ENTRY構造体の個別にリンクされたリストの先頭に、エントリアトミックに挿入します。

構文

C++
PSINGLE_LIST_ENTRY ExInterlockedPushEntryList(
  [in, out] PSINGLE_LIST_ENTRY                  ListHead,
  [in, out] __drv_aliasesMem PSINGLE_LIST_ENTRY ListEntry,
  [in, out] PKSPIN_LOCK                         Lock
);

パラメーター

[in, out] ListHead

リスト ヘッダーとして機能する SINGLE_LIST_ENTRY 構造体へのポインター。 ListHead のストレージは、すべての IRQL に常駐している必要があります。

[in, out] ListEntry

リストに挿入するエントリを表す SINGLE_LIST_ENTRY 構造体へのポインター。 ListEntry のストレージは、すべての IRQL に常駐している必要があります。

[in, out] Lock

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

戻り値

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

注釈

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

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

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

要件

こちらもご覧ください

ExInitializeSListHead

ExInterlockedInsertTailList

ExInterlockedPopEntryList

ExInterlockedPushEntrySList

KeInitializeSpinLock

PushEntryList