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 |
---|---|
|
El controlador de llamada no es el propietario de la directiva de energía del dispositivo. |
|
Se detecta un valor de configuración no válido. |
|
El tamaño de la estructura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS es incorrecto. |
|
Este valor se devuelve si se produce una de las siguientes acciones:
|
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) |