Partilhar via


OID_PNP_SET_POWER

O OID_PNP_SET_POWER OID notifica um driver de miniporte de que seu adaptador de rede subjacente fará 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

Uma solicitação OID_PNP_SET_POWER pode ser precedida por uma solicitação 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 sobressociados 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 manipula 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 o retorno das chamadas para a função NdisMIndicateReceiveNetBufferLists .

  • Aguarde até que as solicitações de envio processadas pelo adaptador de rede sejam concluídas. 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 para 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 como NDIS_STATUS_LOW_POWER_STATE.

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

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

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

  • Manipule a solicitação de 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 Estados e operações do adaptador miniport.

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 miniporte 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.

  • Cancelar todos os temporizadores NDIS.

Nota Um driver de miniporto 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 de Full-Power (D0)

Quando o driver de miniporto manipula 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.

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

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

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 miniporto subjacente.

Retornar códigos de status

A função MiniportOidRequest do driver de miniport retorna um dos seguintes valores para esta solicitação:

Termo Descrição

NDIS_STATUS_SUCCESS

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

NDIS_STATUS_PENDING

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

NDIS_STATUS_NOT_ACCEPTED

O driver de miniporte 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)

Confira também


MiniportInitializeEx

MiniportPause

MiniportRestart

MiniportReturnNetBufferLists

MiniportSendNetBufferLists

NDIS_DEVICE_POWER_STATE

NdisMIndicateReceiveNetBufferLists

NdisMSendNetBufferListsComplete

NET_BUFFER_LIST