Função PoRegisterDeviceForIdleDetection (ntifs.h)

A rotina PoRegisterDeviceForIdleDetection permite ou cancela a detecção ociosa e define valores de tempo limite ociosos 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 objeto de dispositivo físico (PDO) 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 a 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 para 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 IRP_MN_SET_POWER quando ConservationIdleTime ou PerformanceIdleTime tiver sido atendido. Os valores possíveis são os valores DEVICE_POWER_STATE .

Valor retornado

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 ocioso 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 de tempo limite ociosos iniciais
  • Para alterar os valores de tempo limite ociosos para um dispositivo
  • Para desabilitar a detecção ociosa para um dispositivo
Depois de habilitar um dispositivo para detecção ociosa, um driver chama [PoSetDeviceBusy](.. /wdm/nf-wdm-posetdevicebusy.md) sempre que o dispositivo estiver 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, em seguida, passa o IRP para o driver inferior seguinte. Quando o IRP atinge o motorista do ônibus, esse motorista 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 a 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

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

Confira também

IRP

IRP_MN_SET_POWER

PoSetDeviceBusy