Partilhar via


OID_PNP_SET_POWER

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

  • NdisDeviceStateD0
  • NdisDeviceStateD1
  • NdisDeviceStateD2
  • NdisDeviceStateD3

Um pedido de OID_PNP_SET_POWER pode ser precedido de um pedido de OID_PNP_QUERY_POWER.

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

  • O driver de miniporta subjacente define o sinalizador de 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çãoNdisMSetMiniportAttributes.

  • Todos os drivers de filtro sobrepostos que estão conectados ao driver de miniporta suportam NDIS 6.30 ou versões posteriores do NDIS.

  • Todos os drivers de protocolo sobrepostos que estão vinculados ao driver de miniporta suportam NDIS 6.30 ou versões posteriores do NDIS.

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

Quando o driver de miniporta lida com uma solicitação definida de OID_PNP_SET_POWER para fazer a transição para um estado de baixo consumo de energia, 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 miniporta para realizar isso depende do dispositivo.

  • Aguarde até que as chamadas para a funçãoNdisMIndicateReceiveNetBufferLists retornem.

  • Aguarde a conclusão das solicitações de envio processadas pelo adaptador de rede. Uma vez concluído, o driver de miniporta deve chamar a funçãoNdisMSendNetBufferListsComplete . O condutor deve definir o Estado membro em cada estrutura NET_BUFFER_LIST para o valorNDIS_STATUS_ Xxx adequado.

  • Conclua todas as solicitações de envio pendentes chamando a funçãoNdisMSendNetBufferListsComplete . O motorista deve definir o Status membro em cada estrutura NET_BUFFER_LIST como NDIS_STATUS_LOW_POWER_STATE.

  • Rejeite todas as novas solicitações de envio feitas para seu função MiniportSendNetBufferLists imediatamente chamando a funçãoNdisMSendNetBufferListsComplete . O motorista deve definir o Status membro em cada estrutura NET_BUFFER_LIST como NDIS_STATUS_LOW_POWER_STATE.

O driver de miniporta que suporta NDIS 6.30 e versões posteriores do NDIS também deve fazer o seguinte:

  • Não espere pela conclusão das indicações de recebimento pendentes através de chamadas para sua funçãoMiniportReturnNetBufferLists. Além disso, o driver de miniporta não deve alterar a estrutura de NET_BUFFER_LIST ou os dados de quaisquer pacotes que estejam aguardando para serem concluídos.

  • Manipule a solicitação de OID_PNP_SET_POWER para um estado de baixo consumo de energia a partir 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 miniporta deve desligar tudo sob o controle do driver de miniporta executando as seguintes tarefas:

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

  • Pare o mecanismo de recebimento no adaptador de rede.

  • Não desaloque ou modifique descritores de recebimento e buffers de pacotes associados a indicações de recebimento pendentes.

  • Cancele todos os temporizadores NDIS.

Observação um driver de miniporta não pode acessar o adaptador de rede depois que o driver de barramento fez a transição do adaptador de rede para o estado D3.

Transição para o Estado Full-Power (D0)

Quando o driver de miniporta 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 baixo consumo.

Nota O driver de miniporta não deve acessar ou alterar nenhum buffer de recebimento associado a indicações de recebimento pendentes.

O NDIS chama a função MiniportRestart do driver de miniporta após a transição para um estado de potência total somente se o NDIS chamar a função deMiniportPause do driver antes da transição para um estado de baixo consumo de energia.

Nota Um driver intermediário deve sempre 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 miniporta subjacente.

Códigos de status de retorno

A funçãoMiniportOidRequest do driver de miniportaretorna um dos seguintes valores para essa solicitação:

Vigência Descrição

NDIS_STATUS_SUCCESS

O driver da miniporta concluiu a solicitação com êxito.

NDIS_STATUS_PENDING

O driver de miniporta concluirá a solicitação de forma assíncrona. Depois que o driver de miniporta tiver concluído todo o processamento, ele deverá executar a solicitação chamando a funçãoNdisMOidRequestComplete e passando NDIS_STATUS_SUCCESS para o parâmetro Status .

NDIS_STATUS_NOT_ACCEPTED

O driver da miniporta está sendo redefinido.

Requerimentos

Versão

Suportado para NDIS 5.1 e NDIS 6.0 e posterior.

Cabeçalho

Ntddndis.h (inclui Ndis.h)

Ver também


MiniportInitializeEx

MiniportPause

MiniportReiniciar

MiniportReturnNetBufferLists

MiniportSendNetBufferLists

NDIS_DEVICE_POWER_STATE

NdisMIndicateReceiveNetBufferLists

NdisMSendNetBufferListsComplete

NET_BUFFER_LIST