Función WdfDeviceAssignS0IdleSettings (wdfdevice.h)

[Se aplica a KMDF y UMDF]

El método WdfDeviceAssignS0IdleSettings proporciona información proporcionada por el controlador que el marco usa cuando un dispositivo está inactivo y el sistema está en estado de funcionamiento (S0).

Sintaxis

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

Parámetros

[in] Device

Identificador de un objeto de dispositivo de marco.

[in] Settings

Puntero a una estructura de WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS proporcionada por el autor de la llamada.

Valor devuelto

Si la operación se realiza correctamente, WdfDeviceAssignS0IdleSettings devuelve STATUS_SUCCESS. Entre los valores devueltos adicionales se incluyen:

Código devuelto Descripción
STATUS_INVALID_DEVICE_REQUEST
El controlador de llamada no es el propietario de la directiva de energía del dispositivo.
STATUS_INVALID_PARAMETER
Se detecta un valor de configuración no válido.
STATUS_INFO_LENGTH_MISMATCH
El tamaño de la estructura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS es incorrecto.
STATUS_POWER_STATE_INVALID
Este valor se devuelve si se produce una de las siguientes acciones:
  • La estructura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS contiene un estado de alimentación del dispositivo no válido.
  • El miembro IdleCaps de la estructura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS indica que el dispositivo se puede reactivar, pero el controlador de bus indica que el dispositivo no se puede reactivar.
  • A partir de la versión 1.11 de KMDF que se ejecuta en Windows 8, el marco comprueba si el firmware del sistema puede controlar una señal de reactivación mientras el sistema está totalmente encendido (S0). Si se produce un error en esta comprobación en la máquina, WdfDeviceAssignS0IdleSettings devuelve STATUS_POWER_STATE_INVALID y el dispositivo permanece en su estado de alimentación (D0) completamente activado siempre y cuando el sistema permanezca en S0.

    En este caso, el controlador no debe devolver un valor de estado de error de EvtDriverDeviceAdd ni ninguna otra devolución de llamada en tiempo de ejecución. Como máximo, el controlador podría registrar un error que indica que el dispositivo consumirá más energía de la que normalmente lo haría.

 

El método podría devolver otros valores NTSTATUS.

Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.

Comentarios

Si el controlador establece el miembro IdleTimeoutType de WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS en SystemManagedIdleTimeout o SystemManagedIdleTimeoutWithHint, debe llamar a WdfDeviceAssignS0IdleSettings antes de volver de EvtDeviceD0Entry. Normalmente, un controlador llama primero a WdfDeviceAssignS0IdleSettings desde EvtDriverDeviceAdd.

Se pueden realizar llamadas adicionales a WdfDeviceAssignS0IdleSettings en cualquier momento. Sin embargo, después de que el controlador establezca el valor del miembro IdleTimeoutType en su primera llamada a WdfDeviceAssignS0IdleSettings, no debe cambiar este valor en llamadas posteriores a este método.

Si el controlador se registra para notificaciones asincrónicas en EvtDriverDeviceAdd (por ejemplo, llamando a PoRegisterPowerSettingCallback o IoRegisterPlugPlayNotification), el controlador no debe llamar posteriormente a WdfDeviceAssignS0IdleSettings desde dentro de la rutina de devolución de llamada del controlador que registró.

Para obtener más información, consulte Compatibilidad con la alimentación inactiva.

Ejemplos

En el ejemplo de código siguiente se inicializa una estructura de WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , se establece un valor de tiempo de espera de inactividad de 10 segundos y se llama a 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 Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Versión mínima de UMDF 2.0
Encabezado wdfdevice.h (incluir Wdf.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
Reglas de cumplimiento de DDI DriverCreate(kmdf), FDOPowerPolicyOwnerAPI(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NonFDONotPowerPolicyOwnerAPI(kmdf)

Consulte también

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS

WdfDeviceAssignSxWakeSettings