Partager via


Méthode IAdapterPowerManagement ::QueryDeviceCapabilities (portcls.h)

La QueryDeviceCapabilities méthode est appelée par PortCls en réponse à une Plug-and-Play IRP_MN_QUERY_CAPABILITIES IRP.

Syntaxe

NTSTATUS QueryDeviceCapabilities(
  [in] PDEVICE_CAPABILITIES PowerDeviceCaps
);

Paramètres

[in] PowerDeviceCaps

Pointeur vers une structure de DEVICE_CAPABILITIES spécifiant les fonctionnalités de l’appareil

Valeur retournée

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 transmet 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 à un état d’alimentation plus profond (moins alimenté) de l’appareil, mais pas à un état d’alimentation 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 d’un appareil, le pilote de l’adaptateur doit appeler PcRegisterAdapterPowerManagement pour inscrire l’interface IAdapterPowerManagement au moment du démarrage de l’appareil. Le système d’exploitation interroge les appareils avant d’appeler la routine de démarrage du périphérique 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 QueryDeviceCapabilities méthode doit résider dans la mémoire paginée.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête portcls.h (include Portcls.h)

Voir aussi

DEVICE_CAPABILITIES

IAdapterPowerManagement

IRP_MN_QUERY_CAPABILITIES

PcRegisterAdapterPowerManagement