Émission d’indications d’état de motif de veille NDIS

Si un pilote miniport prend en charge la raison de sortie de veille NDIS status indications (NDIS_STATUS_PM_WAKE_REASON), il doit générer cette indication status immédiatement après que la carte réseau a généré un événement de mise en éveil et que l’adaptateur reprend à l’état pleine alimentation.

Note La prise en charge de la raison de sortie de veille NDIS status indications est facultative pour les pilotes miniport à haut débit mobile (Mo).

Le pilote miniport est configuré avec des paramètres de gestion de l’alimentation (PM) par le biais d’une demande de jeu d’identificateur d’objet (OID) de OID_PM_PARAMETERS. Cette requête OID spécifie les paramètres pm via une structure de NDIS_PM_PARAMETERS .

La structure NDIS_PM_PARAMETERS spécifie les paramètres pour les types d’événements de mise en éveil suivants.

Événements de mise en éveil des paquets reçus
La carte réseau génère un événement de mise en éveil si elle reçoit un paquet correspondant à un modèle WOL (Wake-on-LAN). Les modèles WOL incluent les éléments suivants :

  • Modèles WOL indépendants des médias, tels que les paquets magiques ou les modèles de données TCP/IP au sein de la charge utile du paquet. Par exemple, la structure NDIS_PM_PARAMETERS peut spécifier un modèle WOL pour un frame TCP SYN.

  • Modèles WOL spécifiques aux médias, tels qu’un paquet d’identificateur de requête EAPOL ou un message SMS (Short Message Service) à large bande mobile (Mo).

  • Modèles génériques qui correspondent à un filtre de réception spécifié par le biais d’une demande de jeu d’OID de OID_GEN_CURRENT_PACKET_FILTER.

Note Pour ce type de raison de sortie de veille status indication, la carte réseau doit être en mesure d’enregistrer le paquet reçu. Le pilote doit retourner le paquet reçu dans l’indication status.

Les modèles WOL sont spécifiés par le biais du membre EnabledWoLPacketPatterns de la structure NDIS_PM_PARAMETERS .

Événements d’éveil spécifiques aux médias
La carte réseau génère un événement de mise en éveil pour une raison spécifique au média, telle qu’une dissociation d’un point d’accès 802.11 (AP) ou la réception d’un message SMS (Short Message Service) haut débit mobile (Mo).

Les événements de mise en éveil de ce type sont spécifiés via le membre MediaSpecificWakeUpEvents de la structure NDIS_PM_PARAMETERS .

Événements d’éveil indépendants des médias
La carte réseau génère un événement de mise en éveil en raison d’une raison indépendante du support, telle que la connexion ou la déconnexion d’un média.

Les événements de mise en éveil de ce type sont spécifiés via le membre WakeUpFlags de la structure NDIS_PM_PARAMETERS .

Si la carte réseau a généré un signal de mise en éveil, le pilote miniport doit émettre un NDIS_STATUS_PM_WAKE_REASON status indication. Le pilote effectue cette opération pendant qu’il gère la demande de jeu d’OID de OID_PNP_SET_POWER pour la transition de l’adaptateur vers un état de pleine puissance.

Note Le pilote miniport doit émettre une indication NDIS_STATUS_PM_WAKE_REASON status avant d’émettre une indication status liée à l’événement de mise en éveil. Par exemple, si l’événement de mise en éveil a été dû à un changement de l’état de connectivité du média, le pilote miniport doit émettre une indication NDIS_STATUS_LINK_STATE status après avoir émis l’indication NDIS_STATUS_PM_WAKE_REASON status.

