Partager via


Méthode IWDFDevice2 ::StopIdle (wudfddi.h)

[Avertissement : UMDF 2 est la dernière version d’UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide d’UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et la prise en charge d’UMDF 1 est limitée sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2. Pour plus d’informations, consultez Prise en main avec UMDF.]

La méthode StopIdle informe l’infrastructure que l’appareil doit être placé dans son état d’alimentation opérationnel (D0).

Syntaxe

HRESULT StopIdle(
  [in] BOOL WaitForD0
);

Paramètres

[in] WaitForD0

Valeur booléenne qui indique quand StopIdle sera retourné. Si la valeur est TRUE, elle retourne uniquement une fois que l’appareil spécifié est entré dans l’état d’alimentation de l’appareil D0. Si la valeur est FALSE, la méthode retourne immédiatement.

Valeur retournée

StopIdle retourne S_OK si l’opération réussit. Sinon, la méthode peut retourner l’une des valeurs suivantes :

Code de retour Description
HRESULT_FROM_NT(STATUS_INVALID_DEVICE_REQUEST)
Le pilote appelant n’est pas le propriétaire de la stratégie d’alimentation de l’appareil.
HRESULT_FROM_NT(STATUS_PENDING)
L’appareil revenait déjà à son état de fonctionnement.
HRESULT_FROM_NT(STATUS_POWER_STATE_INVALID)
Une défaillance de l’appareil s’est produite et l’appareil ne peut pas entrer dans son état d’alimentation D0.
 

Cette méthode peut retourner l’une des autres valeurs que Winerror.h contient.

Remarques

Si votre appareil peut entrer dans un état de faible consommation lorsqu’il devient inactif, votre pilote peut être amené à appeler occasionnellement StopIdle pour ramener l’appareil à son état de fonctionnement (D0) ou pour l’empêcher de passer à un état de faible consommation.

Votre pilote n’a pas besoin d’appeler StopIdle lorsqu’un appareil est inactif et que l’infrastructure place une demande d’E/S dans la file d’attente d’E/S gérée par l’alimentation de l’appareil. En outre, votre pilote n’a pas besoin d’appeler StopIdle lorsqu’un appareil est inactif et qu’il détecte un signal de sortie de veille. Dans les deux cas, l’infrastructure demande au pilote de bus de restaurer l’état d’alimentation de l’appareil sur D0.

Bien que les pilotes n’aient généralement pas besoin d’appeler StopIdle lors de la gestion des demandes d’E/S qu’ils obtiennent à partir d’une file d’attente d’E/S gérée par l’alimentation, l’appel est autorisé. Toutefois, les pilotes ne doivent pas définir le paramètre WaitForD0 sur TRUE lors de la gestion des demandes d’E/S à partir d’une file d’attente d’E/S gérée par l’alimentation.

Votre pilote doit appeler StopIdle s’il doit accéder à l’appareil en raison d’une demande reçue par le pilote en dehors d’une file d’attente d’E/S gérée par l’alimentation. Par exemple, votre pilote peut prendre en charge une interface définie par le pilote ou une requête WMI qui nécessite l’accès à l’appareil. Dans ce cas, vous devez vous assurer que l’appareil est dans son état de fonctionnement avant que le pilote accède à l’appareil, et que l’appareil reste dans son état de fonctionnement jusqu’à ce que le pilote ait terminé d’accéder à l’appareil.

L’appel de StopIdle force l’appareil à passer à son état de fonctionnement (D0), si le système est dans son état de fonctionnement (S0). L’appareil reste dans son état de fonctionnement jusqu’à ce que le pilote appelle IWDFDevice2 ::ResumeIdle. À ce stade, l’infrastructure peut placer l’appareil dans un état de faible consommation s’il reste inactif.

N’appelez pas StopIdle avant que l’infrastructure ait appelé la méthode de rappel IPnpCallback ::OnD0Entry du pilote pour la première fois.

Un appel à StopIdle peut restaurer un appareil inactif à son état de fonctionnement uniquement si le système est dans son état de fonctionnement (S0). Si le système entre dans un état de faible consommation lorsqu’un pilote appelle StopIdle avec le paramètre WaitForD0 défini sur TRUE, la fonction ne retourne pas tant que le système n’est pas revenu à son état S0.

Chaque appel à StopIdle doit finalement être suivi d’un appel à ResumeIdle, sinon l’appareil ne reviendra jamais à un état de faible consommation s’il redevient inactif. Les appels à StopIdle pouvant être imbriqués, le nombre d’appels à ResumeIdle doit être égal au nombre d’appels à StopIdle.

Pour plus d’informations sur StopIdle et ResumeIdle, consultez Prise en charge des Power-Down inactifs dans les pilotes UMDF.

Exemples

L’exemple de code suivant obtient l’interface IWDFDevice2 , puis appelle StopIdle. StopIdle retourne une fois que l’appareil entre dans l’état d’alimentation D0 de l’appareil.

    IWDFDevice2 *pIWDFDevice2 = NULL;
    HRESULT hr;

    //
    // Get a pointer to the IWDFDevice2 interface.
    //
    hr = pIWDFDevice->QueryInterface(__uuidof(IWDFDevice2),
                                     (void**) &pIWDFDevice2);
    if (SUCCEEDED(hr)) 
    {
        hr = pIWDFDevice2->StopIdle(TRUE);
    }
...
   SAFE_RELEASE(pIWDFDevice2);

Configuration requise

Condition requise Valeur
Fin de la prise en charge Non disponible dans UMDF 2.0 et versions ultérieures.
Plateforme cible Desktop (Expérience utilisateur)
Version UMDF minimale 1,9
En-tête wudfddi.h (inclure Wudfddi.h)
DLL WUDFx.dll

Voir aussi

IWDFDevice2

IWDFDevice2 ::ResumeIdle