Função WdfDeviceAssignS0IdleSettings (wdfdevice.h)

[Aplica-se a KMDF e UMDF]

O método WdfDeviceAssignS0IdleSettings fornece informações fornecidas pelo driver que a estrutura usa quando um dispositivo está ocioso e o sistema está em seu estado de trabalho (S0).

Sintaxe

NTSTATUS WdfDeviceAssignS0IdleSettings(
  [in] WDFDEVICE                              Device,
  [in] PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
);

Parâmetros

[in] Device

Um identificador para um objeto de dispositivo de estrutura.

[in] Settings

Um ponteiro para uma estrutura de WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS fornecida pelo chamador.

Retornar valor

Se a operação for bem-sucedida, WdfDeviceAssignS0IdleSettings retornará STATUS_SUCCESS. Os valores de retorno adicionais incluem:

Código de retorno Descrição
STATUS_INVALID_DEVICE_REQUEST
O driver de chamada não é o proprietário da política de energia do dispositivo.
STATUS_INVALID_PARAMETER
Um valor configurações inválido é detectado.
STATUS_INFO_LENGTH_MISMATCH
O tamanho da estrutura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS está incorreto.
STATUS_POWER_STATE_INVALID
Esse valor será retornado se ocorrer um dos seguintes procedimentos:
  • A estrutura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS contém um estado de energia de dispositivo inválido.
  • O membro IdleCaps da estrutura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS indica que o dispositivo pode ativar a si mesmo, mas o driver de barramento indica que o dispositivo não pode se ativar.
  • A partir do KMDF versão 1.11 em execução no Windows 8, a estrutura verifica se o firmware do sistema pode lidar com um sinal de ativação enquanto o sistema está totalmente no estado de energia (S0). Se o computador falhar neste marcar, WdfDeviceAssignS0IdleSettings retornará STATUS_POWER_STATE_INVALID e o dispositivo permanecerá em seu estado de energia totalmente ativado (D0), desde que o sistema permaneça em S0.

    Nesse caso, o driver não deve retornar um erro status valor de EvtDriverDeviceAdd ou qualquer outro retorno de chamada de runtime. No máximo, o driver pode registrar um erro indicando que o dispositivo consumirá mais energia do que normalmente consumiria.

 

O método pode retornar outros valores NTSTATUS.

Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.

Comentários

Se o driver definir o membro IdleTimeoutType de WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS como SystemManagedIdleTimeout ou SystemManagedIdleTimeoutWithHint, ele deverá chamar WdfDeviceAssignS0IdleSettings antes de retornar de EvtDeviceD0Entry. Normalmente, um driver primeiro chama WdfDeviceAssignS0IdleSettings de EvtDriverDeviceAdd.

Chamadas adicionais para WdfDeviceAssignS0IdleSettings podem ser feitas a qualquer momento. No entanto, depois que o driver define o valor do membro IdleTimeoutType em sua primeira chamada para WdfDeviceAssignS0IdleSettings, ele não deve alterar esse valor em chamadas posteriores para esse método.

Se o driver se registrar para notificações assíncronas no EvtDriverDeviceAdd (por exemplo, chamando PoRegisterPowerSettingCallback ou IoRegisterPlugPlayNotification), o driver não deverá chamar WdfDeviceAssignS0IdleSettings de dentro da rotina de retorno de chamada do driver que ele registrou.

Para obter mais informações, consulte Suporte à energia ociosa.

Exemplos

O exemplo de código a seguir inicializa uma estrutura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , define um valor de tempo limite ocioso de 10 segundos e chama WdfDeviceAssignS0IdleSettings.

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS  idleSettings;
NTSTATUS  status = STATUS_SUCCESS;

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(
                                           &idleSettings,
                                           IdleCanWakeFromS0
                                           );
idleSettings.IdleTimeout = 10000;

status = WdfDeviceAssignS0IdleSettings(
                                       device,
                                       &idleSettings
                                       );
if (!NT_SUCCESS(status)) {
    return status;
}

Requisitos

Requisito Valor
Plataforma de Destino Universal
Versão mínima do KMDF 1.0
Versão mínima do UMDF 2,0
Cabeçalho wdfdevice.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
Regras de conformidade da DDI DriverCreate(kmdf), FDOPowerPolicyOwnerAPI(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NonFDONotPowerPolicyOwnerAPI(kmdf)

Confira também

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS

WdfDeviceAssignSxWakeSettings