Макрос ExInterlockedPushEntrySList (wdm.h)
Подпрограмма ExInterlockedPushEntrySList атомарно вставляет запись в начало последовательно связанного списка.
Синтаксис
NTKERNELAPI
PSLIST_ENTRY
FASTCALL
ExInterlockedPushEntrySList (
_Inout_ PSLIST_HEADER ListHead,
_Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry,
_Inout_opt_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock
);
Параметры
ListHead
Указатель на структуру SLIST_HEADER , которая служит заголовком для последовательно связанного списка. ListHead должен быть инициализирован путем вызова метода ExInitializeSListHead.
ListEntry
Указатель на вставляемую запись, выделенную вызывающим объектом.
[in, out] Lock
Указатель на структуру KSPIN_LOCK , которая служит в качестве блокировки спина, используемой для синхронизации доступа к списку. Хранилище для спин-блокировки должно быть резидентным и должно быть инициализировано путем вызова KeInitializeSpinLock. Эту блокировку спина необходимо использовать только с подпрограммами ExInterlockedXxxList .
Возвращаемое значение
Если в указанном списке были записи, ExInterlockedPushEntrySList возвращает указатель на первую SLIST_ENTRY структуру, которая была записью в списке; В противном случае возвращается значение NULL.
Комментарии
Дополнительные сведения об использовании этой процедуры для реализации последовательно связанного списка см. в разделе Singly и Doubly Linked Списки.
В Windows 2000 драйверы должны использовать параметр -D_WIN2K_COMPAT_SLIST_USAGE для успешной компоновки кода, использующего ExInterlockedPushEntrySList.
Подпрограмму ExInterlockedPushEntrySList можно вызвать в любом IRQL. Хранилище для параметра ListHead и записей списка должно находиться во всех списках IRQL.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows 2000. |
Целевая платформа | Универсальное |
Верхняя часть | wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | Любой уровень (см. раздел "Примечания") |