Método IWDFDevice2::AssignS0IdleSettings (wudfddi.h)
[Advertencia: UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los controladores UMDF nuevos deben escribirse con UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2. Para obtener más información, consulta Introducción con UMDF.
El método AssignS0IdleSettings 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
HRESULT AssignS0IdleSettings(
[in] WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps,
[in] DEVICE_POWER_STATE DxState,
[in] ULONG IdleTimeout,
[in] WDF_POWER_POLICY_S0_IDLE_USER_CONTROL UserControlOfIdleSettings,
[in] WDF_TRI_STATE Enabled
);
Parámetros
[in] IdleCaps
Enumerador de tipo WDF_POWER_POLICY_S0_IDLE_CAPABILITIES que identifica la capacidad del dispositivo de reactivarse después de establecerse en un estado de bajo consumo, mientras que el sistema permanece en su estado de funcionamiento (S0).
[in] DxState
Enumerador con tipo DEVICE_POWER_STATE que identifica el estado de energía de dispositivo bajo que el dispositivo entrará después de que finalice el período de tiempo de espera de inactividad. DEVICE_POWER_STATE valores se definen en wdm.h.
[in] IdleTimeout
La cantidad de tiempo, en milisegundos, que el dispositivo permanecerá inactivo antes de que el marco lo coloque en el estado de baja potencia proporcionado por DxState. Para usar el valor de tiempo de espera de inactividad predeterminado del marco, especifique IdleTimeoutDefaultValue Para obtener más información, vea la sección Comentarios.
[in] UserControlOfIdleSettings
Enumerador con tipo WDF_POWER_POLICY_S0_IDLE_USER_CONTROL que indica si los usuarios tienen la capacidad de modificar la configuración inactiva del dispositivo.
[in] Enabled
Enumerador de tipo WDF_TRI_STATE que indica si el dispositivo se apagará si permanece inactivo y mientras la alimentación del sistema está en S0. Este miembro puede tener uno de los siguientes valores:
WdfTrue : el apagado está habilitado.
WdfFalse : el apagado está deshabilitado.
WdfUseDefault : el apagado se habilita inicialmente de forma predeterminada; pero si el parámetro UserControlOfIdleSettings se establece en IdleAllowUserControl, la configuración del usuario o el archivo INF del controlador invalida el valor inicial.
Si el apagado está habilitado, el dispositivo tiene una funcionalidad de reactivación y el valor de tiempo de espera de inactividad expira, el marco llama a la función de devolución de llamada IPowerPolicyCallbackWakeFromS0::OnArmWakeFromS0 antes de que el dispositivo entre en un estado de baja potencia.
Valor devuelto
AssignS0IdleSettings devuelve S_OK si la operación se realiza correctamente. De lo contrario, el método podría devolver uno de los siguientes valores:
Código devuelto | Descripción |
---|---|
|
El autor de la llamada especificó un valor no válido para un parámetro de entrada. |
|
El controlador de llamada no es el propietario de la directiva de energía del dispositivo. |
|
El parámetro DxState especifica un estado de alimentación del dispositivo no válido o el parámetro IdleCaps indica que el dispositivo puede reactivarse a sí mismo, pero el controlador de bus indica que el dispositivo no se puede reactivar. |
Este método podría devolver uno de los otros valores que contiene Winerror.h.
Comentarios
La primera vez que un controlador llama a AssignS0IdleSettings, se producen las siguientes acciones:
- El marco almacena los valores de todos los parámetros.
- Si el parámetro UserControlOfIdleSettings se establece en IdleAllowUserControl y si el parámetro Enabled está establecido en WdfUseDefault, el marco lee el registro para averiguar si el usuario ha habilitado el encendido del dispositivo cuando está inactivo.
- Si el controlador ha especificado alguna vez IdleCanWakeFromS0 para el valor del parámetro IdleCaps en una llamada anterior a AssignS0IdleSettings, no podrá cambiar posteriormente ese valor a IdleUsbSelectiveSuspend.
- Si el controlador ha especificado alguna vez IdleUsbSelectiveSuspend para el valor del parámetro IdleCaps en una llamada anterior a AssignS0IdleSettings, no podrá cambiar posteriormente ese valor a IdleCanWakeFromS0.
Las reglas siguientes se aplican al valor especificado para el parámetro DxState :
- El valor no puede ser PowerDeviceD0.
- En el caso de los dispositivos USB, el valor no puede ser PowerDeviceD0 o PowerDeviceD3.
- Si especifica DevicePowerMaximum, el marco usa el valor que el controlador en modo kernel para el bus del dispositivo proporcionado en el miembro DeviceWake de su estructura WDF_DEVICE_POWER_CAPABILITIES .
- Si el valor del parámetro IdleCaps es IdleCanWakeFromS0 o IdleUsbSelectiveSuspend, no puede especificar un estado de alimentación del dispositivo inferior al estado de alimentación del dispositivo en el miembro DeviceWake de la estructura WDF_DEVICE_POWER_CAPABILITIES del controlador de bus en modo kernel. (En otras palabras, si el valor deviceWake del controlador de bus es PowerDeviceD2, el valor dxState del controlador de función no puede ser PowerDeviceD3).
Para obtener información sobre las entradas del Registro que controlan las funcionalidades inactivas de un dispositivo, consulte User Control of Device Idle and Wake Behavior in UMDF (Control de usuario del comportamiento inactivo del dispositivo y reactivación en UMDF).
Para obtener más información sobre cómo admitir las funcionalidades inactivas de un dispositivo, consulte Compatibilidad con Power-Down inactivos en controladores basados en UMDF.
Ejemplos
El ejemplo de código siguiente se basa en la versión UMDF del ejemplo de tostadora. En el ejemplo se obtiene la interfaz IWDFDevice2 y, a continuación, se llama a AssignS0IdleSettings.
IWDFDevice2 *pIWDFDevice2 = NULL;
HRESULT hr;
//
// Get a pointer to the IWDFDevice2 interface.
//
hr = pIWDFDevice->QueryInterface(__uuidof(IWDFDevice2),
(void**) &pIWDFDevice2);
if (SUCCEEDED(hr))
{
//
// The toaster device is virtual, so we tell the framework that the
// device cannot wake if it sleeps while the system is in S0. The device
// can return to D0 only when the driver stack receives an I/O request.
//
hr = pIWDFDevice2->AssignS0IdleSettings(IdleCannotWakeFromS0,
PowerDeviceD3,
IDLEWAKE_TIMEOUT_MSEC,
IdleAllowUserControl,
WdfTrue);
}
...
SAFE_RELEASE(pIWDFDevice2);
Requisitos
Requisito | Value |
---|---|
Finalización del soporte técnico | No disponible en UMDF 2.0 y versiones posteriores. |
Plataforma de destino | Escritorio |
Versión mínima de UMDF | 1,9 |
Encabezado | wudfddi.h (incluya Wudfddi.h) |
Archivo DLL | WUDFx.dll |