Инициализация драйвера miniport
Когда сетевое устройство становится доступным, система загружает драйвер NDIS miniport для управления устройством (если драйвер еще не загружен). Каждый драйвер мини-порта должен предоставлять функцию 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. Дополнительные сведения о дополнительных службах см. в разделе Configuring Optional Miniport Driver Services.
Драйверы, вызывающие NdisMRegisterMiniportDriver , должны быть подготовлены к тому, чтобы NDIS вызывал свои функции MiniportInitializeEx в любое время после возврата DriverEntry . Такой драйвер должен иметь достаточно сведений об установке и конфигурации, хранящихся в реестре или доступных из вызовов функции конфигурации для конкретного типа шины NdisXxx , чтобы настроить ресурсы, относящиеся к сетевому адаптеру, необходимые драйверу для выполнения операций сетевого ввода-вывода.
Драйвер мини-порта должен в конечном итоге вызвать NdisMDeregisterMiniportDriver , чтобы освободить ресурсы, которые он выделил, вызвав NdisMRegisterMiniportDriver. Если инициализация драйвера завершается сбоем после успешного вызова NdisMRegisterMiniportDriver , драйвер может вызвать NdisMDeregisterMiniportDriver из DriverEntry. В противном случае драйвер мини-порта должен освободить ресурсы, относящиеся к драйверу, которые он выделяет в функции MiniportDriverUnload . Иными словами, если NdisMRegisterMiniportDriver не возвращает NDIS_STATUS_SUCCESS, DriverEntry должен освободить все выделенные ресурсы, прежде чем вернуть управление. В этом случае драйвер не будет загружен. Дополнительные сведения см. в разделе Выгрузка драйвера miniport.