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


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

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

Синтаксис

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.

Комментарии

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

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

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

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

ExInitializesListHead

ExInterlockedInsertTailList

ExInterlockedPopEntryList

ExInterlockedPushEntrySList

KeInitializeSpinLock

PushEntryList