Partager via


structure DEVICE_CAPABILITIES (wdm.h)

Une structure DEVICE_CAPABILITIES décrit les fonctionnalités PnP et d’alimentation d’un appareil. Cette structure est retournée en réponse à un IRP IRP_MN_QUERY_CAPABILITIES .

Syntaxe

typedef struct _DEVICE_CAPABILITIES {
  USHORT             Size;
  USHORT             Version;
  ULONG              DeviceD1 : 1;
  ULONG              DeviceD2 : 1;
  ULONG              LockSupported : 1;
  ULONG              EjectSupported : 1;
  ULONG              Removable : 1;
  ULONG              DockDevice : 1;
  ULONG              UniqueID : 1;
  ULONG              SilentInstall : 1;
  ULONG              RawDeviceOK : 1;
  ULONG              SurpriseRemovalOK : 1;
  ULONG              WakeFromD0 : 1;
  ULONG              WakeFromD1 : 1;
  ULONG              WakeFromD2 : 1;
  ULONG              WakeFromD3 : 1;
  ULONG              HardwareDisabled : 1;
  ULONG              NonDynamic : 1;
  ULONG              WarmEjectSupported : 1;
  ULONG              NoDisplayInUI : 1;
  ULONG              Reserved1 : 1;
  ULONG              WakeFromInterrupt : 1;
  ULONG              SecureDevice : 1;
  ULONG              ChildOfVgaEnabledBridge : 1;
  ULONG              DecodeIoOnBoot : 1;
  ULONG              Reserved : 9;
  ULONG              Address;
  ULONG              UINumber;
  DEVICE_POWER_STATE DeviceState[POWER_SYSTEM_MAXIMUM];
  SYSTEM_POWER_STATE SystemWake;
  DEVICE_POWER_STATE DeviceWake;
  ULONG              D1Latency;
  ULONG              D2Latency;
  ULONG              D3Latency;
} DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;

Membres

Size

Spécifie la taille de la structure, en octets. Ce champ est défini par le composant qui envoie la requête IRP_MN_QUERY_CAPABILITIES .

Version

Spécifie la version de la structure, actuellement version 1. Ce champ est défini par le composant qui envoie la requête IRP_MN_QUERY_CAPABILITIES .

DeviceD1

Spécifie si le matériel de l’appareil prend en charge l’état d’alimentation D1. Les pilotes ne doivent pas modifier cette valeur.

DeviceD2

Spécifie si le matériel de l’appareil prend en charge l’état d’alimentation D2. Les pilotes ne doivent pas modifier cette valeur.

LockSupported

Spécifie si l’appareil prend en charge le verrouillage physique de l’appareil qui empêche l’éjection de l’appareil. Ce membre concerne l’éjection de l’appareil de son emplacement, plutôt que d’éjecter un morceau de support amovible de l’appareil.

EjectSupported

Spécifie si l’appareil prend en charge l’éjection d’appareil contrôlée par logiciel lorsque le système est à l’état PowerSystemWorking . Ce membre concerne l’éjection de l’appareil de son emplacement, plutôt que d’éjecter un morceau de support amovible de l’appareil.

Removable

Spécifie si l’appareil peut être supprimé dynamiquement de son parent immédiat. Si Amovible a la valeur TRUE, l’appareil n’appartient pas au même objet physique que son parent.

Par exemple, si Amovible a la valeur TRUE pour un périphérique composite USB à l’intérieur d’une imprimante multifonction, l’appareil composite n’appartient pas à l’objet physique de son parent immédiat, tel qu’un hub USB à l’intérieur d’un PC de notebook.

Dans la plupart des cas, le pilote de bus, et non le pilote de fonction, doit déterminer la valeur du paramètre Amovible de l’appareil. Pour les périphériques USB, le pilote du hub USB définit le paramètre Amovible . Il ne doit pas être modifié par le pilote de fonction.

Si Amovible a la valeur TRUE, l’appareil s’affiche dans le programme Débrancher ou éjecter le matériel , sauf si SurpriseRemovalOK est également défini sur TRUE.

DockDevice

Spécifie si l’appareil est un périphérique d’ancrage.

UniqueID

Spécifie si l’ID de instance de l’appareil est unique à l’échelle du système. Ce bit est clair si l’ID instance est unique uniquement dans l’étendue du bus. Pour plus d’informations, consultez Chaînes d’identification d’appareil.

SilentInstall

Spécifie si Gestionnaire de périphériques devez supprimer toutes les boîtes de dialogue d’installation, à l’exception des boîtes de dialogue obligatoires telles que « aucun pilote compatible trouvé ».

