IAdapterPowerManagement ::QueryDeviceCapabilities, méthode (portcls.h)
La méthode QueryDeviceCapabilities
est appelée par PortCls en réponse à un IRP Plug-and-Play IRP_MN_QUERY_CAPABILITIES.
Syntaxe
NTSTATUS QueryDeviceCapabilities(
[in] PDEVICE_CAPABILITIES PowerDeviceCaps
);
Paramètres
[in] PowerDeviceCaps
Pointeur vers une structure DEVICE_CAPABILITIES spécifiant les fonctionnalités de l’appareil
Valeur de retour
QueryDeviceCapabilities
retourne STATUS_SUCCESS si l’appel a réussi. Sinon, la méthode retourne un code d’erreur approprié.
Remarques
Cette méthode est appelée au démarrage du pilote pour obtenir les fonctionnalités de l’appareil. La méthode passe au pilote d’adaptateur une structure de fonctionnalités qui définit les mappages entre les états d’alimentation du système et les états d’alimentation de l’appareil. PortCls écrit les valeurs par défaut de ces mappages dans la structure avant d’appeler la méthode. Pendant l’appel, le pilote de l’adaptateur a la possibilité de modifier les mappages, si nécessaire.
En règle générale, le pilote de l’adaptateur ne doit pas modifier ces paramètres. Si le pilote de l’adaptateur doit remplacer les valeurs par défaut, il peut modifier les mappages en un état d’alimentation d’appareil plus profond (moins alimenté), mais pas à un état d’alimentation d’appareil plus faible (plus alimenté). Par exemple, les mappages pour S1 (PowerSystemSleeping1) peuvent être modifiés de D1 à D3, mais pas en D0.
Pour remplir la structure powerDeviceCaps de pour un appareil, le pilote de l’adaptateur doit appeler PcRegisterAdapterPowerManagement pour inscrire l’interface IAdapterPowerManagement au démarrage de l’appareil. Le système d’exploitation interroge les appareils avant d’appeler la routine de démarrage de l’appareil du pilote d’adaptateur.
Pour modifier les mappages entre les états d’alimentation du système et les états d’alimentation de l’appareil, le pilote de l’adaptateur modifie les valeurs du tableau DeviceState dans la structure PowerDeviceCaps. Ces mappages ne doivent être modifiés que si nécessaire. L’exemple de code suivant montre comment mapper des mappages D1 à D3 :
for (i=ULONG(PowerSystemWorking); i<=ULONG(PowerSystemShutdown); i++)
{
if (PowerDeviceCaps->DeviceState[i] == PowerDeviceD1)
{
PowerDeviceCaps->DeviceState[i] = PowerDeviceD3;
}
}
Le code de la méthode QueryDeviceCapabilities
doit résider dans la mémoire paginée.
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Universel |
d’en-tête | portcls.h (include Portcls.h) |