Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Quando um driver solicita um IRP de espera/despertar, ele deve especificar uma rotina de retorno para que ele possa retornar o dispositivo ao estado de trabalho (D0) quando o evento de ativação ocorrer. Depois que o evento de ativação ocorrer e todos os drivers tiverem concluído o IRP, o sistema chamará a rotina de retorno de chamada passada para PoRequestPowerIrp.
Como essa rotina de retorno de chamada é definida em nome do driver que originou o IRP e não para um driver que está tratando o IRP, ele não deve chamar PoStartNextPowerIrp; somente as rotinas IoCompletion definidas à medida que os drivers passam o IRP para baixo na pilha devem iniciar o próximo IRP de energia. Tenha em mente que o proprietário da política não só envia o IRP, mas também o manipula. Assim, ele pode definir uma rotina IoCompletion à medida que transmite o IRP através da pilha, além de definir uma rotina de retorno de chamada ao solicitar o IRP de espera/despertar.
A rotina de retorno de chamada tem as seguintes responsabilidades:
Se o driver controlar mais de um dispositivo, determine quais de seus dispositivos sinalizaram a ativação.
Atenda ao evento que causou o sinal de ativação.
Configure o dispositivo que sinalizou a ativação no estado D0 chamando PoRequestPowerIrp para enviar uma solicitação PowerDeviceD0. O driver também deve chamar PoSetPowerState para informar o power manager sobre o novo estado de energia do dispositivo. Para obter mais informações, consulte Envio de IRP_MN_QUERY_POWER ou IRP_MN_SET_POWER para estados de energia de dispositivo.
Se o driver definir uma rotina Cancelar para o IRP, chame IoSetCancelRoutine para redefinir a rotina Cancelar para NULL.
Se o driver possuir uma política de energia para mais de um dispositivo, decremente sua contagem de referência de espera/ativação. Se a contagem não for zero, indicando que outro dispositivo já havia enviado um IRP de espera/ativação, solicite outro IRP de espera/ativação (PoRequestPowerIrp) para seu PDO.
Por exemplo, um dispositivo PCI pode ter a espera/ativação habilitada para um modem e uma Placa de Interface de Rede (NIC). Se a NIC ativar o sistema (concluindo assim o IRP), o PCI FDO deverá enviar outro IRP de espera/ativação para si mesmo para que o modem ainda possa ser ativado.
Como o driver que solicitou o IRP de espera/despertar controla a política de energia para sua pilha de dispositivos, ele é responsável por restaurar o dispositivo ao estado operacional quando o IRP for concluído. Embora drivers inferiores já possam ter a potência aplicada fisicamente ao dispositivo, o proprietário da política deve chamar PoRequestPowerIrp para enviar uma solicitação IRP_MN_SET_POWER para o estado de energia do dispositivo D0. Somente depois que todos os drivers na pilha de dispositivos tiverem processado esse IRP de energização, o dispositivo será retornado ao estado operacional.