Compartilhar via


OID_PNP_SET_POWER

O OID_PNP_SET_POWER OID notifica um driver de miniporto de que seu adaptador de rede subjacente fará a transição para o estado de energia do dispositivo especificado no doInformationBuffer. O estado de energia do dispositivo é especificado como um dos seguintes valores de NDIS_DEVICE_POWER_STATE:

  • NdisDeviceStateD0
  • NdisDeviceStateD1
  • NdisDeviceStateD2
  • NdisDeviceStateD3

Uma solicitação OID_PNP_SET_POWER pode ser precedida por uma solicitação de OID_PNP_QUERY_POWER.

A partir do NDIS 6.30, o NDIS não pausará e reiniciará os drivers NDIS na pilha de driver durante as transições de estado de energia se as seguintes condições forem verdadeiras:

  • O driver de miniporto subjacente define o sinalizador NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND na estrutura NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES. O driver passa um ponteiro para essa estrutura em sua chamada para a função NdisMSetMiniportAttributes.

  • Todos os drivers de filtro que estão anexados ao driver de miniporto dão suporte ao NDIS 6.30 ou versões posteriores do NDIS.

  • Todos os drivers de protocolo que estão associados ao driver de miniporto dão suporte ao NDIS 6.30 ou versões posteriores do NDIS.

Transição para um estado de Low-Power (D1-D3)

Quando o driver de miniporto lida com uma solicitação definida de OID_PNP_SET_POWER para fazer a transição para um estado de baixa potência, ele deve fazer o seguinte:

  • Prepare totalmente o adaptador de rede para o estado de energia do dispositivo de rede indicado. A tarefa executada pelo driver de miniporto para fazer isso depende do dispositivo.

  • Aguarde as chamadas para a função NdisMIndicateReceiveNetBufferLists retornar.

  • Aguarde a conclusão das solicitações de envio processadas pelo adaptador de rede. Depois de concluído, o driver de miniporto deve chamar a função NdisMSendNetBufferListsComplete. O driver deve definir o membro status em cada estrutura NET_BUFFER_LIST com o valor NDIS_STATUS_ xxx apropriado.

  • Conclua todas as solicitações de envio pendentes chamando a função NdisMSendNetBufferListsComplete. O driver deve definir o membro status em cada estrutura NET_BUFFER_LIST para NDIS_STATUS_LOW_POWER_STATE.

  • Rejeite todas as novas solicitações de envio feitas à funçãoMiniportSendNetBufferLists imediatamente chamando a funçãoNdisMSendNetBufferListsComplete. O driver deve definir o membro status em cada estrutura NET_BUFFER_LIST para NDIS_STATUS_LOW_POWER_STATE.

O driver de miniporto que dá suporte ao NDIS 6.30 e versões posteriores do NDIS também deve fazer o seguinte:

  • Não aguarde a conclusão de indicações de recebimento pendentes por meio de chamadas para sua funçãoMiniportReturnNetBufferLists. Além disso, o driver de miniporto não deve alterar a estrutura de NET_BUFFER_LIST ou os dados para quaisquer pacotes que estejam aguardando a conclusão.

  • Manipule a solicitação OID_PNP_SET_POWER para um estado de baixa potência dos estados do adaptador pausado ou em execução. Para obter mais informações sobre esses estados, consulte Miniport Adapter States and Operations.

Antes que o adaptador de rede faça a transição para o estado D3, o driver de miniporto deve desativar tudo sob o controle do driver de miniporto executando as seguintes tarefas:

  • Desabilite as interrupções e o mecanismo de DMA no adaptador de rede.

  • Interrompa o mecanismo de recebimento no adaptador de rede.

  • Não desaloque nem modifique os descritores de recebimento e os buffers de pacote associados a indicações de recebimento pendentes.

  • Cancele todos os temporizadores do NDIS.

Observação Um driver de miniporto não pode acessar o adaptador de rede depois que o driver de ônibus fez a transição do adaptador de rede para o estado D3.

Transição para o estado de Full-Power (D0)

Quando o driver de miniporto lida com uma solicitação definida de OID_PNP_SET_POWER para fazer a transição para um estado de energia total, ele deve restaurar o mecanismo de recebimento do adaptador de rede para o mesmo estado em que o mecanismo de recebimento estava antes de o adaptador ser transferido para o estado de baixa potência.

Observação O driver de miniporto não deve acessar nem alterar os buffers de recebimento associados a indicações de recebimento pendentes.

O NDIS chama a funçãominiportRestartdo driver de miniportuário após a transição para um estado de potência total somente se o NDIS chamar a função MiniportPause do driver antes da transição para um estado de baixa potência.

Observação Um driver intermediário sempre deve retornar NDIS_STATUS_SUCCESS a uma consulta de OID_PNP_SET_POWER. Um driver intermediário nunca deve propagar uma solicitação de OID_PNP_SET_POWER para um driver de miniporto subjacente.

Retornar códigos de status

A funçãoMiniportOidRequestdo driver de miniporto retorna um dos seguintes valores para esta solicitação:

Prazo Descrição

NDIS_STATUS_SUCCESS

O driver de miniporto concluiu a solicitação com êxito.

NDIS_STATUS_PENDING

O driver de miniporto concluirá a solicitação de forma assíncrona. Depois que o driver de miniporto concluir todo o processamento, ele deverá ter êxito na solicitação chamando a funçãoNdisMOidRequestComplete, passando NDIS_STATUS_SUCCESS para o parâmetro status.

NDIS_STATUS_NOT_ACCEPTED

O driver de miniporto está sendo redefinido.

Requisitos

Versão

Com suporte para NDIS 5.1 e NDIS 6.0 e posterior.

Cabeçalho

Ntddndis.h (inclua Ndis.h)

Consulte também


MiniportInitializeEx

MiniportPause

MiniportRestart

MiniportReturnNetBufferLists

MiniportSendNetBufferLists

NDIS_DEVICE_POWER_STATE

NdisMIndicateReceiveNetBufferLists

NdisMSendNetBufferListsComplete

NET_BUFFER_LIST