Compartilhar via


Emissão de indicações de status de motivo de ativação do NDIS

Se um driver de miniporta der suporte ao motivo de ativação do NDIS status indicações (NDIS_STATUS_PM_WAKE_REASON), ele deverá gerar essa indicação status imediatamente após o adaptador de rede gerar um evento de ativação e o adaptador retomar para um estado de energia total.

Nota O suporte para o motivo da ativação do NDIS status indicações são opcionais para drivers de miniporta de Banda Larga Móvel (MB).

O driver de miniporta é configurado com parâmetros de PM (gerenciamento de energia) por meio de uma solicitação de conjunto de OID (identificador de objeto) de OID_PM_PARAMETERS. Essa solicitação OID especifica os parâmetros do PM por meio de uma estrutura NDIS_PM_PARAMETERS .

A estrutura NDIS_PM_PARAMETERS especifica os parâmetros para os seguintes tipos de eventos de ativação.

Eventos de ativação de pacote recebidos
O adaptador de rede gerará um evento de ativação se receber um pacote que corresponda a um padrão WOL (wake-on-LAN). Os padrões WOL incluem o seguinte:

  • Padrões WOL independentes de mídia, como pacotes mágicos ou padrões de dados TCP/IP dentro do conteúdo do pacote. Por exemplo, a estrutura NDIS_PM_PARAMETERS pode especificar um padrão WOL para um quadro TCP SYN.

  • Padrões WOL específicos da mídia, como um pacote de identificador de solicitação EAPOL ou mensagem SMS (Serviço de Mensagens Curtas) de banda larga móvel (MB).

  • Padrões curinga que correspondem a um filtro de recebimento especificado por meio de uma solicitação de conjunto de OID de OID_GEN_CURRENT_PACKET_FILTER.

Nota Para esse tipo de motivo de ativação status indicação, o adaptador de rede deve ser capaz de salvar o pacote recebido. O driver deve retornar o pacote recebido dentro da indicação status.

Os padrões WOL são especificados por meio do membro EnabledWoLPacketPatterns da estrutura NDIS_PM_PARAMETERS .

Eventos de ativação específicos da mídia
O adaptador de rede gera um evento de ativação devido a um motivo específico da mídia, como uma desassociação de um AP (ponto de acesso) 802.11 ou o recebimento de uma mensagem sms (serviço de mensagem curta) de banda larga móvel (MB).

Eventos de ativação desse tipo são especificados por meio do membro MediaSpecificWakeUpEvents da estrutura NDIS_PM_PARAMETERS .

Eventos de ativação independentes de mídia
O adaptador de rede gera um evento de ativação devido a um motivo independente de mídia, como conexão de mídia ou desconexão.

Eventos de ativação desse tipo são especificados por meio do membro WakeUpFlags da estrutura NDIS_PM_PARAMETERS .

Se o adaptador de rede gerou um sinal de ativação, o driver de miniporta deverá emitir uma indicação NDIS_STATUS_PM_WAKE_REASON status. O driver faz isso enquanto está tratando a solicitação de conjunto de OID de OID_PNP_SET_POWER para a transição do adaptador para um estado de energia total.

Nota O driver de miniporta deve emitir uma indicação NDIS_STATUS_PM_WAKE_REASON status antes de emitir uma indicação status relacionada ao evento de ativação. Por exemplo, se o evento de ativação foi devido a uma alteração no estado de conectividade de mídia, o driver de miniporto deve emitir um NDIS_STATUS_LINK_STATE status indicação depois de ter emitido a indicação NDIS_STATUS_PM_WAKE_REASON status.

