функция обратного вызова NDIS_POLL (poll.h)

Драйверы минипорта реализуют функцию обратного вызова NdisPoll , которая будет опрашивает NDIS на наличие признаков получения и отправляет завершения.

Синтаксис

NDIS_POLL NdisPoll;

void() NdisPoll(
  [_In_]    void *Context,
  [_Inout_] NDIS_POLL_DATA *PollData
)
{...}

Параметры

[_In_] Context

Указатель на сведения о контексте, предоставленные драйвером при создании объекта Poll.

[_Inout_] PollData

Указатель на структуру NDIS_POLL_DATA , которую драйвер должен использовать для выполнения индикации получения и отправки завершений. Он также содержит сведения о том, сколько NBL необходимо указать.

Комментарии

Драйверы минипорта регистрируют обратный вызов NdisPoll во время инициализации адаптера минипорта. Драйверы указывают точку входа для функции NdisPoll в параметре PollHandlerструктуры NDIS_POLL_CHARACTERISTICS перед вызовом NdisRegisterPoll.

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

Обратный вызов NdisPoll можно вызывать как в PASSIVE_LEVEL, так и в DISPATCH_LEVEL IRQL. Драйвер не должен делать предположений о том, какой уровень он будет.

Драйвер должен проверка параметры приема или передачиструктуры NDIS_POLL_DATA, чтобы получить максимальное количество NBL, которые он может указывать или завершить.

Для получения показаний драйвер должен:

  1. Получите максимальное количество пакетов Rx, которое может быть указано.
  2. Инициализируйте NCL.
  3. Добавьте их в очередь NBL, предоставляемую структурой NDIS_POLL_RECEIVE_DATA (расположенной в структуре NDIS_POLL_DATA параметра NdisPollPollData ).
  4. Выйдите из обратного вызова.

Для завершения передачи драйвер должен:

  1. Получите максимальное количество пакетов Tx, которые он может завершить.
  2. Заполните списки NBL.
  3. Добавьте их в очередь NBL, предоставляемую структурой NDIS_POLL_TRANSMIT_DATA (расположенной в структуре NDIS_POLL_DATA параметра NdisPollPollData ).
  4. Выйдите из обратного вызова.

Драйвер не должен включать прерывание объекта Poll перед выходом из функции NdisPoll . NDIS будет продолжать опрашивает водителя, пока он не оценит, что никакого прогресса в настоящее время не делается. На этом этапе NDIS прекратит опрос и попросит драйвер повторно включить прерывание, вызвав обратный вызов NdisSetPollNotification .

Требования

Требование Значение
Минимальная версия клиента Windows 11
Минимальная версия сервера Windows Server 2022
Верхняя часть poll.h (включая ndis.h)
IRQL <= DISPATCH_LEVEL

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

NdisSetPollNotification

NDIS_POLL_CHARACTERISTICS

NDIS_POLL_DATA

NDIS_POLL_RECEIVE_DATA

NdisRegisterPoll

NdisRequestPoll