Десериализованные драйверы минипорта NDIS

Все драйверы NDIS 6.0 и более поздних версий десериализируются.

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

Десериализованная модель драйвера является моделью по умолчанию для драйверов минипорта NDIS. Драйверы минипорта, ориентированные на подключение, а также драйверы минипорта с нижним краем WDM должны быть десериализованными драйверами. При написании нового драйвера минипорта NDIS необходимо написать десериализованный драйвер. По возможности следует также перенести старые драйверы в NDIS 6.0 или более поздней версии. Дополнительные сведения о переносе драйверов см. в разделе:

Десериализованный драйвер мини-порта должен соответствовать следующим требованиям при интерфейсе с NDIS:

  • Десериализованный драйвер минипорта должен идентифицировать себя как таковой в NDIS во время инициализации.

  • Десериализованный драйвер мини-порта должен выполнять все запросы на отправку асинхронно. Для выполнения запроса на отправку драйверы мини-портов без подключения NDIS 6.0 и более поздних версий вызывают функцию NdisMSendNetBufferListsComplete . Драйверы NDIS 6.0 и более поздних версий, ориентированные на подключение, вызывают функцию NdisMCoSendNetBufferListsComplete .

  • Десериализованный драйвер мини-порта, поддерживающий NDIS 6.0 или более поздней версии, задает элемент Status структуры NET_BUFFER_LIST, которую он будет передавать в NdisMSendNetBufferListsComplete.

  • Если десериализованный драйвер мини-порта не может немедленно завершить отправку запросов, он не сможет вернуть запросы в NDIS для повторного отправки. Вместо этого драйвер мини-порта должен ставить запросы в очередь, пока не будет достаточно ресурсов для передачи данных.

  • Десериализованный драйвер минипорта не должен проверять структуры, которые он передает в NDIS в показаниях получения до тех пор, пока NDIS не вернет их. NDIS возвращает NET_BUFFER_LIST структуры в функцию MiniportReturnNetBufferLists драйвера минипорта.

Десериализованный драйвер мини-порта должен соответствовать следующим внутренним требованиям драйвера:

  • Десериализованный драйвер мини-порта должен защищать свои очереди сетевого буфера с помощью спин-блокировок. Десериализованный драйвер мини-порта также должен защищать свое общее состояние от одновременного доступа с помощью собственных функций MiniportXxx .

  • Десериализованные функции MiniportXxx драйвера минипорта могут выполняться в IRQL <= DISPATCH_LEVEL. Следовательно, модуль записи драйвера не может предположить, что функции MiniportXxx будут вызываться в последовательности обработки запросов. Одна функция MiniportXxx может вытеснить другую функцию MiniportXxx, которая выполняется на более низком уровне IRQL.

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

  • Десериализованный драйвер мини-порта должен выполнять отправку запросов в определенном протоколом порядке.

Дополнительные сведения о требованиях к отправке и получению для драйверов NDIS см. в разделе Операции отправки и получения.

Обратите внимание, что десериализованный драйвер мини-порта обычно завершает запросы на отправку в определенном протоколом порядке. Однако драйвер минипорта, поддерживающий приоритет пакетов (например, IEEE 802.1p), может изменять порядок отправки запросов на основе сведений о приоритете.