Lorsque le pilote miniport émet l’indication status NDIS_STATUS_PM_WAKE_REASON, il doit suivre les étapes suivantes :

  1. Le pilote miniport doit allouer une mémoire tampon suffisamment grande pour contenir les éléments suivants :

    • Structure NDIS_PM_WAKE_REASON .

    • Une structure NDIS_PM_WAKE_PACKET avec le paquet reçu (paquet de veille) qui a provoqué la génération de l’événement de mise en éveil de la carte réseau.

      Note Le pilote miniport n’a pas besoin d’allouer cet espace tampon s’il indique des événements de mise en éveil spécifiques au média ou indépendants du média.

  2. Le pilote miniport initialise une structure NDIS_PM_WAKE_REASON au début de la mémoire tampon. Le pilote définit le membre WakeReason sur une valeur d’énumération NDIS_PM_WAKE_REASON_TYPE qui définit le type de l’événement de mise en éveil.

    Par exemple, si le pilote miniport indique un événement de mise en éveil du paquet reçu, il doit définir le membre WakeReason sur NdisWakeReasonPacket. Sinon, le pilote définit le membre WakeReason sur la valeur d’énumération qui décrit le mieux l’événement de mise en éveil propre au média ou indépendant du média.

  3. Si le miniportdriver émet une indication NDIS_STATUS_PM_WAKE_REASON status pour un événement de mise en éveil des paquets reçus, il doit suivre les étapes suivantes :

    1. Le pilote miniport définit le membre InfoBufferOffset sur le décalage d’une structure NDIS_PM_WAKE_PACKET qui suit la structure NDIS_PM_WAKE_REASON dans la mémoire tampon.

      Note Le pilote miniport doit aligner le début de la structure NDIS_PM_WAKE_PACKET sur une limite 64 bits.

    2. Le pilote miniport définit le membre InfoBufferSize sur la taille de la structure NDIS_PM_WAKE_PACKET plus la taille du paquet qui a provoqué l’événement de mise en éveil.

    3. Le pilote miniport initialise une structure NDIS_PM_WAKE_PACKET en suivant la structure NDIS_PM_WAKE_REASON dans la mémoire tampon.

      Le pilote miniport définit les membres de la structure NDIS_PM_WAKE_PACKET comme suit :

      • Le membre PatternId est défini sur l’identificateur du modèle WOL qui correspond au paquet de veille. Cet identificateur est spécifié par le membre PatternId de la structure NDIS_PM_WOL_PATTERN qui est passée au pilote lors d’une demande de jeu d’OID de OID_PM_ADD_WOL_PATTERN.

      • Le membre PatternFriendlyName est défini sur la description lisible par l’utilisateur du modèle de veille spécifié par le membre PatternId . Cette valeur est spécifiée par le membre FriendlyName de la structure NDIS_PM_WOL_PATTERN .

        Note Le pilote miniport n’a pas besoin d’initialiser ce membre. NDIS définit le membre PatternFriendlyName sur la valeur correcte avant qu’il passe la structure NDIS_PM_WAKE_PACKET aux pilotes sur-mentants.

      • Le membre OriginalPacketSize est défini sur la longueur du paquet reçue par la carte réseau.

      • Le membre SavedPacketSize doit être défini sur la longueur du paquet signalé via l’indication NDIS_STATUS_PM_WAKE_REASON status.

        Note La valeur de ce membre ne doit pas être supérieure à la valeur définie par le pilote miniport dans le membre MaxWoLPacketSaveBuffer de la structure NDIS_PM_CAPABILITIES . Le pilote retourne cette structure lorsqu’il signale ses fonctionnalités d’indication de paquets de sortie de veille. Pour plus d’informations, consultez Fonctionnalités d’indication de l’état de l’éveil.

      • Le membre SavedPacketOffset doit être défini sur le décalage, en unités d’octets, du paquet de veille qui suit la structure NDIS_PM_WAKE_PACKET .

        Note Le pilote miniport doit aligner le début du paquet de veille sur une limite 64 bits dans la mémoire tampon.

    4. Le miniport copie le paquet de sortie de veille dans la mémoire tampon au décalage spécifié par le membre SavedPacketOffset .

  4. Si le pilote miniport émet une indication NDIS_STATUS_PM_WAKE_REASON status pour un événement de mise en éveil spécifique ou indépendante du média, il définit les membres InfoBufferOffset et InfoBufferSize de la structure NDIS_PM_WAKE_REASON sur zéro.

  5. Le pilote miniport initialise une structure NDIS_STATUS_INDICATION . Le pilote définit le membre StatusCode sur NDIS_STATUS_PM_WAKE_REASON. Le pilote définit également le membre StatusBuffer pour qu’il pointe vers la mémoire tampon et définit StatusBufferLength sur la longueur, en octets, de la mémoire tampon.

  6. Le pilote miniport appelle NdisMIndicateStatusEx et passe un pointeur vers la structure NDIS_STATUS_INDICATION dans le paramètre StatusIndication .

Note Une fois que le pilote miniport émet le NDIS_STATUS_PM_WAKE_REASON status indication d’un événement de mise en éveil du paquet reçu, il doit indiquer ce paquet reçu en appelant NdisMIndicateReceiveNetBufferLists.