Compartilhar via


REQUEST_POWER_COMPLETE função de retorno de chamada (wdm.h)

A rotina de retorno de chamada PowerCompletion conclui o processamento de um IRP de energia.

Sintaxe

REQUEST_POWER_COMPLETE RequestPowerComplete;

void RequestPowerComplete(
  [in]           PDEVICE_OBJECT DeviceObject,
  [in]           UCHAR MinorFunction,
  [in]           POWER_STATE PowerState,
  [in, optional] PVOID Context,
  [in]           PIO_STATUS_BLOCK IoStatus
)
{...}

Parâmetros

[in] DeviceObject

Um ponteiro para o DEVICE_OBJECT de destino para o IRP de energia completa.

[in] MinorFunction

Especifica o código de função secundária no IRP de energia. Para obter mais informações, consulte a lista de códigos de IRP_MN_XXX com suporte na seção Comentários.

[in] PowerState

Especifica o de estado de energia do dispositivo ou de estado de energia do sistema que foi passado para a rotina de poRequestPowerIrp.

[in, optional] Context

Um ponteiro para o contexto que foi passado para PoRequestPowerIrp.

[in] IoStatus

Um ponteiro para a estrutura de IO_STATUS_BLOCK para o IRP concluído.

Valor de retorno

Nenhum

Observações

Um driver que envia um IRP de energia pode precisar executar tarefas adicionais depois que todos os outros drivers tiverem concluído o IRP. Em caso afirmativo, o driver de envio deve registrar um rotina de retorno de chamada do PowerCompletion durante a chamada para a rotina de PoRequestPowerIrp que aloca o IRP.

A rotina de retorno de chamada PowerCompletion do driver é usada apenas para IRP_MJ_POWER IRPs que têm códigos IRP menores de IRP_MN_SET_POWER, IRP_MN_QUERY_POWERe IRP_MN_WAIT_WAKE. Para obter mais informações, consulte envio de IRP_MN_QUERY_POWER ou IRP_MN_SET_POWER para de estados de energia de dispositivo e rotinas de retorno de chamada de espera/ativação.

O gerente de E/S chama a rotina de powercompletion do driver de envio somente depois que o gerente de E/S chamar todas as rotinas de de IoCompletion que foram definidas por outros drivers à medida que passavam o IRP na pilha. A rotina PowerCompletion executa quaisquer tarefas adicionais que o remetente do IRP requer depois que todos os outros drivers tiverem concluído o IRP. A rotina de PowerCompletion não deve liberar o IRP– o power manager faz isso.

A rotina do PowerCompletion é chamada em IRQL = PASSIVE_LEVEL ou IRQL = DISPATCH_LEVEL.

Exemplos

Para definir uma rotina de retorno de chamada PowerCompletion, primeiro você deve fornecer uma declaração de função que identifique o tipo de rotina de retorno de chamada que você está definindo. O Windows fornece um conjunto de tipos de função de retorno de chamada para drivers. Declarar uma função usando os tipos de função de retorno de chamada ajuda a análise de código para drivers, SDV (Verificador de Driver Estático) e outras ferramentas de verificação encontram erros e é um requisito para gravar drivers para o sistema operacional Windows.

Por exemplo, para definir uma rotina de retorno de chamada PowerCompletion denominada MyPowerCompletion, use o tipo REQUEST_POWER_COMPLETE, conforme mostrado neste exemplo de código:

REQUEST_POWER_COMPLETE MyPowerCompletion;

Em seguida, implemente sua rotina de retorno de chamada da seguinte maneira:

_Use_decl_annotations_
VOID
  MyPowerCompletion(
    PDEVICE_OBJECT DeviceObject,
    UCHAR MinorFunction,
    POWER_STATE PowerState,
    PVOID Context,
    PIO_STATUS_BLOCK IoStatus
    )
  {
      // Function body
  }

O tipo de função REQUEST_POWER_COMPLETE é definido no arquivo de cabeçalho Wdm.h. Para identificar erros com mais precisão ao executar as ferramentas de análise de código, adicione a anotação _Use_decl_annotations_ à sua definição de função. A anotação _Use_decl_annotations_ garante que as anotações aplicadas ao tipo de função REQUEST_POWER_COMPLETE no arquivo de cabeçalho sejam usadas. Para obter mais informações sobre os requisitos para declarações de função, consulte Declarando funções usando tipos de função de função para drivers WDM. Para obter informações sobre _Use_decl_annotations_, consulte Anotando o comportamento da função.

Requisitos

Requisito Valor
da Plataforma de Destino Área de trabalho
cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL Chamado no IRQL <= DISPATCH_LEVEL (consulte a seção Comentários).

Consulte também

DEVICE_OBJECT

IO_STATUS_BLOCK

IRP_MJ_POWER

IRP_MN_QUERY_POWER

IRP_MN_SET_POWER

IRP_MN_WAIT_WAKE

IoCompletion

PoRequestPowerIrp