IWDFDevice2 ::StopIdle, méthode (wudfddi.h)
[Avertissement : UMDF 2 est la dernière version de UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide de UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et il existe une prise en charge limitée de UMDF 1 sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2. Pour plus d’informations, consultez Bien démarrer avec UMDF.]
La méthode StopIdle informe le framework 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 retourne. Si TRUE, elle ne retourne qu’après que l’appareil spécifié entre dans l’état d’alimentation de l’appareil D0. Si FALSE, la méthode retourne immédiatement.
Valeur de retour
StopIdle retourne S_OK si l’opération réussit. Sinon, la méthode peut retourner l’une des valeurs suivantes :
Retourner le code | Description |
---|---|
|
Le pilote appelant n’est pas le propriétaire de la stratégie d’alimentation de l’appareil. |
|
L’appareil revenait déjà à son état de fonctionnement. |
|
Une défaillance de l’appareil s’est produite et l’appareil ne peut pas entrer 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 alimentation lorsqu’il devient inactif, votre pilote doit parfois appeler StopIdle pour ramener l’appareil à son état de fonctionnement (D0) ou pour l’empêcher d’entrer dans un état de faible alimentation.
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’appareil. De plus, votre pilote n’a pas besoin d’appeler StopIdle lorsqu’un appareil est inactif et qu’il détecte un signal de veille. Dans ces 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 requêtes 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 que le pilote a reçue 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 StopIdle force l’appareil à son état de travail (D0), si le système est dans son état de travail (S0). L’appareil reste dans son état de fonctionnement jusqu’à ce que le pilote appelle IWDFDevice2 ::ResumeIdle, auquel point le framework peut placer l’appareil dans un état à faible alimentation s’il reste inactif.
N’appelez pas StopIdle avant que l’infrastructure n’ait appelé la méthode de rappel IPnpCallback ::OnD0Entry méthode de rappel 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 à faible alimentation lorsqu’un pilote appelle StopIdle avec le paramètre WaitForD0 défini sur TRUE, la fonction ne retourne pas tant que le système ne retourne pas à son état S0.
Chaque appel à StopIdle doit finalement être suivi d’un appel à ResumeIdle, ou bien l’appareil ne revient jamais à un état de faible alimentation s’il devient à nouveau inactif. Les appels à stopIdle peuvent être imbriqués. Par conséquent, 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 basés sur 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 de l’appareil D0.
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);
Exigences
Exigence | Valeur |
---|---|
fin du support | Indisponible dans UMDF 2.0 et versions ultérieures. |
plateforme cible | Bureau |
version minimale de UMDF | 1.9 |
d’en-tête | wudfddi.h (include Wudfddi.h) |
DLL | WUDFx.dll |