RawDeviceOK

Spécifie si le pilote du bus sous-jacent peut conduire l’appareil s’il n’existe aucun pilote de fonction (par exemple, les périphériques SCSI en mode pass-through). Ce mode d’opération est appelé mode brut.

SurpriseRemovalOK

Spécifie si le pilote de fonction de l’appareil peut gérer le cas où l’appareil est supprimé avant que Windows puisse lui envoyer des IRP_MN_QUERY_REMOVE_DEVICE . Si SurpriseRemovalOK a la valeur TRUE, l’appareil peut être supprimé en toute sécurité de son parent immédiat, quel que soit l’état dans lequel se trouve son pilote.

Par exemple, une souris USB standard ne conserve aucun état dans son matériel et peut donc être supprimée en toute sécurité à tout moment. Toutefois, un disque dur externe dont le pilote met en cache les écritures en mémoire ne peut pas être supprimé en toute sécurité sans laisser d’abord le pilote vider son cache sur le matériel.

Les pilotes pour les périphériques USB qui prennent en charge la suppression surprise doivent définir cette valeur sur TRUE uniquement lorsque l’IRP est transmis à la pile des pilotes.

WakeFromD0

Spécifie si l’appareil peut répondre à un signal de veille externe alors qu’il est à l’état D0. Les pilotes ne doivent pas modifier cette valeur.

WakeFromD1

Spécifie si l’appareil peut répondre à un signal de veille externe lorsqu’il est à l’état D1. Les pilotes ne doivent pas modifier cette valeur.

WakeFromD2

Spécifie si l’appareil peut répondre à un signal de veille externe lorsqu’il est à l’état D2. Les pilotes ne doivent pas modifier cette valeur.

WakeFromD3

Spécifie si l’appareil peut répondre à un signal de veille externe alors qu’il est à l’état D3. Les pilotes ne doivent pas modifier cette valeur.

HardwareDisabled

Lorsqu’il est défini, cet indicateur spécifie que le matériel de l’appareil est désactivé.

Le pilote de bus parent d’un appareil ou un pilote de filtre de bus définit cet indicateur lorsqu’un tel pilote détermine que le matériel de l’appareil est désactivé.

Le gestionnaire PnP envoie un IRP_MN_QUERY_CAPABILITIES IRP juste après l’énumération d’un appareil et un autre après le démarrage de l’appareil. Le gestionnaire PnP vérifie uniquement ce bit juste après l’énumération de l’appareil. Une fois l’appareil démarré, ce bit est ignoré.

NonDynamic

Réservé à un usage ultérieur.

WarmEjectSupported

Réservé à un usage ultérieur.

NoDisplayInUI

N’affichez pas l’appareil dans l’interface utilisateur. Si ce bit est défini, l’appareil n’est jamais affiché dans l’interface utilisateur, même si l’appareil est présent mais ne parvient pas à démarrer. Seuls les pilotes de bus et les pilotes de filtre de bus associés doivent définir ce bit. (Consultez également l’indicateur PNP_DEVICE_DONT_DISPLAY_IN_UI dans la structure PNP_DEVICE_STATE .)

Reserved1

Réservé pour le système.

WakeFromInterrupt

Indique si le pilote ou l’ACPI est responsable de la gestion de l’événement de veille. Si cette option est définie, le pilote est responsable de la gestion de l’événement de veille. ACPI arme l’appareil lorsqu’il reçoit un IRP IRP_MN_WAIT_WAKE, mais ne connecte pas l’interruption, termine l’IRP pour notifier la pile de l’appareil d’un événement de veille.

SecureDevice

Indique si l’appareil est un appareil sécurisé.

ChildOfVgaEnabledBridge

Pour un appareil VGA, indique si le pont parent a le bit de décodage VGA défini.

DecodeIoOnBoot

Indique si le décodage d’E/S de l’appareil est activé au démarrage.

Reserved

Réservé pour le système.

Address

Spécifie une adresse indiquant l’emplacement de l’appareil sur son bus sous-jacent.

L’interprétation de ce nombre est spécifique au bus. Si l’adresse est inconnue ou si le pilote de bus ne prend pas en charge une adresse, le pilote de bus quitte ce membre à sa valeur par défaut de 0xFFFFFFFF.

La liste suivante décrit les informations que certains pilotes de bus stockent dans le champ Adresse de leurs appareils enfants :

