Compartilhar via


Diretrizes para notificações de endereço IP do driver de miniporta MB

Os drivers de miniporta MB que especificam EnableDhcp igual a zero em seus arquivos INF podem usar o Auxiliar de IP e as funções associadas no modo kernel para criar, alterar e excluir o endereço IP:

Para usar as funções IP Helper no modo kernel, os drivers de miniporta devem incluir o arquivo de cabeçalho Netioapi.h e vincular ao Netio.lib.

Quando os drivers de miniporta especificam EnableDhcp igual a zero, eles são obrigados a executar as seguintes operações para notificar o Serviço MB sobre qualquer um dos seguintes eventos:

  • Definir endereço IP para a interface MB

  • Definir endereço de gateway padrão

  • Atualizar endereços DNS

Os endereços IP e gateways padrão definidos usando a API Auxiliar de IP persistem eventos de conexão ou desconexão de rede, ou ambos. Portanto, se os novos valores de endereço IP ou gateway padrão, ou ambos, forem diferentes dos valores definidos atualmente, o driver de miniporta deverá primeiro limpar os valores anteriores antes de definir novos valores em um evento de conexão de rede.

Observação Os drivers de miniporta podem localizar o LUID e o índice da interface MB dos membros NetLuid ou IfIndex de NDIS_MINIPORT_INIT_PARAMETERS estrutura que é passada para a função MiniportInitializeEx do driver de miniporta.

Redefinindo o endereço IP e o endereço do gateway

Certas alterações na pilha TCP/IP, como o carregamento de um driver de filtro obrigatório, podem remover os endereços IP e gateway definidos pelas funções auxiliares de IP. Os drivers de miniporta devem redefinir os endereços IP e gateway se as alterações na pilha TCP/IP removerem as configurações.

Os drivers de miniporta devem usar o procedimento a seguir para serem notificados quando os endereços forem removidos e devem ser redefinidos novamente.

  1. Durante a inicialização do driver, os drivers de miniporta devem especificar uma função de retorno de chamada para registrar notificações de alteração de interface IP usando NotifyIpInterfaceChange. O Windows chamará a função sempre que uma interface IP for adicionada, excluída ou alterada.

  2. Durante a inicialização do adaptador, os drivers de miniporta devem salvar no contexto do adaptador local do driver de miniporta o valor LUID da estrutura NDIS_MINIPORT_INIT_PARAMETERS que é passada para a função MiniportInitializeEx do driver de miniporta. O valor contém o NetLuid que identifica a interface do adaptador, que é usada no retorno de chamada de notificação.

  3. No retorno de chamada de notificação, o Windows passa os seguintes parâmetros para a função de notificação registrada com NotifyIpInterfaceChange:

    • Um ponteiro para uma estrutura MIB_IPINTERFACE_ROW , que contém o NetLuid da interface do adaptador de miniporta.
    • O tipo de notificação, que pode ser MibAddInstance, MibDeleteInstance ou MibParameterNotification.

    Os drivers de miniporta devem redefinir os endereços IP e de gateway quando o adaptador estiver em um estado conectado, e o tipo de notificação for MibAddInstance, e o NetLuid no MIB_IPINTERFACE_ROW corresponder a um dos adaptadores do driver de miniporta, que foi salvo durante a inicialização do adaptador.

    Os drivers de miniporta devem seguir os procedimentos Definindo o endereço IP para a interface MB e Definindo o endereço de gateway padrão para redefinir os respectivos endereços.

  4. Durante a descarga do driver, os drivers de miniporta devem cancelar o registro da função de retorno de chamada de notificação usando a função auxiliar de IP CancelMibChangeNotify2.

Definindo o endereço IP para a interface MB

Para definir um endereço IPv4, use o procedimento a seguir. Você pode usar a funcionalidade Auxiliar de IP semelhante para definir um endereço IPv6.

  1. Use a função GetUnicastIpAddressTable IP Helper para localizar todas as entradas de endereço IP no sistema.

  2. Para cada entrada cujo valor InterfaceLuid corresponde ao InterfaceLuid da interface MB:

    1. Localize a entrada de endereço IP que corresponde ao endereço IP usado na conexão anterior. As primeiras conexões não terão um endereço IP anterior.
    2. Se o novo endereço IP for diferente do endereço IP anterior, exclua a entrada de endereço IP para endereços IP de conexão anteriores usando a função DeleteUnicastIpAddressEntry IP Helper.
    3. Se o novo endereço IP for o mesmo que o endereço IP anterior, verifique se a entrada desejada já existe.
  3. Se o driver de miniporta não encontrou a entrada de endereço IP desejada no loop anterior, ele deve adicionar uma nova entrada.

    1. Use a função InitializeUnicastIpAddressEntry IP Helper para inicializar uma estrutura MIB_UNICASTIPADDRESS_ROW e definir os seguintes membros da estrutura:

      1. Defina os membros InterfaceLuid ou InterfaceIndex , conforme apropriado.
      2. Defina o membro OnlinePrefixLength . Esse é o número de bits que têm um valor de um na máscara de sub-rede. Por exemplo, se a máscara de sub-rede for 255.255.255.0, OnlinePrefixLength deverá ser 24.
      3. Defina o membro Address .
      4. Defina o membro PrefixOrigin como IpPrefixOriginManual.
    2. Passe a estrutura de MIB_UNICASTADDRESS_ROW inicializada para a função CreateUnicastIpAddressEntry IP Helper para criar a entrada de endereço IP.

Definindo o endereço de gateway padrão

Para definir um endereço de gateway IPv4, use o procedimento a seguir. Você pode usar a funcionalidade Auxiliar de IP semelhante para definir um endereço de gateway IPv6.

  1. Use a função Auxiliar de IP GetIpForwardTable2 para obter todas as entradas de roteamento no sistema.

  2. Para cada entrada cujo valor InterfaceLuid corresponde ao valor InterfaceLuid da interface MB e DestinationPrefix é "0.0.0.0/0", chame a função DeleteIpForwardEntry2 IP Helper para excluir a rota se NextHop não for igual ao novo endereço de gateway. Caso contrário, a entrada de roteamento já está no sistema.

  3. Se o driver de miniporta não encontrou a entrada de roteamento desejada no loop anterior, ele deve adicionar uma nova entrada usando a função InitializeIpForwardEntry IP Helper para inicializar uma estrutura MIB_IPFORWARD_ROW2. Inicialize os seguintes membros da estrutura:

    InterfaceLuid ou InterfaceIndex .

    Defina DestinationPrefix como 0.0.0.0/0 para gateway padrão. (Prefixo = 0.0.0.0 e PrefixLength = 0)

    Defina NextHop como o endereço IP do gateway padrão.

    Outros membros são definidos como valores padrão durante a inicialização. Os drivers de miniporta devem usar valores padrão para esses membros.

  4. Passe a estrutura MIB_IPFORWARD_ROW2 para a função CreateIpForwardEntry2 IP Helper para definir um novo endereço de gateway padrão.

Para definir endereços DNS

  • Defina a chave do Registro NameServer conforme descrito em Atualizações de DNS MB para notificar o Windows sobre endereços DNS atualizados.