Функция ExInterlockedInsertHeadList (wdm.h)
Подпрограмма ExInterlockedInsertHeadList атомарно вставляет запись в начале списка LIST_ENTRY структур, связанных вдвойне.
Синтаксис
PLIST_ENTRY ExInterlockedInsertHeadList(
[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 .
Возвращаемое значение
ExInterlockedInsertHeadList возвращает указатель на первую запись списка перед вставкой новой записи. Если список пуст, подпрограмма возвращает значение NULL.
Комментарии
ExInterlockedInsertHeadList выполняет ту же операцию, что и InsertHeadList, но атомарно. Не смешивайте атомарные и неатомные вызовы в одном списке.
Дополнительные сведения об использовании этой подпрограммы для реализации списка с удвоениями см. в разделе Singly и Doubly Linked Списки.
Подпрограмму ExInterlockedInsertHeadList можно вызвать в любом IRQL. Хранилище для параметра ListHead и записей списка должно находиться во всех списках IRQL.