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
NdisMIndicateReceiveNetBufferLists