Макрос NdisInterlockedInsertHeadList (ndis.h)

Функция NdisInterlockedInsertHeadList вставляет запись( обычно пакет) в начало списка, связанного с двойной связью, чтобы доступ к списку синхронизировался многопроцессорным способом.

Синтаксис

void NdisInterlockedInsertHeadList(
  [in]  _ListHead,
  [in]  _ListEntry,
  [in]  _SpinLock
);

Параметры

[in] _ListHead

Указатель на заголовок списка, в который должна быть вставлена запись.

[in] _ListEntry

Указатель на запись, вставленную в начало списка.

[in] _SpinLock

Указатель на блокировку спина, предоставляемую вызывающим абонентом, которая используется для синхронизации доступа к списку.

Возвращаемое значение

None

Remarks

Перед вызовом NdisInterlockedInsertHeadList драйвер должен инициализировать переменную в ListHead с помощью функции NdisInitializeListHead и переменную в SpinLock с помощью функции NdisAllocateSpinLock . Драйвер также должен предоставить резидентное хранилище для этих переменных и для внутренней очереди.

Спин-блокировка, предоставляемая вызывающим абонентом, не позволяет любой другой функции получить доступ к внутренней очереди драйвера, пока NdisInterlockedInsertHeadList вставляет данную запись, даже если драйвер работает на многопроцессорном компьютере.

NdisInterlockedInsertHeadList вызывает IRQL до DISPATCH_LEVEL при получении заданной спин-блокировки и восстанавливает исходный IRQL перед возвратом управления. Следовательно, любая функция драйвера, вызывающая NdisInterlockedInsertHeadList , не может быть страничного кода.

Большинство драйверов NDIS обрабатывают пакеты в порядке FIFO, поэтому любой драйвер, использующий переблокированную очередь, имеет тенденцию к cal thel Функция NdisInterlockedInsertTailList гораздо чаще, чем NdisInterlockedInsertHeadList. Такой драйвер обычно вызывает NdisInterlockedInsertHeadList только для повторной отправки пакета для операции повтора.

Чтобы преобразовать возвращенное значение обратно в адрес вставленной записи, драйвер может использовать макрос CONTAINING_RECORD .

Если NdisInterlockedInsertHeadList вызывается по адресу IRQL >= DISPATCH_LEVEL, хранилище для параметра ListHead и записей списка должно быть резидентным.

Требования

Требование Значение
Минимальная версия клиента Поддерживается для драйверов NDIS 6.0 и NDIS 5.1 (см. раздел NdisInterlockedInsertHeadList (NDIS 5.1)) в Windows Vista. Поддерживается для драйверов NDIS 5.1 (см. раздел NdisInterlockedInsertHeadList (NDIS 5.1)) в Windows XP.
Целевая платформа Универсальное
Верхняя часть ndis.h (включая Ndis.h)
Библиотека Ndis.lib
IRQL Любой уровень

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

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertTailList NdisInterlockedRemoveHeadList