Inicialización de un controlador miniport

Cuando un dispositivo de red está disponible, el sistema carga el controlador de miniporte NDIS para administrar el dispositivo (si el controlador aún no está cargado). Cada controlador de minipuerto debe proporcionar una función DriverEntry . El sistema llama a DriverEntry después de cargar el controlador. DriverEntry registra las características del controlador de miniporte con NDIS (incluida la versión NDIS admitida y los puntos de entrada del controlador).

El sistema pasa dos argumentos a DriverEntry:

  • Puntero al objeto de controlador, creado por el sistema de E/S.

  • Puntero a la ruta de acceso del Registro, que especifica dónde se almacenan los parámetros específicos del controlador.

En DriverEntry, los controladores de minipuerto pasan ambos punteros en una llamada a la función NdisMRegisterMiniportDriver . Los controladores Miniport exportan un conjunto de funciones MiniportXxx estándar almacenando sus puntos de entrada en una estructura NDIS_MINIPORT_DRIVER_CHARACTERISTICS y pasando esa estructura a NdisMRegisterMiniportDriver.

DriverEntry para controladores de minipuerto devuelve el valor devuelto por la llamada a NdisMRegisterMiniportDriver.

Un controlador de minipuerto también realiza cualquier otra inicialización específica del controlador que requiera en DriverEntry. El controlador realiza la inicialización específica del adaptador en la función MiniportInitializeEx . Para obtener más información sobre la inicialización del adaptador, consulte Inicialización de un adaptador.

DriverEntry puede asignar la estructura NDIS_MINIPORT_DRIVER_CHARACTERISTICS en la pila porque la biblioteca NDIS copia la información pertinente en su propio almacenamiento. DriverEntry debe borrar la memoria de esta estructura con NdisZeroMemory antes de establecer los valores proporcionados por el controlador en sus miembros. Los miembros MajorNdisVersion y MinorNdisVersion deben contener las versiones principales y secundarias de NDIS que admite el controlador. En cada miembro XxxHandler de la estructura de características, DriverEntry debe establecer el punto de entrada de una función MiniportXxx proporcionada por el controlador o el miembro debe ser NULL.

Para habilitar un controlador de minipuerto para configurar servicios opcionales, NDIS llama a la función MiniportSetOptions dentro del contexto de la llamada del controlador de miniport a NdisMRegisterMiniportDriver. Para obtener más información sobre los servicios opcionales, vea Configuring Optional Miniport Driver Services.

Los controladores que llaman a NdisMRegisterMiniportDriver deben estar preparados para que NDIS llame a sus funciones MiniportInitializeEx en cualquier momento después de que DriverEntry devuelva. Este controlador debe tener suficiente información de instalación y configuración almacenada en el Registro o disponible desde llamadas a una función de configuración específica del bus NdisXxx para configurar los recursos específicos de la NIC que el controlador necesitará para llevar a cabo operaciones de E/S de red.

El controlador de minipuerto debe llamar finalmente a NdisMDeregisterMiniportDriver para liberar los recursos asignados mediante una llamada a NdisMRegisterMiniportDriver. Si se produce un error en la inicialización del controlador después de que la llamada a NdisMRegisterMiniportDriver se haya realizado correctamente, el controlador puede llamar a NdisMDeregisterMiniportDriver desde DriverEntry. De lo contrario, el controlador de minipuerto debe liberar los recursos específicos del controlador que asigna en su función MiniportDriverUnload . En otras palabras, si NdisMRegisterMiniportDriver no devuelve NDIS_STATUS_SUCCESS, DriverEntry debe liberar los recursos que haya asignado antes de devolver el control. El controlador no se cargará si esto ocurre. Para obtener más información, consulte Descarga de un miniportador.