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