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) |