Поделиться через


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

Функция NdisInterlockedRemoveHeadList удаляет запись, как правило, пакет из головы двусторонне связанного списка, чтобы доступ к списку синхронизирован в многопроцессорном режиме.

Синтаксис

PLIST_ENTRY NdisInterlockedRemoveHeadList(
  [in]  _ListHead,
  [in]  _SpinLock
);

Параметры

[in] _ListHead

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

[in] _SpinLock

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

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

NdisInterlockedRemoveHeadList возвращает указатель на структуру LIST_ENTRY, удаленную из списка. Если список был пустым, подпрограмма возвращает NULL.

Замечания

Перед вызовом любого NdisInterlocked.. Функция перечисления драйвер должен инициализировать переменную в 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 (include Ndis.h)
библиотеки Ndis.lib
IRQL Любой уровень

См. также

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertHeadList NdisInterlockedInsertTailList