Partager via


WdfDeviceAssignS0IdleSettings, fonction (wdfdevice.h)

[S’applique à KMDF et UMDF]

La méthode WdfDeviceAssignS0IdleSettings fournit des informations fournies par le pilote que l’infrastructure utilise lorsqu’un appareil est inactif et que le système est dans son état de fonctionnement (S0).

Syntaxe

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

Paramètres

[in] Device

Handle vers un objet d’appareil framework.

[in] Settings

Pointeur vers une structure WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS fournie par l’appelant.

Valeur de retour

Si l’opération réussit, WdfDeviceAssignS0IdleSettings retourne STATUS_SUCCESS. Les valeurs de retour supplémentaires sont les suivantes :

Retourner le code Description
STATUS_INVALID_DEVICE_REQUEST
Le pilote appelant n’est pas le propriétaire de la stratégie d’alimentation de l’appareil.
STATUS_INVALID_PARAMETER
Une valeur de Settings non valide est détectée.
STATUS_INFO_LENGTH_MISMATCH
La taille de la structure WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS est incorrecte.
STATUS_POWER_STATE_INVALID
Cette valeur est retournée si l’une des opérations suivantes se produit :
  • La structure WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS contient un état d’alimentation d’appareil non valide.
  • Le IdleCaps membre de la structure WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS indique que l’appareil peut se réveiller lui-même, mais que le pilote de bus indique que l’appareil ne peut pas se réveiller lui-même.
  • À compter de KMDF version 1.11 s’exécutant sur Windows 8, l’infrastructure vérifie si le microprogramme du système peut gérer un signal de veille pendant que le système est entièrement à son état d’alimentation (S0). Si la machine échoue à cette vérification, WdfDeviceAssignS0IdleSettings retourne STATUS_POWER_STATE_INVALID, et l’appareil reste dans son état d’alimentation complet (D0) tant que le système reste dans S0.

    Dans ce cas, le pilote ne doit pas retourner une valeur d’état d’erreur de EvtDriverDeviceAdd ou tout autre rappel d’exécution. Au maximum, le pilote peut consigner une erreur indiquant que l’appareil consommera plus de puissance que ce qui le serait normalement.

 

La méthode peut retourner d’autres valeurs NTSTATUS .

Une vérification de bogue se produit si le pilote fournit un handle d’objet non valide.

Remarques

Si le pilote définit le membre IdleTimeoutType de WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS sur SystemManagedIdleTimeout ou SystemManagedIdleTimeoutWithHint, il doit appeler WdfDeviceAssignS0IdleSettings avant de revenir de EvtDeviceD0Entry. En règle générale, un pilote appelle WdfDeviceAssignS0IdleSettings à partir de EvtDriverDeviceAdd.

Des appels supplémentaires à WdfDeviceAssignS0IdleSettings peuvent être effectués à tout moment. Toutefois, après que le pilote a définit la valeur du membre IdleTimeoutType dans son premier appel à WdfDeviceAssignS0IdleSettings, il ne doit pas modifier cette valeur dans les appels ultérieurs à cette méthode.

Si le pilote s’inscrit pour les notifications asynchrones dans EvtDriverDeviceAdd (par exemple, en appelant PoRegisterPowerSettingCallback ou IoRegisterPlugPlayNotification), le pilote ne doit pas appeler WdfDeviceAssignS0IdleSettings à partir de la routine de rappel du pilote qu’il a inscrite.

Pour plus d’informations, consultez Prise en charge de l'de mise hors tension inactive.

Exemples

L’exemple de code suivant initialise une structure WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS, définit une valeur de délai d’inactivité de 10 secondes et appelle 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;
}

Exigences

Exigence Valeur
plateforme cible Universel
version minimale de KMDF 1.0
version minimale de UMDF 2.0
d’en-tête wdfdevice.h (include Wdf.h)
bibliothèque Wdf01000.sys (KMDF) ; WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
règles de conformité DDI DriverCreate(kmdf), FDOPowerPolicyOwnerAPI(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NonFDONotPowerPolicyOwnerAPI(kmdf)

Voir aussi

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS

WdfDeviceAssignSxWakeSettings