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