Directrices para las notificaciones de direcciones IP del controlador de miniporte MB
Los controladores de miniport de MB que especifican EnableDhcp igual a cero en sus archivos INF pueden usar el asistente de IP y las funciones asociadas en modo kernel para crear, cambiar y eliminar la dirección IP:
Para usar las funciones del asistente de IP en modo kernel, los controladores de miniport deben incluir el archivo de encabezado Netioapi.h y vincular con Netio.lib.
Cuando los controladores de miniporte especifican EnableDhcp igual a cero, deben realizar las siguientes operaciones para notificar al servicio MB sobre cualquiera de los eventos siguientes:
Establecer la dirección IP para la interfaz MB
Establecimiento de la dirección de puerta de enlace predeterminada
Actualización de direcciones DNS
Las direcciones IP y las puertas de enlace predeterminadas que se establecen mediante la API del asistente de IP conservan los eventos de conexión de red o desconexión, o ambos. Por lo tanto, si la nueva dirección IP o la puerta de enlace predeterminada, o ambas, los valores son diferentes de los valores establecidos actualmente, el controlador de miniporte primero debe borrar los valores anteriores antes de establecer nuevos valores en un evento de conexión de red.
Nota Los controladores miniport pueden encontrar el LUID y el índice de la interfaz MB desde los miembros NetLuid o IfIndex de NDIS_MINIPORT_INIT_PARAMETERS estructura que se pasa a la función MiniportInitializeEx del controlador de miniport.
Restablecer la dirección IP y la dirección de puerta de enlace
Algunos cambios en la pila TCP/IP, como la carga de un controlador de filtro obligatorio, pueden quitar las direcciones IP y de puerta de enlace establecidas por las funciones auxiliares de IP. Los controladores de miniport deben restablecer las direcciones IP y de puerta de enlace si los cambios en la pila TCP/IP quitan la configuración.
Los controladores de miniport deben usar el procedimiento siguiente para recibir una notificación cuando se quiten las direcciones y se deba restablecer de nuevo.
Durante la inicialización del controlador, los controladores de miniport deben especificar una función de devolución de llamada para registrarse para las notificaciones de cambio de interfaz IP mediante NotifyIpInterfaceChange. Windows llamará a la función cada vez que se agregue, elimine o cambie una interfaz IP.
Durante la inicialización del adaptador, los controladores de miniport deben guardar en el contexto del adaptador local del controlador de miniportar el valor LUID de la estructura NDIS_MINIPORT_INIT_PARAMETERS que se pasa a la función MiniportInitializeEx del controlador de miniport. El valor contiene netLuid que identifica la interfaz del adaptador, que se usa en la devolución de llamada de notificación.
En la devolución de llamada de notificación, Windows pasa los parámetros siguientes a la función de notificación registrada con NotifyIpInterfaceChange:
- Puntero a una estructura MIB_IPINTERFACE_ROW, que contiene el NetLuid de la interfaz del adaptador de miniport.
- Tipo de notificación, que puede ser MibAddInstance, MibDeleteInstance o MibParameterNotification.
Los controladores de miniport deben restablecer las direcciones IP y de puerta de enlace cuando el adaptador está en un estado conectado, y el tipo de notificación es MibAddInstance y netLuid en MIB_IPINTERFACE_ROW corresponde a uno de los adaptadores del controlador de miniport, que se guardó durante la inicialización del adaptador.
Los controladores de minipuerto deben seguir los procedimientos Establecer la dirección IP para la interfaz MB y establecer la dirección de puerta de enlace predeterminada para restablecer las direcciones respectivas.
Durante la descarga del controlador, los controladores de miniport deben anular el registro de la función de devolución de llamada de notificación mediante la función auxiliar ip CancelMibChangeNotify2.
Establecer la dirección IP para la interfaz MB
Para establecer una dirección IPv4, use el procedimiento siguiente. Puede usar una funcionalidad del asistente de IP similar para establecer una dirección IPv6.
Use la función Auxiliar ip getUnicastIpAddressTable para buscar todas las entradas de dirección IP del sistema.
Para cada entrada cuyo valor InterfaceLuid coincide con interfaceLuidde la interfaz MB:
- Busque la entrada de dirección IP que coincida con la dirección IP usada en la conexión anterior. La primera vez que las conexiones no tendrán una dirección IP anterior.
- Si la nueva dirección IP es diferente de la dirección IP anterior, elimine la entrada de dirección IP de las direcciones IP anteriores mediante la función Auxiliar de IP DeleteUnicastIpAddressEntry.
- Si la nueva dirección IP es la misma que la dirección IP anterior, compruebe que la entrada deseada ya existe.
Si el controlador de miniporte no encontró la entrada de dirección IP deseada en el bucle anterior, debe agregar una nueva entrada.
Use la función Auxiliar de IP InitializeUnicastIpAddressEntry para inicializar una estructura de MIB_UNICASTIPADDRESS_ROW y establecer los siguientes miembros de la estructura:
- Establezca los miembros InterfaceLuid o InterfaceIndex , según corresponda.
- Establezca el miembro OnlinePrefixLength . Este es el número de bits que tienen un valor de uno en la máscara de subred. Por ejemplo, si la máscara de subred es 255.255.255.0, OnlinePrefixLength debe ser 24.
- Establezca el miembro Address .
- Establezca el miembro PrefixOrigin en IpPrefixOriginManual.
Pase la estructura de MIB_UNICASTADDRESS_ROW inicializada a la función auxiliar de IP CreateUnicastIpAddressEntry para crear la entrada de dirección IP.
Establecer la dirección de puerta de enlace predeterminada
Para establecer una dirección de puerta de enlace IPv4, use el procedimiento siguiente. Puede usar una funcionalidad del asistente de IP similar para establecer una dirección de puerta de enlace IPv6.
Use la función auxiliar de IP GetIpForwardTable2 para obtener todas las entradas de enrutamiento del sistema.
Para cada entrada cuyo valor InterfaceLuid coincide con el valor InterfaceLuid de la interfaz MB y DestinationPrefix es "0.0.0.0/0", llame a la función Auxiliar de IP DeleteIpForwardEntry2 para eliminar la ruta si NextHop no es igual a la nueva dirección de puerta de enlace. De lo contrario, la entrada de enrutamiento ya está en el sistema.
Si el controlador de miniporte no encontró la entrada de enrutamiento deseada en el bucle anterior, debe agregar una nueva entrada mediante la función Auxiliar de IP InitializeIpForwardEntry para inicializar una estructura de MIB_IPFORWARD_ROW2. Inicialice los siguientes miembros de la estructura:
InterfaceLuid o InterfaceIndex .
Establezca DestinationPrefix en 0.0.0.0/0 para la puerta de enlace predeterminada. (Prefix = 0.0.0.0 y PrefixLength = 0)
Establezca NextHop en la dirección IP de la puerta de enlace predeterminada.
Otros miembros se establecen en valores predeterminados durante la inicialización. Los controladores de miniport deben usar valores predeterminados para esos miembros.
Pase la estructura MIB_IPFORWARD_ROW2 a la función auxiliar de IP CreateIpForwardEntry2 para establecer una nueva dirección de puerta de enlace predeterminada.
Para establecer direcciones DNS
- Establezca la clave del Registro NameServer como se describe en MB DNS Novedades para notificar a Windows las direcciones DNS actualizadas.