Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Все драйверы NDIS 6.0 и более поздних версий десериализированы.
Несериализованный драйвер минипорта NDIS сериализует выполнение собственных функций MiniportXxx и обрабатывает все запросы на отправку внутри себя, а не полагается на NDIS для выполнения этих функций. В результате десериализованный драйвер минипорта может достичь значительно лучшей производительности в полнодуплексном режиме, чем сериализованный минипорт-драйвер.
Десериализированная модель драйвера — это модель по умолчанию для драйверов мини-порта NDIS. Драйверы минипорта, ориентированные на подключение, а также драйверы минипорта с нижним краем WDM, должны быть десериализированы. При написании нового мини-драйвера NDIS рекомендуется написать десериализированный драйвер. По возможности следует также перенести старые драйверы в NDIS 6.0 или более поздней версии. Дополнительные сведения о переносе драйверов см. в следующем разделе:
- перенос драйверов NDIS 5.x в NDIS 6.0
- перенос драйверов NDIS 6.x в NDIS 6.20
- перенос драйверов NDIS 6.x в NDIS 6.30
Десериализированный минипорт-драйвер должен соответствовать следующим требованиям при интерфейсе с 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 драйвера минипорта.
Десериализированный минипорт-драйвер должен соответствовать следующим внутренним требованиям драйвера:
Десериализованный драйвер минипорта должен защищать очереди буфера сети с помощью спин-блокировок. Десериализированный минипорт-драйвер также должен защитить общее состояние от одновременного доступа с помощью собственных функций MiniportXx.
Десериализированные функции драйвера минипорта MiniportXxx могут выполняться в IRQL <= DISPATCH_LEVEL. Следовательно, автор драйвера не может считать, что функции MiniportXxx будут вызываться в той последовательности, в которой они обрабатывают запросы. Одна функция MiniportXx может вытеснить другую функцию MiniportXx, которая выполняется на более низком уровне IRQL.
Десериализированный драйвер минипорта отвечает за управление сетевой буферной очередью. Когда у драйвера минипорта возникает проблема с ресурсами, он не может возвращать запросы на отправку данных в NDIS для повторного размещения. Вместо этого драйвер минипорта должен внутренне поставить в очередь все запросы на отправку, пока не будут доступны достаточные ресурсы для отправки данных.
Десериализированный драйвер минипорта должен завершить отправку запросов в порядке, определяемом протоколом.
Дополнительные сведения о требованиях к отправке и получению драйверов NDIS см. в разделе Операции отправки и получения.
Обратите внимание, что десериализированный драйвер минипорта обычно завершает отправку запросов в порядке, определяемом протоколом. Однако мини-драйвер, поддерживающий приоритет пакетов (например, IEEE 802.1p), может переупорядочить запросы на отправку на основе сведений о приоритете.