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


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

Подпрограмма ExInterlockedInsertTailList атомарно вставляет запись в конец списка LIST_ENTRY структур, связанных с двукратно .

Синтаксис

PLIST_ENTRY ExInterlockedInsertTailList(
  [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 .

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

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

Комментарии

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

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

Подпрограмму ExInterlockedInsertTailList можно вызвать в любом 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)

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

ExInterlockedInsertHeadList

InitializeListHead

InsertTailList

KeInitializeSpinLock