Registro de un controlador intermedio como controlador miniport
Un controlador intermedio llama a NdisMRegisterMiniportDriver para exportar sus funciones MiniportXxx . El controlador intermedio y la entrada de NdisMiniportDriverHandle que devuelve NdisMRegisterMiniportDriver deben conservarse mediante el controlador intermedio y la entrada en NDIS cuando el controlador llama a NdisIMInitializeDeviceInstanceEx.
El controlador intermedio debe:
Inicializa cero una estructura de NDIS_MINIPORT_DRIVER_CHARACTERISTICS con NdisZeroMemory.
Almacene las direcciones de las funciones MiniportXxx obligatorias, así como las funciones miniportxxx opcionales que exporta el controlador.
Un controlador intermedio que admita características de NDIS 6.0 debe registrarse como un controlador de miniporte de la versión 6.0. Para obtener más información sobre cómo especificar los números de versión del controlador de minipuerto, consulte NDIS_MINIPORT_DRIVER_CHARACTERISTICS.
Debe establecer las siguientes entradas en MiniportCharacteristics en una dirección de función MiniportXxx válida a menos que la función sea opcional y no se exporte. Si el controlador no exporta la función, establezca la dirección en NULL.
SetOptionsHandler
MiniportSetOptions es una función opcional. NDIS llama a MiniportSetOptions para que el controlador intermedio pueda especificar controladores opcionales.
InitializeHandlerEx
NDIS llama a MiniportInitializeEx como resultado del controlador intermedio que llama a NdisIMInitializeDeviceInstanceEx para inicializar sus operaciones de adaptador de miniporte para la miniporte virtual que se inicializa.
HaltHandlerEx
MiniportHaltEx es una función necesaria. NDIS llama a MiniportHaltEx si el dispositivo de miniporte virtual que expone el controlador intermedio está deshabilitado o detenido, o si el controlador intermedio llamado NdisIMDeInitializeDeviceInstance para iniciar su eliminación.
UnloadHandler
MiniportDriverUnload es una función necesaria. NDIS llama a MiniportDriverUnload para descargar el controlador intermedio.
PauseHandler
MiniportPause es una función necesaria. NDIS llama a MiniportPause para detener el flujo de datos de red a través de un miniporte virtual especificado del controlador intermedio.
RestartHandler
MiniportRestart es una función necesaria. NDIS llama a MiniportRestart para reiniciar el flujo de datos de red a través de un miniporte virtual especificado del controlador intermedio.
OidRequestHandler
MiniportOidRequest recibe solicitudes OID_XXX que se originan en un controlador que ha llamado a NdisOidRequest o desde NDIS. El controlador intermedio puede controlar una solicitud o pasarla al controlador de miniporte subyacente.
SendNetBufferListsHandler
MiniportSendNetBufferLists recibe una matriz de uno o varios punteros para NET_BUFFER_LIST estructuras que especifican datos de red para la transmisión a través de la red. Cada controlador intermedio debe proporcionar una función MiniportSendNetBufferLists . Para obtener más información, consulte Transmisión de datos de red a través de un controlador intermedio.
ReturnNetBufferListsHandler
MiniportReturnNetBufferLists recibe una estructura de NET_BUFFER_LIST devuelta que anteriormente indicó a un controlador de nivel superior llamando a NdisMIndicateReceiveNetBufferLists. La llamada a NdisMIndicateReceiveNetBufferLists renuncia al control de los recursos indicados al controlador de nivel superior. Una vez que el controlador de nivel superior consume cada indicación, el controlador intermedio asignado NET_BUFFER_LIST estructura y los recursos que describe se devuelven a la función MiniportReturnNetBufferLists .
CancelSendHandler
MiniportCancelSend es una función necesaria. NDIS llama a MiniportCancelSend para cancelar una solicitud de envío.
CheckForHangHandler
MiniportCheckForHangEx no es necesario para los controladores intermedios, por lo que deben establecer este punto de entrada en NULL.
ResetHandlerEx
MiniportResetEx no es necesario para los controladores intermedios, por lo que deben establecer este punto de entrada en NULL.
DevicePnPEventNotifyHandler
Punto de entrada de la función MiniportDevicePnPEventNotify .
ShutdownHandlerEx
MiniportShutdownEx es una función necesaria. MiniportShutdownEx restaura el miniporte virtual a su estado inicial (antes de que se ejecute la rutina DriverEntry del controlador intermedio).
CancelOidRequestHandler
MiniportCancelOidRequest es una función necesaria. NDIS llama a MiniportCancelOidRequest para cancelar una solicitud de OID.
Un controlador intermedio puede requerir otras funciones MiniportXxx que sean específicas de la implementación. Para obtener información sobre el registro opcional, vea Configuring Optional Miniport Driver Services.
Algunas funciones de controlador de controlador de minipuerto nunca las proporciona un controlador intermedio. Entre los motivos de esto se incluyen: estos controladores no administran dispositivos de interrupción o estos controladores no asignan búferes en IRQL elevado.
Nota Los controladores intermedios deben incluir la funcionalidad de pausa y reinicio. Incluya compatibilidad para pausar y reiniciar miniportes virtuales, si es necesario, cuando NDIS pausa una pila de controladores subyacente. Para obtener más información sobre la pausa y el reinicio, consulte Administración de la pila de controladores.