Макрос NdisInterlockedInsertHeadList (ndis.h)
Функция NdisInterlockedInsertHeadList вставляет запись , как правило, пакет в голову двусторонне связанного списка, чтобы доступ к списку синхронизирован в многопроцессорном безопасном способе.
Синтаксис
void NdisInterlockedInsertHeadList(
[in] _ListHead,
[in] _ListEntry,
[in] _SpinLock
);
Параметры
[in] _ListHead
Указатель на голову вдвойне связанного списка, в который должна быть вставлена запись.
[in] _ListEntry
Указатель на запись, вставленную в начало списка.
[in] _SpinLock
Указатель на блокировку спина, предоставляемую вызывающим абонентом, которая используется для синхронизации доступа к списку.
Возвращаемое значение
Никакой
Замечания
Перед вызовом NdisInterlockedInsertHeadListдрайвер должен инициализировать переменную в ListHead с помощью функции NdisInitializeListHead и переменной SpinLock с помощью функции NdisAllocateSpinLock. Драйвер также должен предоставлять хранилище резидентов для этих переменных и для внутренней очереди.
Вызывающая блокировка спина предотвращает доступ к внутренней очереди драйвера, пока NdisInterlockedInsertHeadList вставляет указанную запись, даже если драйвер работает на многопроцессорном компьютере.
NdisInterlockedInsertHeadList вызывает IRQL для DISPATCH_LEVEL при получении заданной блокировки спина и восстановлении исходного IRQL перед возвратом элемента управления. Следовательно, любая функция драйвера, которая вызывает NdisInterlockedInsertHeadList не может быть страничного кода.
Большинство драйверов NDIS обрабатывают пакеты в порядке FIFO, поэтому любой драйвер, использующий межблокированную очередь, как правило, калет функции 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 (include Ndis.h) |
библиотеки | Ndis.lib |
IRQL | Любой уровень |