Bus Description
1394 Ne fournit pas d’adresse, car les adresses sont volatiles. Par défaut, 0xFFFFFFFF.
EISA Numéro d’emplacement (0-F).
IDE Pour un appareil IDE, l’adresse contient l’ID cible et la LUN. Pour un canal IDE, l’adresse est zéro ou un (0 = canal principal et 1 = canal secondaire).
ISApnp Ne fournit pas d’adresse. Par défaut, 0xFFFFFFFF.
Carte PC (PCMCIA) Numéro de socket (généralement 0x00 ou 0x40).
PCI Numéro d’appareil dans le mot le plus élevé et numéro de fonction dans le mot bas.
SCSI ID cible.
USB Numéro de port.

UINumber

Spécifie un nombre associé à l’appareil qui peut être affiché dans l’interface utilisateur.

Ce nombre est généralement un numéro d’emplacement perçu par l’utilisateur, tel qu’un numéro imprimé à côté de l’emplacement sur la carte, ou un autre nombre qui facilite la localisation de l’appareil physique pour l’utilisateur. Pour les bus sans convention de ce type, ou lorsque l’UINumber est inconnu, le pilote de bus quitte ce membre à sa valeur par défaut de 0xFFFFFFFF.

DeviceState[POWER_SYSTEM_MAXIMUM]

Tableau de valeurs indiquant l’état d’alimentation de l’appareil le plus alimenté que l’appareil peut maintenir pour chaque état d’alimentation du système. L’élément DeviceState[PowerSystemWorking] du tableau correspond à l’état système S0. L’entrée pour PowerSystemUnspecified est réservée à l’utilisation du système.

Les entrées de ce tableau sont basées sur les fonctionnalités du devnode parent. En règle générale, un pilote ne doit pas modifier ces valeurs. Toutefois, si nécessaire, un pilote peut réduire la valeur, par exemple, de PowerDeviceD1 à PowerDeviceD2.

Si le pilote de bus ne parvient pas à déterminer l’état d’alimentation approprié pour un appareil énuméré par la racine, il définit DeviceState[PowerSystemWorking] sur PowerDeviceD0 et toutes les autres entrées sur PowerDeviceD3.

SystemWake

Spécifie l’état d’alimentation du système le moins alimenté à partir duquel l’appareil peut signaler un événement de sortie de veille. La valeur PowerSystemUnspecified indique que l’appareil ne peut pas sortir le système.

Un pilote de bus peut obtenir ces informations à partir de son devnode parent.

En général, un pilote ne doit pas modifier cette valeur. Si nécessaire, toutefois, un pilote peut augmenter l’état d’alimentation, par exemple, de PowerSystemHibernate à PowerSystemS1, pour indiquer que son appareil ne peut pas sortir le système d’un état de mise en veille prolongée, mais peut le faire à partir d’un état de veille plus élevé.

DeviceWake

Spécifie l’état d’alimentation de l’appareil le moins alimenté à partir duquel l’appareil peut signaler un événement de sortie de veille. La valeur PowerDeviceUnspecified indique que l’appareil ne peut pas signaler un événement de veille.

D1Latency

Spécifie la latence approximative du pire cas de l’appareil, en unités de 100 microsecondes, pour le retour de l’appareil à l’état PowerDeviceD0 à partir de l’état PowerDeviceD1 . Définissez sur zéro si l’appareil ne prend pas en charge l’état D1.

D2Latency

Spécifie la latence approximative du pire cas de l’appareil, en unités de 100 microsecondes, pour le retour de l’appareil à l’état PowerDeviceD0 à partir de l’état PowerDeviceD2 . Définissez sur zéro si l’appareil ne prend pas en charge l’état D2.

D3Latency

Spécifie la latence approximative du pire cas de l’appareil, en unités de 100 microsecondes, pour le retour de l’appareil à l’état PowerDeviceD0 à partir de l’état PowerDeviceD3 . Définissez sur zéro si l’appareil ne prend pas en charge l’état D3.

Remarques

Les pilotes de bus définissent les valeurs appropriées dans cette structure en réponse à un IRP IRP_MN_QUERY_CAPABILITIES . Les pilotes de filtre de bus, les pilotes de fonction et les pilotes de filtre peuvent modifier les fonctionnalités définies par le pilote de bus.

Les pilotes qui envoient une demande de IRP_MN_QUERY_CAPABILITIES doivent initialiser les membres Size, Version, Address et UINumber de cette structure avant d’envoyer l’IRP.

Pour plus d’informations sur l’utilisation de la structure DEVICE_CAPABILITIES pour décrire les fonctionnalités d’alimentation d’un appareil, consultez Création de rapports sur les fonctionnalités d’alimentation des appareils.

Configuration requise

Condition requise Valeur
En-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)

Voir aussi

IRP_MN_QUERY_CAPABILITIES

PNP_DEVICE_STATE