Partager via


Instructions pour les notifications d’adresse IP du pilote miniport Mo

Mo pilotes miniports qui spécifient EnableDhcp égal à zéro dans leurs fichiers INF peut utiliser l’assistance IP et les fonctions associées en mode noyau pour créer, modifier et supprimer l’adresse IP :

Pour utiliser les fonctions d’assistance IP en mode noyau, les pilotes miniport doivent inclure le fichier d’en-tête Netioapi.h et lier à Netio.lib.

Lorsque les pilotes miniport spécifient EnableDhcp égal à zéro, ils sont nécessaires pour effectuer les opérations suivantes pour notifier le service Mo sur l’un des événements suivants :

  • Définir l’adresse IP de l’interface Mo

  • Définir l’adresse de passerelle par défaut

  • Mettre à jour les adresses DNS

Les adresses IP et les passerelles par défaut définies à l’aide de l’API d’assistance IP persistent les événements de connexion réseau ou de déconnexion, ou les deux. Par conséquent, si la nouvelle adresse IP ou la passerelle par défaut, ou les deux, sont différentes des valeurs actuellement définies, le pilote miniport doit d’abord effacer les valeurs précédentes avant de définir de nouvelles valeurs sur un événement de connexion réseau.

Notez que les pilotes Miniport peuvent trouver le LUID et l’index de l’interface Mo à partir des membres NetLuid ou IfIndex de NDIS_MINIPORT_INIT_PARAMETERS structure passées à la fonction MiniportInitializeEx du pilote miniport.

Réinitialisation de l’adresse IP et de l’adresse de la passerelle

Certaines modifications apportées à la pile TCP/IP, telles que le chargement d’un pilote de filtre obligatoire, peuvent supprimer les adresses IP et les adresses de passerelle définies par les fonctions d’assistance IP. Les pilotes miniport doivent réinitialiser les adresses IP et passerelle si les modifications apportées à la pile TCP/IP suppriment les paramètres.

Les pilotes miniport doivent utiliser la procédure suivante pour être avertis lorsque les adresses sont supprimées et doivent être réinitialisées.

  1. Lors de l’initialisation du pilote, les pilotes miniport doivent spécifier une fonction de rappel pour s’inscrire aux notifications de modification d’interface IP à l’aide de NotifyIpInterfaceChange. Windows appelle la fonction chaque fois qu’une interface IP est ajoutée, supprimée ou modifiée.

  2. Lors de l’initialisation de l’adaptateur, les pilotes miniport doivent enregistrer dans le contexte de l’adaptateur local du pilote miniport la valeur LUID de la structure NDIS_MINIPORT_INIT_PARAMETERS passée à la fonction MiniportInitializeEx du pilote miniport. La valeur contient le NetLuid qui identifie l’interface de l’adaptateur, qui est utilisée dans le rappel de notification.

  3. Dans le rappel de notification, Windows transmet les paramètres suivants à la fonction de notification inscrite auprès de NotifyIpInterfaceChange :

    • Pointeur vers une structure MIB_IPINTERFACE_ROW , qui contient le NetLuid de l’interface de l’adaptateur miniport.
    • Type de notification, qui peut être MibAddInstance, MibDeleteInstance ou MibParameterNotification.

    Les pilotes miniport doivent réinitialiser les adresses IP et les adresses de passerelle lorsque l’adaptateur est dans un état connecté, et le type de notification est MibAddInstance, et le NetLuid dans MIB_IPINTERFACE_ROW correspond à l’une des cartes du pilote miniport, qui a été enregistrée lors de l’initialisation de l’adaptateur.

    Les pilotes miniport doivent ensuite suivre la définition de l’adresse IP pour l’interface Mo et la définition des procédures d’adresse de passerelle par défaut pour réinitialiser les adresses respectives.

  4. Pendant le déchargement du pilote, les pilotes miniport doivent annuler l’inscription de la fonction de rappel de notification à l’aide de la fonction d’assistance IP CancelMibChangeNotify2 .

Définition de l’adresse IP de l’interface de Mo

