Função PoRegisterDeviceForIdleDetection (wdm.h)

A rotina PoRegisterDeviceForIdleDetection habilita ou cancela a detecção ociosa e define valores de tempo limite ocioso para um dispositivo.

Sintaxe

PULONG PoRegisterDeviceForIdleDetection(
  [in] PDEVICE_OBJECT     DeviceObject,
  [in] ULONG              ConservationIdleTime,
  [in] ULONG              PerformanceIdleTime,
  [in] DEVICE_POWER_STATE State
);

Parâmetros

[in] DeviceObject

Um ponteiro para o DEVICE_OBJECT criado pelo driver para o dispositivo. No Windows 2000 e em sistemas posteriores, esse parâmetro pode apontar para um PDO (objeto de dispositivo físico) ou um FDO (objeto de dispositivo funcional). No Windows 98/Me, esse parâmetro deve apontar para o PDO do dispositivo subjacente.

[in] ConservationIdleTime

Define o valor de tempo limite (em segundos) a ser aplicado quando a política de energia do sistema otimiza para conservação de energia. Especifique zero para desabilitar a detecção ociosa quando a política de conservação estiver em vigor.

[in] PerformanceIdleTime

Define o valor de tempo limite (em segundos) a ser aplicado quando a política de energia do sistema otimiza o desempenho. Especifique zero para desabilitar a detecção ociosa quando a política de desempenho estiver em vigor.

[in] State

Especifica o estado de energia do dispositivo a ser solicitado em uma solicitação de IRP_MN_SET_POWER quando ConservationIdleTime ou PerformanceIdleTime tiver sido atendido. Os valores possíveis são os valores DEVICE_POWER_STATE .

Retornar valor

PoRegisterDeviceForIdleDetection retorna um ponteiro para o contador ocioso para indicar que a detecção ociosa foi habilitada. Ele retorna NULL para indicar que a detecção ociosa foi desabilitada, que um contador ocioso não pôde ser alocado ou que um ou ambos os valores de tempo limite eram inválidos.

Comentários

PoRegisterDeviceForIdleDetection permite que os drivers usem o mecanismo de detecção ociosa fornecido pelo power manager. Os drivers chamam PoRegisterDeviceForIdleDetection por qualquer um dos seguintes motivos:

  • Para habilitar a detecção ociosa para o dispositivo e definir valores iniciais de tempo limite ocioso
  • Para alterar os valores de tempo limite ocioso para um dispositivo
  • Para desabilitar a detecção ociosa de um dispositivo
Depois de habilitar um dispositivo para detecção ociosa, um driver chama [PoSetDeviceBusy](./nf-wdm-posetdevicebusy.md) sempre que o dispositivo está em uso, passando o ponteiro ocioso não NULL retornado por PoRegisterDeviceForIdleDetection. Chamar PoSetDeviceBusy reinicia a contagem regressiva ociosa. Observe que um driver não deve passar um ponteiro NULL para PoSetDeviceBusy.

Sempre que o dispositivo satisfaz o valor de tempo limite ocioso atual, o power manager envia uma solicitação IRP_MN_SET_POWER para a parte superior da pilha do dispositivo, especificando o estado de energia do dispositivo. Em resposta ao IRP, cada driver executa todas as tarefas específicas do dispositivo necessárias antes da transição do estado de energia e passa o IRP para o driver mais baixo. Quando o IRP atinge o driver de ônibus, esse driver coloca o dispositivo no estado de energia inferior solicitado e conclui o IRP.

PoRegisterDeviceForIdleDetection define valores de tempo limite para conservação e desempenho. O valor ConservationIdleTime se aplica quando a política de energia do sistema otimiza para conservação; o valor PerformanceIdleTime se aplica quando a política de energia do sistema otimiza o desempenho. Normalmente, a política aplicável depende da fonte de energia: ao executar com energia AC, o sistema otimiza o desempenho e, ao executar uma bateria, o sistema otimiza para conservação.

Determinados dispositivos podem especificar valores de tempo limite de -1 para usar os tempos limite de política de energia padrão para sua classe de dispositivo. Os valores de tempo limite padrão fornecem uma melhor integração do sistema para classes de dispositivo padrão com suporte. Atualmente, o WDM dá suporte a esse recurso para dispositivos do tipo FILE_DEVICE_DISK e FILE_DEVICE_MASS_STORAGE. PoRegisterDeviceForIdleDetection retornará NULL se -1 for especificado para um dispositivo de um tipo sem suporte. (Para obter informações sobre tipos de dispositivo, consulte Especificando tipos de dispositivo.)

Somente uma detecção ociosa pode ser definida por dispositivo. Chamadas subsequentes para PoRegisterDeviceForIdleDetection alteram os valores de detecção ociosa.

Se ConservationIdleTime e PerformanceIdleTime forem zero, essa rotina cancelará toda a detecção ociosa do dispositivo e retornará NULL.

PoRegisterDeviceForIdleDetection pode liberar um driver da necessidade de executar sua própria detecção ociosa. No entanto, os drivers também podem implementar sua própria detecção ociosa.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Confira também

IRP

IRP_MN_SET_POWER

PoSetDeviceBusy