Compartilhar via


IRP_MN_POWER_SEQUENCE

Esse IRP retorna os valores de sequência de energia de um dispositivo.

Código principal

IRP_MJ_POWER

Quando enviado

Um driver envia esse IRP como uma otimização para determinar se o dispositivo realmente inseriu um estado de energia específico. O suporte para esse IRP é opcional.

Para enviar esse IRP, um driver deve chamar IoAllocateIrp para alocar o IRP, especificando o código IRP principal IRP_MJ_POWER e o código IRP secundário IRP_MN_POWER_SEQUENCE. Em seguida, o driver deve chamar IoCallDriver (Windows Vista) ou PoCallDriver (Windows Server 2003, Windows XP e Windows 2000) para passar o IRP para o próximo driver inferior. O power manager não pode enviar esse IRP.

Os remetentes desse IRP devem estar em execução em IRQL <= DISPATCH_LEVEL.

Parâmetros de Entrada

Nenhum.

Parâmetros de saída

Parameters.PowerSequence aponta para uma estrutura POWER_SEQUENCE com os seguintes membros:

SequenceD1
Número de vezes que o dispositivo esteve no estado de energia D1 ou inferior.

SequenceD2
Número de vezes que o dispositivo esteve no estado de energia D2 ou inferior.

SequenceD3
Número de vezes que o dispositivo esteve no estado de energia D3.

Os valores de sequência acompanham o número mínimo de vezes que um dispositivo esteve no estado de energia correspondente ou em um estado de energia inferior.

O driver de barramento incrementa os valores em SequenceD1, SequenceD2 e SequenceD3 pelo menos cada vez que o dispositivo entra no estado de energia correspondente ou em um estado de energia inferior.

Bloco de Status de E/S

Um driver define Irp-IoStatus.Status> como STATUS_SUCCESS para indicar que ele retornou as informações solicitadas ou para STATUS_NOT_IMPLEMENTED para indicar que ele não dá suporte a esse IRP.

Operação

Esse IRP retorna os valores de sequência de energia de um dispositivo. Opcionalmente, os motoristas de barramento podem lidar com isso; drivers de função e filtro podem, opcionalmente, enviá-lo.

Para um dispositivo que leva muito tempo para alterar o estado, esse IRP fornece uma otimização útil. Sempre que o dispositivo altera seu estado de energia, seu driver de barramento incrementa o valor de sequência para esse estado de energia. O driver do barramento inicializa os valores de sequência no momento da inicialização e os incrementa continuamente posteriormente; eles não precisam ser redefinidos para zero.

Um proprietário de política de dispositivo pode enviar esse IRP uma vez para obter os valores de sequência antes de desligar o dispositivo e, mais uma vez, obter novos valores ao restaurar a energia para o dispositivo. Comparando os dois conjuntos de valores, o driver pode determinar se o dispositivo realmente inseriu o estado de menor potência. Se o dispositivo não perder energia, o driver poderá evitar uma reinicialização demorada quando o dispositivo retornar ao estado D0.

Por exemplo, se o dispositivo demorar muito para restaurar a energia ao atingir o estado D2, o driver poderá armazenar o valor SequenceD2 antes de definir o estado do dispositivo como D2 ou inferior. Posteriormente, quando a energia está sendo restaurada para o dispositivo, o driver pode comparar o novo valor SequenceD2 com seu valor armazenado para determinar se o estado do dispositivo realmente caiu abaixo de D2. Se os valores corresponderem, o dispositivo não inseriu o estado de energia D2 ou um estado inferior e o driver poderá evitar a reinicialização do dispositivo.

Requisitos

parâmetro

Wdm.h (inclua Wdm.h, Ntddk.h ou Ntifs.h)