Compartir a través de


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 su estado de trabajo (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 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 de dispositivo no válido.
  • El miembro IdleCaps de la estructura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS indica que el dispositivo puede reactivarse, pero el controlador de bus indica que el dispositivo no puede reactivarse.
  • 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 la máquina produce un error en esta comprobación, WdfDeviceAssignS0IdleSettings devuelve STATUS_POWER_STATE_INVALID, y el dispositivo permanece en su estado de alimentación completo en (D0) 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 de .

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

Observaciones

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 idleTimeoutType miembro 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 la rutina de devolución de llamada del controlador que registró.

Para obtener más información, consulte compatibilidad con elde apagado inactivo.

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 Valor
de la plataforma de destino de Universal
versión mínima de KMDF 1.0
versión mínima de UMDF 2.0
encabezado de wdfdevice.h (incluya Wdf.h)
biblioteca de 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