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


Асинхронные функции ввода-вывода и завершения в сетевых драйверах

Задержка присуща некоторым сетевым операциям. Из-за этой задержки многие функции верхнего края, предоставляемые драйвером мини-порта, и функции нижнего края драйвера протокола предназначены для поддержки асинхронной работы. Вместо того, чтобы тратить циклы ЦП, ожидая завершения некоторых трудоемких задач или аппаратного события для сигнала, сетевые драйверы полагаются на возможность асинхронной обработки большинства операций.

Асинхронные сетевые операции ввода-вывода поддерживаются с помощью функции завершения . В следующем примере показано использование функции завершения для операции отправки по сети, но этот же механизм существует для многих других операций, выполняемых драйвером протокола или мини-порта.

Когда драйвер протокола вызывает NDIS для отправки пакета, что приводит к вызову функции MiniportSendNetBufferLists драйвера минипорта, драйвер мини-порта может попытаться выполнить этот запрос немедленно и в результате вернуть соответствующее значение состояния. Для синхронной операции возможные ответы NDIS_STATUS_SUCCESS для успешного завершения отправки, NDIS_STATUS_RESOURCES и NDIS_STATUS_FAILURE, указывающих на сбой.

Однако операция отправки может занять некоторое время, пока драйвер мини-порта (или NDIS) помещает пакет в очередь и ожидает, пока сетевой адаптер не укажет результат операции отправки. Функция MiniportSendNetBufferLists драйвера мини-порта может обрабатывать эту операцию асинхронно, возвращая значение состояния NDIS_STATUS_PENDING. Когда драйвер мини-порта завершает операцию отправки, он вызывает функцию завершения NdisMSendNetBufferListsComplete, передавая указатель на дескриптор пакета, который был отправлен. Эти сведения передаются драйверу протокола, сигналив о завершении.

Большинство операций драйвера, для завершения которых может потребоваться длительное время, поддерживают асинхронную операцию с аналогичной функцией завершения. Такие функции имеют имена в виде NdisMXxxComplete.

Функции завершения также предоставляются для:

  • Настройка и запрос конфигурации.

  • Сброс оборудования.

  • Укажите состояние.

  • Укажите полученные данные.

  • Передача полученных данных.