Función DriverEntry del controlador intermedio
El punto de entrada necesario para un controlador intermedio debe denominarse explícitamente DriverEntry para que el cargador pueda identificarlo correctamente. Todas las demás funciones de controlador exportadas, que se describen en esta sección como MiniportXxx y ProtocolXxx, pueden tener cualquier nombre especificado por el proveedor porque se pasan como direcciones a NDIS.
En un controlador intermedio, DriverEntry debe tener como mínimo:
Llame a NdisMRegisterMiniportDriver y guarde el identificador que se devuelve en el parámetro NdisMiniportDriverHandle .
Llame a NdisRegisterProtocolDriver para registrar las funciones ProtocolXxx del controlador si el controlador se enlaza posteriormente a un controlador NDIS subyacente.
Llame a NdisIMAssociateMiniport para informar al NDIS sobre la asociación entre el miniporte superior del controlador y el borde inferior del protocolo.
Un controlador intermedio debe registrar un controlador de descarga MiniportDriverUnload . Se llama a este controlador de descarga cuando el sistema descarga el controlador intermedio. Si se produce un error en DriverEntry , no se llama a este controlador de descarga; en su lugar, el controlador simplemente se descarga. Para obtener más información sobre el controlador de descarga, consulte Descarga de un controlador intermedio.
El controlador de descarga debe llamar a NdisDeregisterProtocolDriver para anular el registro de la parte del protocolo del controlador intermedio. El controlador de descarga también debe realizar las operaciones de limpieza necesarias, como la reasignación de recursos usados por la parte del protocolo del controlador.
Tenga en cuenta que un controlador de descarga difiere de una función MiniportHaltEx : el controlador de descarga tiene un ámbito más global y el ámbito de la función MiniportHaltEx está restringido a un adaptador de minipuerto determinado. El controlador intermedio debe limpiar la información de estado y reasignar los recursos cuando se detiene cada controlador de miniporte subyacente enlazado a él. Para obtener información sobre cómo controlar la operación de detención de miniportes virtuales, consulte Detener una miniporte virtual.
ProtocolUninstall es un controlador de descarga opcional. Registre un punto de entrada para esta función en la estructura ProtocolCharacteristics que se pasa a NdisRegisterProtocolDriver. NDIS llama a ProtocolUninstall en respuesta a una solicitud de usuario para desinstalar un controlador intermedio. NDIS llama a ProtocolUnbindAdapterEx una vez para cada adaptador enlazado y, a continuación, llama a ProtocolUninstall. Se llama a este controlador antes de que el sistema descargue realmente el controlador. Este tiempo proporciona la posibilidad de liberar cualquier objeto de dispositivo u otros recursos que, de lo contrario, impidan que el sistema llame al controlador de descarga registrado con NdisMRegisterMiniportDriver y descargue el controlador.
DriverEntry puede inicializar bloqueos de número para proteger los recursos compartidos globalmente que asigne el controlador intermedio, como variables de estado, estructuras y áreas de memoria. El controlador usa estos recursos para realizar un seguimiento de las conexiones y realizar un seguimiento de los envíos en curso o las colas asignadas por controladores.
Si DriverEntry no puede asignar los recursos que el controlador necesita para llevar a cabo operaciones de E/S de red, debe liberar los recursos asignados previamente y devolver un estado de error adecuado.
En los temas siguientes se describe aún más cómo registrar controladores intermedios:
Registro como controlador intermedio de NDIS
Registro de un controlador intermedio como controlador de minipuerto
Registro de un controlador intermedio como controlador de protocolo