Поделиться через


Функция ExInterlockedRemoveHeadList (wdm.h)

Подпрограмма ExInterlockedRemoveHeadList удаляет запись из начала вдвойне связанного списка LIST_ENTRY структур.

Синтаксис

PLIST_ENTRY ExInterlockedRemoveHeadList(
  [in, out] PLIST_ENTRY ListHead,
  [in, out] PKSPIN_LOCK Lock
);

Параметры

[in, out] ListHead

Указатель на структуру LIST_ENTRY , которая служит заголовком списка.

[in, out] Lock

Указатель на структуру KSPIN_LOCK , которая служит в качестве блокировки спина, используемой для синхронизации доступа к списку. Хранилище для спиновой блокировки должно быть резидентным и должно быть инициализировано путем вызова KeInitializeSpinLock. Эту блокировку спина необходимо использовать только с подпрограммами ExInterlockedXxxList .

Возвращаемое значение

ExInterlockedRemoveHeadList возвращает указатель на структуру LIST_ENTRY , удаленную из списка. Если список был пустым, подпрограмма возвращает значение NULL.

Комментарии

ExInterlockedRemoveHeadList выполняет аналогичную операцию RemoveHeadList, но атомарно. Не смешивайте атомарные и неатомные вызовы в одном списке.

Дополнительные сведения об использовании этой подпрограммы для реализации списка, связанного вдвойне, см. в статье Singly и Doubly Linked Списки.

Подпрограмму ExInterlockedRemoveHeadList можно вызвать в любом irQL. Хранилище для параметра ListHead должно быть резидентным во всех списках IRQL.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Любой уровень (см. раздел "Примечания")

См. также раздел

ExInterlockedInsertHeadList

ExInterlockedInsertTailList

InitializeListHead

KeInitializeSpinLock

RemoveHeadList