Quando o driver de miniporta emite o NDIS_STATUS_PM_WAKE_REASON status indicação, ele deve seguir estas etapas:

  1. O driver de miniporta deve alocar um buffer grande o suficiente para conter o seguinte:

    • Uma estrutura NDIS_PM_WAKE_REASON .

    • Uma estrutura NDIS_PM_WAKE_PACKET juntamente com o pacote recebido (pacote de ativação) que fez com que o adaptador de rede gerasse o evento de ativação.

      Nota O driver de miniporto não precisará alocar esse espaço de buffer se indicar eventos de ativação específicos de mídia ou independentes de mídia.

  2. O driver de miniporta inicializa uma estrutura NDIS_PM_WAKE_REASON no início do buffer. O driver define o membro WakeReason como um valor de enumeração NDIS_PM_WAKE_REASON_TYPE que define o tipo do evento de ativação.

    Por exemplo, se o driver de miniporto estiver indicando um evento de ativação de pacote recebido, ele deverá definir o membro WakeReason como NdisWakeReasonPacket. Caso contrário, o driver define o membro WakeReason como o valor de enumeração que melhor descreve o evento de ativação específico de mídia ou independente de mídia.

  3. Se o miniportdriver estiver emitindo um NDIS_STATUS_PM_WAKE_REASON status indicação para um evento de ativação de pacote recebido, ele deverá seguir estas etapas:

    1. O driver de miniporta define o membro InfoBufferOffset como o deslocamento de uma estrutura NDIS_PM_WAKE_PACKET que segue a estrutura NDIS_PM_WAKE_REASON no buffer.

      Nota O driver de miniporta deve alinhar o início da estrutura NDIS_PM_WAKE_PACKET em um limite de 64 bits.

    2. O driver de miniporta define o membro InfoBufferSize com o tamanho da estrutura NDIS_PM_WAKE_PACKET mais o tamanho do pacote que causou o evento de ativação.

    3. O driver de miniporta inicializa uma estrutura NDIS_PM_WAKE_PACKET seguindo a estrutura NDIS_PM_WAKE_REASON no buffer.

      O driver de miniporta define os membros da estrutura NDIS_PM_WAKE_PACKET da seguinte maneira:

      • O membro PatternId é definido como o identificador do padrão WOL que corresponde ao pacote de ativação. Esse identificador é especificado pelo membro PatternId da estrutura NDIS_PM_WOL_PATTERN que é passada para o driver durante uma solicitação de conjunto OID de OID_PM_ADD_WOL_PATTERN.

      • O membro PatternFriendlyName é definido como a descrição legível pelo usuário do padrão de ativação especificado pelo membro PatternId . Esse valor é especificado pelo membro FriendlyName da estrutura NDIS_PM_WOL_PATTERN .

        Nota O driver de miniporta não precisa inicializar esse membro. O NDIS define o membro PatternFriendlyName com o valor correto antes de passar a estrutura NDIS_PM_WAKE_PACKET para drivers sobressociá-los.

      • O membro OriginalPacketSize é definido como o comprimento do pacote, conforme recebido pelo adaptador de rede.

      • O membro SavedPacketSize deve ser definido com o comprimento do pacote que está sendo relatado por meio da indicação status NDIS_STATUS_PM_WAKE_REASON.

        Nota O valor desse membro não deve ser maior que o valor definido pelo driver de miniporto no membro MaxWoLPacketSaveBuffer da estrutura NDIS_PM_CAPABILITIES . O driver retorna essa estrutura quando relata seus recursos de indicação de pacote de ativação. Para obter mais informações, consulte Reporting Wake Reason Status Indication Capabilities.

      • O membro SavedPacketOffset deve ser definido como o deslocamento, em unidades de bytes, para o pacote de ativação que segue a estrutura NDIS_PM_WAKE_PACKET .

        Nota O driver de miniporta deve alinhar o início do pacote de ativação em um limite de 64 bits no buffer.

    4. O miniporto copia o pacote de ativação para o buffer no deslocamento especificado pelo membro SavedPacketOffset .

  4. Se o driver de miniporto estiver emitindo um NDIS_STATUS_PM_WAKE_REASON status indicação para um evento de ativação independente de mídia ou de mídia, ele definirá os membros InfoBufferOffset e InfoBufferSize da estrutura NDIS_PM_WAKE_REASON como zero.

  5. O driver de miniporta inicializa uma estrutura NDIS_STATUS_INDICATION . O driver define o membro StatusCode como NDIS_STATUS_PM_WAKE_REASON. O driver também define o membro StatusBuffer para apontar para o buffer e define o StatusBufferLength como o comprimento, em bytes, do buffer.

  6. O driver de miniporto chama NdisMIndicateStatusEx e passa um ponteiro para a estrutura NDIS_STATUS_INDICATION no parâmetro StatusIndication .

Nota Depois que o driver de miniporto emite o NDIS_STATUS_PM_WAKE_REASON status indicação de um evento de ativação de pacote recebido, ele deve indicar esse pacote recebido chamando NdisMIndicateReceiveNetBufferLists.