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


функция обратного вызова 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, чтобы получить максимальное количество NBLs, которое может указывать или завершить.

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

  1. Извлекает до максимального количества пакетов Rx, которые могут указываться.
  2. Инициализировать NBL.
  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 (include ndis.h)
IRQL <= DISPATCH_LEVEL

См. также

NdisSetPollNotification

NDIS_POLL_CHARACTERISTICS

NDIS_POLL_DATA

NDIS_POLL_RECEIVE_DATA

NdisRegisterPoll

NdisRequestPoll