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


Инициализация минипорт-драйвера

Когда сетевое устройство становится доступным, система загружает мини-порт NDIS-драйвер для управления устройством (если драйвер еще не загружен). Каждый минипорт-драйвер должен предоставить функцию DriverEntry . Система вызывает DriverEntry после загрузки драйвера. DriverEntry регистрирует характеристики драйвера минипорта с помощью NDIS (включая поддерживаемую версию NDIS и точки входа драйвера).

Система передает два аргумента в DriverEntry:

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

  • Указатель на путь реестра, указывающий, где хранятся параметры для конкретного драйвера.

В DriverEntry драйверы минипортов передают оба этих указателя в вызове функции NdisMRegisterMiniportDriver. Драйверы минипорта экспортируют набор стандартных функций MiniportXxx , сохраняя точки входа в структуре NDIS_MINIPORT_DRIVER_CHARACTERISTICS и передавая эту структуру в NdisMRegisterMiniportDriver.

DriverEntry для драйверов минипорта возвращает значение, возвращаемое вызовом NdisMRegisterMiniportDriver.

Минипорт-драйвер также выполняет любую другую инициализацию для конкретного драйвера, требуемую в DriverEntry. Драйвер выполняет инициализацию для конкретного адаптера в функции MiniportInitializeEx . Дополнительные сведения об инициализации адаптера см. в разделе "Инициализация адаптера".

DriverEntry может выделить структуру NDIS_MINIPORT_DRIVER_CHARACTERISTICS в стеке, так как библиотека NDIS копирует соответствующие сведения в собственное хранилище. DriverEntry должен очистить память для этой структуры с помощью NdisZeroMemory, прежде чем задавать значения, предоставленные драйвером в ее членах. Члены MajorNdisVersion и MinorNdisVersion должны содержать основные и незначительные версии NDIS, поддерживаемые драйвером. В каждом компоненте XxxHandler структуры характеристик DriverEntry должна задать точку входа функции MiniportXxx, предоставленной драйвером, или этот компонент должен иметь значение NULL.

Чтобы включить мини-драйвер для настройки дополнительных служб, NDIS вызывает функцию MiniportSetOptions в контексте вызова драйвера минипорта к NdisMRegisterMiniportDriver. Дополнительные сведения о необязательных службах см. в разделе "Настройка дополнительных служб драйверов Минипорта".

Драйверы, вызывающие NdisMRegisterMiniportDriver, должны быть готовы к тому, что NDIS вызовет их функции MiniportInitializeEx в любое время после того, как DriverEntry вернется. Такой драйвер должен иметь достаточные сведения о установке и конфигурации, которые хранятся в реестре или доступны через вызовы функции конфигурации NdisXxx, специфичной для типа шины, чтобы настроить любые ресурсы сетевого адаптера, которые потребуются драйверу для выполнения операций сетевого ввода-вывода.

Драйвер минипорта должен в конечном итоге вызвать NdisMDeregisterMiniportDriver , чтобы освободить ресурсы, выделенные путем вызова NdisMRegisterMiniportDriver. Если инициализация драйвера завершается ошибкой после успешного вызова NdisMRegisterMiniportDriver, драйвер может вызвать NdisMDeregisterMiniportDriver из DriverEntry. В противном случае минипорт-драйвер должен освободить ресурсы для конкретного драйвера, которые он выделяет в функции MiniportDriverUnload . Другими словами, если функция NdisMRegisterMiniportDriver не возвращает NDIS_STATUS_SUCCESS, DriverEntry должен освободить все ресурсы, которые он выделил, перед возвратом управления. Драйвер не будет загружен, если это происходит. Дополнительные сведения см. в разделе "Выгрузка драйвера минипорта".