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:
O driver de miniporta deve alocar um buffer grande o suficiente para conter o seguinte:
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.
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.
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:
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.
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.
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.
O miniporto copia o pacote de ativação para o buffer no deslocamento especificado pelo membro SavedPacketOffset .
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.
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.
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.