Макрос NdisInterlockedRemoveHeadList (ndis.h)
Функция NdisInterlockedRemoveHeadList удаляет запись( обычно пакет) из заголовка списка, связанного с двойной связью, чтобы доступ к списку синхронизировался многопроцессорным способом.
Синтаксис
PLIST_ENTRY NdisInterlockedRemoveHeadList(
[in] _ListHead,
[in] _SpinLock
);
Параметры
[in] _ListHead
Указатель на голову списка, из которого должна быть удалена запись.
[in] _SpinLock
Указатель на блокировку спина, предоставляемую вызывающим абонентом, которая используется для синхронизации доступа к списку.
Возвращаемое значение
NdisInterlockedRemoveHeadList возвращает указатель на структуру LIST_ENTRY , удаленную из списка. Если список пуст, подпрограмма возвращает значение NULL.
Комментарии
Перед вызовом любого NdisInterlocked.. Функция List , драйвер должен инициализировать переменную в ListHead с помощью функции NdisInitializeListHead и переменную в SpinLock с помощью функции NdisAllocateSpinLock . Драйвер также должен предоставить резидентное хранилище для этих переменных и для внутренней очереди.
Перед вызовом NdisInterlockedRemoveHeadList записи помещаются в очередь с одним или несколькими вызовами NdisInterlockedInsert.. Перечисление функций.
Спин-блокировка, предоставляемая вызывающим абонентом, не позволяет любой другой функции получить доступ к внутренней очереди драйвера в то время как NdisInterlockedRemoveHeadList удаляет запись, даже если драйвер работает на многопроцессорном компьютере.
NdisInterlockedRemoveHeadList вызывает IRQL до DISPATCH_LEVEL при получении заданной блокировки спина и восстанавливает исходный IRQL перед возвратом управления. Следовательно, любая функция драйвера, которая вызывает NdisInterlockedRemoveHeadList , не может быть страничного кода.
Чтобы преобразовать возвращенное значение обратно в адрес вставленной записи, драйвер может использовать макрос CONTAINING_RECORD .
Если NdisInterlockedRemoveHeadList вызывается по адресу IRQL >= DISPATCH_LEVEL, хранилище для параметра ListHead должно быть резидентным.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается для драйверов NDIS 6.0 и NDIS 5.1 (см. раздел NdisInterlockedRemoveHeadList (NDIS 5.1)) в Windows Vista. Поддерживается для драйверов NDIS 5.1 (см. раздел NdisInterlockedRemoveHeadList (NDIS 5.1)) в Windows XP. |
Целевая платформа | Универсальное |
Верхняя часть | ndis.h (включая Ndis.h) |
Библиотека | Ndis.lib |
IRQL | Любой уровень |