Activation d’un port NDIS

Une fois qu’un pilote miniport a correctement alloué un port NDIS, et avant d’utiliser le numéro de port dans les fonctions NDIS, le pilote doit activer le port. Pour activer le port, le pilote miniport envoie un événement d’activation de port Plug-and-Play (PnP) à NDIS. Pour envoyer l’événement PnP d’activation de port, les pilotes miniport utilisent le code d’événement NetEventPortActivation PnP dans l’appel à la fonction NdisMNetPnPEvent .

Pour activer des ports, le pilote miniport doit définir les membres de la structure NET_PNP_EVENT_NOTIFICATION vers laquelle pointe le paramètre NetPnPEvent de NdisMNetPnPEvent comme suit :

PortNumber
Port source de la notification d’événement. Définissez ce membre sur zéro, car les numéros de port sont fournis dans le membre Buffer de la structure spécifiée par le membre NetPnPEvent .

NetPnPEvent
Structure NET_PNP_EVENT qui décrit l’événement d’activation de port. Définissez les membres de cette structure comme suit :

NetEvent
Code d’événement qui décrit l’événement. Définissez ce membre sur NetEventPortActivation.

Tampon
Pointeur vers une liste liée de structures NDIS_PORT . Le membre Suivant des structures NDIS_PORT pointe vers la structure NDIS_PORT suivante dans la liste.

BufferLength
Nombre d’octets spécifiés dans Mémoire tampon . Définissez BufferLength sur la taille des structures NDIS_PORT.

Autres membres
Définissez les membres restants de NET_PNP_EVENT sur NULL.

Le pilote miniport répertorie les ports dont l’état est passé d’inactif à actif dans une liste liée de structures NDIS_PORT . Toutefois, si le port par défaut d’une carte miniport est la cible d’un événement PnP NetEventPortActivation , le port par défaut doit être le seul port de la liste.

Lorsque le pilote miniport avertit NDIS de l’activation d’un port (et éventuellement avant le retour de cet appel de notification), le pilote miniport doit être prêt à gérer les demandes d’envoi et les requêtes OID associées au port. Les pilotes miniport ne doivent pas utiliser le numéro de port d’un port nouvellement activé dans status ou recevoir des indications tant que l’appel à NdisMNetPnPEvent n’est pas retourné.

NDIS n’informe pas trop les pilotes des ports activés tant que le port par défaut n’est pas actif. Lorsque NDIS appelle la fonction ProtocolBindAdapterEx d’un pilote de protocole, NDIS fournit une liste de tous les ports actuellement actifs dans le membre ActivePorts de la structure NDIS_BIND_PARAMETERS vers laquelle pointe le paramètre BindParameters . Lorsqu’un pilote miniport active de nouveaux ports, NDIS avertit tous les pilotes de protocole qui sont liés au pilote miniport avec l’événement PnP NetEventPortActivation . Pour plus d’informations sur la gestion de ces événements d’activation de port dans un pilote de protocole, consultez Gestion de l’événement PnP d’activation de port.

Avant qu’un pilote miniport n’alloue un port NDIS, le pilote doit appeler la fonction NdisMSetMiniportAttributes pour définir les attributs d’inscription dans la structure NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES . Les pilotes Miniport peuvent contrôler l’activation du port par défaut en définissant l’indicateur d’attribut NDIS_MINIPORT_CONTROLS_DEFAULT_PORT lorsqu’ils appellent NdisMSetMiniportAttributes. Si un pilote miniport assume la responsabilité d’activer le port par défaut, NDIS n’initie pas la liaison entre l’adaptateur miniport et les pilotes qui se superposent tant que le pilote miniport n’active pas le port par défaut avec l’événement PnP d’activation du port.

Tous les ports spécifiés par la liste liée des structures NDIS_PORT doivent être à l’état alloué. Un pilote miniport ne doit pas tenter d’activer un port déjà actif ; si le pilote tente d’activer un port actif, NDIS traite la situation comme un échec d’activation de port.

Si NDIS ne parvient pas à activer les ports de la liste, l’appel à NdisMNetPnPEvent échoue et aucun des ports de la liste ne change d’état à l’état activé. Si NDIS ne parvient pas à activer les ports parce que certains des ports n’existent pas, NdisMNetPnPEvent retourne une valeur de retour NDIS_STATUS_INVALID_PORT. Si NDIS ne parvient pas à activer les ports parce que certains des ports ne sont pas dans l’état alloué, NdisMNetPnPEvent retourne une valeur de retour NDIS_STATUS_INVALID_PORT_STATE.

Une fois qu’un port a été correctement activé, le port est à l’état activé. Les pilotes miniport peuvent indiquer les données reçues et status pour un port à l’état activé.

NDIS transmet l’état d’authentification du port par défaut à la fonction MiniportInitializeEx au niveau du membre DefaultPortAuthStates de la structure NDIS_MINIPORT_INIT_PARAMETERS . Si un pilote miniport contrôle le port par défaut, lorsque le pilote miniport active le port par défaut, il peut activer le port par défaut à l’aide des paramètres d’authentification par défaut. Pour utiliser les paramètres d’authentification par défaut, définissez l’indicateur NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS dans le membre Indicateurs de NDIS_PORT_CHARACTERISTICS structure. Les pilotes miniport peuvent utiliser l’indicateur NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS pour les ports qu’ils allouent et activent. Pour le cas d’activation, NDIS affecte les états d’authentification par défaut au port nouvellement activé et ignore les états d’authentification qui sont passés à NdisMNetPnPEvent pour l’événement NetEventPortActivation .

Pour plus d’informations sur le contrôle du port par défaut et l’allocation de ports, consultez Allocation de ports NDIS.