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


Функция 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 Списки.

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

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека 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