Pour définir une adresse IPv4, utilisez la procédure suivante. Vous pouvez utiliser une fonctionnalité d’assistance IP similaire pour définir une adresse IPv6.

  1. Utilisez la fonction GetUnicastIpAddressTable IP Helper pour rechercher toutes les entrées d’adresse IP dans le système.

  2. Pour chaque entrée dont la valeur InterfaceLuid correspond à l’InterfaceLuid de l’interface Mo :

    1. Recherchez l’entrée d’adresse IP qui correspond à l’adresse IP utilisée dans la connexion précédente. Les connexions à la première fois n’auront pas d’adresse IP précédente.
    2. Si la nouvelle adresse IP est différente de l’adresse IP précédente, supprimez l’entrée d’adresse IP pour les adresses IP de connexion précédentes à l’aide de la fonction d’assistance IP DeleteUnicastIpAddressEntry.
    3. Si la nouvelle adresse IP est identique à l’adresse IP précédente, vérifiez que l’entrée souhaitée existe déjà.
  3. Si le pilote miniport n’a pas trouvé l’entrée d’adresse IP souhaitée dans la boucle précédente, il doit ajouter une nouvelle entrée.

    1. Utilisez la fonction d’assistance IP InitializeUnicastIpAddressEntry pour initialiser une structure MIB_UNICASTIPADDRESS_ROW et définir les membres suivants de la structure :

      1. Définissez les membres InterfaceLuid ou InterfaceIndex , le cas échéant.
      2. Définissez le membre OnlinePrefixLength . Il s’agit du nombre de bits qui ont une valeur d’un dans le masque de sous-réseau. Par exemple, si le masque de sous-réseau est 255.255.255.0, OnlinePrefixLength doit être 24.
      3. Définissez le membre Address .
      4. Définissez le membre PrefixOrigin sur IpPrefixOriginManual.
    2. Transmettez la structure de MIB_UNICASTADDRESS_ROW initialisée à la fonction d’assistance IP CreateUnicastIpAddressEntry pour créer l’entrée d’adresse IP.

Définition de l’adresse de passerelle par défaut

Pour définir une adresse de passerelle IPv4, utilisez la procédure suivante. Vous pouvez utiliser une fonctionnalité d’assistance IP similaire pour définir une adresse de passerelle IPv6.

  1. Utilisez la fonction GetIpForwardTable2 IP Helper pour obtenir toutes les entrées de routage dans le système.

  2. Pour chaque entrée dont la valeur InterfaceLuid correspond à la valeur InterfaceLuid de l’interface Mo et DestinationPrefix est « 0.0.0.0/0 », appelez la fonction d’assistance IP DeleteIpForwardEntry2 pour supprimer l’itinéraire si NextHop n’est pas égal à la nouvelle adresse de passerelle. Sinon, l’entrée de routage se trouve déjà dans le système.

  3. Si le pilote miniport n’a pas trouvé l’entrée de routage souhaitée dans la boucle précédente, il doit ajouter une nouvelle entrée à l’aide de la fonction d’assistance IP InitializeIpForwardEntry pour initialiser une structure MIB_IPFORWARD_ROW2. Initialisez les membres suivants de la structure :

    InterfaceLuid ou InterfaceIndex .

    Définissez DestinationPrefix sur 0.0.0.0/0 pour la passerelle par défaut. (Préfixe = 0.0.0.0 et PrefixLength = 0)

    Définissez NextHop sur l’adresse IP de la passerelle par défaut.

    D’autres membres sont définis sur les valeurs par défaut lors de l’initialisation. Les pilotes miniport doivent utiliser des valeurs par défaut pour ces membres.

  4. Transmettez la structure MIB_IPFORWARD_ROW2 à la fonction d’assistance IP CreateIpForwardEntry2 pour définir une nouvelle adresse de passerelle par défaut.

Pour définir des adresses DNS

  • Définissez la clé de Registre NameServer comme décrit dans Mo Mises à jour DNS pour informer Windows des adresses DNS mises à jour.