structure IO_RESOURCE_DESCRIPTOR (wdm.h)
La structure IO_RESOURCE_DESCRIPTOR décrit une gamme de ressources matérielles brutes, d’un type, qui peuvent être utilisées par un appareil. Un tableau de structures IO_RESOURCE_DESCRIPTOR est contenu dans chaque structure IO_RESOURCE_LIST.
Syntaxe
typedef struct _IO_RESOURCE_DESCRIPTOR {
UCHAR Option;
UCHAR Type;
UCHAR ShareDisposition;
UCHAR Spare1;
USHORT Flags;
USHORT Spare2;
union {
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Port;
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory;
struct {
ULONG MinimumVector;
ULONG MaximumVector;
#if ...
IRQ_DEVICE_POLICY AffinityPolicy;
USHORT Group;
#else
IRQ_DEVICE_POLICY AffinityPolicy;
#endif
IRQ_PRIORITY PriorityPolicy;
KAFFINITY TargetedProcessors;
} Interrupt;
struct {
ULONG MinimumChannel;
ULONG MaximumChannel;
} Dma;
struct {
ULONG RequestLine;
ULONG Reserved;
ULONG Channel;
ULONG TransferWidth;
} DmaV3;
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Generic;
struct {
ULONG Data[3];
} DevicePrivate;
struct {
ULONG Length;
ULONG MinBusNumber;
ULONG MaxBusNumber;
ULONG Reserved;
} BusNumber;
struct {
ULONG Priority;
ULONG Reserved1;
ULONG Reserved2;
} ConfigData;
struct {
ULONG Length40;
ULONG Alignment40;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory40;
struct {
ULONG Length48;
ULONG Alignment48;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory48;
struct {
ULONG Length64;
ULONG Alignment64;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory64;
struct {
UCHAR Class;
UCHAR Type;
UCHAR Reserved1;
UCHAR Reserved2;
ULONG IdLowPart;
ULONG IdHighPart;
} Connection;
} u;
} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
Membres
Option
Spécifie si cette description de ressource est requise, préférée ou alternative. L’une des valeurs suivantes doit être utilisée :
Valeur | Signification |
---|---|
0 | La plage de ressources spécifiée est requise, sauf si d’autres plages sont également spécifiées. |
IO_RESOURCE_PREFERRED | La plage de ressources spécifiée est préférée à toutes les autres plages. |
IO_RESOURCE_ALTERNATIVE | La plage de ressources spécifiée est une alternative à la plage précédente. Par exemple, si une structure IO_RESOURCE_DESCRIPTOR spécifie IRQ 5, avec IO_RESOURCE_PREFERRED ensemble et que la structure suivante spécifie IRQ 3, avec IO_RESOURCE_ALTERNATIVE set, le gestionnaire PnP affecte IRQ 3 à l’appareil uniquement si IRQ 5 n’est pas disponible. Plusieurs alternatives peuvent être spécifiées pour chaque ressource. Les deux IO_RESOURCE_ALTERNATIVE et IO_RESOURCE_PREFERRED peuvent être définis, ce qui indique une alternative préférée. |
IO_RESOURCE_DEFAULT | Non utilisé. |
Type
Identifie le type de ressource. Pour obtenir la liste des valeurs valides, consultez le membre type de la structure CM_PARTIAL_RESOURCE_DESCRIPTOR.
ShareDisposition
Indique si la ressource décrite peut être partagée. Pour obtenir la liste des valeurs valides, consultez le membre ShareDisposition de la structure CM_PARTIAL_RESOURCE_DESCRIPTOR.
Spare1
Non utilisé.
Flags
Contient des indicateurs de bits spécifiques au type de ressource. Le tableau suivant montre les indicateurs valides si Type = CmResourceTypeInterrupt:
Valeur | Signification |
---|---|
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE | La ligne IRQ est déclenchée au niveau. (Ces FAQ sont généralement partageables.) |
CM_RESOURCE_INTERRUPT_LATCHED | La ligne IRQ est déclenchée en périphérie. |
CM_RESOURCE_INTERRUPT_MESSAGE | Si cet indicateur est défini, l’interruption est une interruption signalée par un message. Sinon, l’interruption est une interruption basée sur une ligne. |
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED | Si cet indicateur est défini, le membre u.Interrupt inclut des données qui décrivent la stratégie d’interruption de l’appareil. |
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT | L’interruption est capable de réveiller le système d’exploitation à partir d’un état d’inactivité à faible alimentation ou d’un état de veille du système. Cet indicateur peut être défini à partir de Windows 8. Pour plus d’informations sur les fonctionnalités de mise en éveil, consultez Activation dude mise en éveil des appareils. |
CM_RESOURCE_INTERRUPT_WAKE_HINT | L’interruption est capable de réveiller le système d’exploitation à partir d’un état d’inactivité à faible alimentation ou d’un état de veille du système. Cet indicateur peut être défini à partir de Windows 8. Pour plus d’informations sur les fonctionnalités de mise en éveil, consultez Activation dude mise en éveil des appareils. |
Pour obtenir la liste des indicateurs valides pour d’autres types de ressources, consultez la description des indicateurs de membre de la structure CM_PARTIAL_RESOURCE_DESCRIPTOR.
Spare2
Non utilisé.
u
Définit l’union u.
u.Port
Spécifie une plage d’adresses de port d’E/S à l’aide des membres suivants.
Les pilotes doivent utiliser RtlIoDecodeMemIoResource et RtlIoEncodeMemIoResource pour lire et mettre à jour ce membre, au lieu de le mettre à jour directement.
u.Port.Length
Longueur, en octets, de la plage d’adresses de port d’E/S assignables.
u.Port.Alignment
Alignement, en octets, auquel l’adresse de départ affectée doit adhérer. L’adresse de départ affectée doit être un multiple entier de 'alignement.
u.Port.MinimumAddress
Adresse de port d’E/S relative au bus minimale qui peut être affectée à l’appareil.
u.Port.MaximumAddress
Adresse de port d’E/S relative au bus maximale qui peut être affectée à l’appareil.
u.Memory
Spécifie une plage d’adresses mémoire à l’aide des membres suivants :
Les pilotes pour Windows Vista et versions ultérieures du système d’exploitation Windows doivent utiliser RtlIoDecodeMemIoResource et RtlIoEncodeMemIoResource lire et mettre à jour ce membre, au lieu de le mettre à jour directement.
u.Memory.Length
Longueur, en octets, de la plage d’adresses mémoire assignables.
u.Memory.Alignment
Alignement, en octets, auquel l’adresse de départ affectée doit adhérer. L’adresse de départ affectée doit être un multiple entier de 'alignement.
u.Memory.MinimumAddress
Adresse mémoire relative au bus minimale qui peut être affectée à l’appareil.
u.Memory.MaximumAddress
Adresse mémoire relative au bus maximale qui peut être affectée à l’appareil.
u.Interrupt
Spécifie une plage de vecteurs d’interruption à l’aide des membres suivants :
u.Interrupt.MinimumVector
Vecteur relatif au bus minimal qui peut être affecté à l’appareil.
u.Interrupt.MaximumVector
Vecteur relatif de bus maximal qui peut être affecté à l’appareil.
Si le bit d’indicateur CM_RESOURCE_INTERRUPT_MESSAGE est défini, les valeurs de l'MinimumVector et membres maximumVector ont des significations spéciales. Pour plus d’informations, consultez Utilisation des descripteurs de ressources d’interruption.
Le système fournit les membres supplémentaires suivants sur Windows Vista et versions ultérieures du système d’exploitation Windows :
u.Interrupt.AffinityPolicy
Spécifie une valeur IRQ_DEVICE_POLICY qui indique comment le système doit distribuer les interruptions d’un appareil entre les processeurs.
Spécifie une valeur IRQ_DEVICE_POLICY qui indique comment le système doit distribuer les interruptions d’un appareil entre les processeurs.
u.Interrupt.Group
Spécifie un numéro de groupe de processeurs. groupe est un membre valide mais facultatif de u.Interrupt uniquement dans Windows 7 et versions ultérieures de Windows. Ce membre n’existe que si NT_PROCESSOR_GROUPS est défini au moment de la compilation. Si le membre groupe existe, le groupe et les membres TargetedProcessors spécifient ensemble une affinité de groupe qui identifie l’ensemble des processeurs qui doivent gérer les interruptions de l’appareil. Pour spécifier une affinité pour un groupe particulier, définissez AffinityPolicy sur IrqPolicySpecifiedProcessors et définissez groupe sur le numéro de groupe approprié. En outre, TargetedProcessors doit spécifier les processeurs cibles dans le groupe. Si vous définissez AffinityPolicy sur une valeur autre que IrqPolicySpecifiedProcessors, définissez groupe sur ALL_PROCESSOR_GROUPS pour indiquer que le pilote est conscient du groupe (c’est-à-dire conçu pour gérer des informations sur les groupes de processeurs). Un pilote ne peut pas spécifier de processeurs cibles si groupe est égal à ALL_PROCESSOR_GROUPS ; ces spécifications cibles sont ignorées.
u.Interrupt.PriorityPolicy
Spécifie une valeur IRQ_PRIORITY qui indique la priorité avec laquelle le système doit distribuer les interruptions de l’appareil.
u.Interrupt.TargetedProcessors
Spécifie une valeur KAFFINITY qui indique quels processeurs doivent gérer les interruptions de l’appareil. Cette valeur est utilisée uniquement si AffinityPolicy est IrqPolicySpecifiedProcessors.
u.Dma
Spécifie un paramètre DMA, à l’aide de l’un des membres suivants :
u.Dma.MinimumChannel
Canal DMA relatif au bus minimal qui peut être affecté à l’appareil.
u.Dma.MaximumChannel
Canal DMA relatif au bus maximal qui peut être affecté à l’appareil.
u.DmaV3
Spécifie les paramètres DMA d’un pilote qui utilise la version 3 de la structure DMA_OPERATIONS.
Le membre u.DmaV3 est disponible à partir de Windows 8.
u.DmaV3.RequestLine
Numéro de la ligne de requête sur le contrôleur DMA système alloué à l’appareil.
u.DmaV3.Reserved
Non utilisé.
u.DmaV3.Channel
Nombre du canal DMA sur le contrôleur DMA système alloué à l’appareil.
u.DmaV3.TransferWidth
Spécifie la largeur, en bits, du bus de données que le contrôleur DMA système alloué à l’appareil utilise pour transférer des données vers ou depuis l’appareil.
u.Generic
Non utilisé.
u.Generic.Length
Non utilisé.
u.Generic.Alignment
Non utilisé.
u.Generic.MinimumAddress
Non utilisé.
u.Generic.MaximumAddress
Non utilisé.
u.DevicePrivate
Réservé à l’utilisation du système.
u.DevicePrivate.Data[3]
Réservé à l’utilisation du système.
u.BusNumber
Spécifie les numéros de bus, à l’aide des membres suivants :
u.BusNumber.Length
Nombre de numéros de bus requis.
u.BusNumber.MinBusNumber
Numéro de bus relatif minimal pouvant être affecté à l’appareil.
u.BusNumber.MaxBusNumber
Numéro de bus relatif maximal pouvant être affecté à l’appareil.
u.BusNumber.Reserved
Non utilisé.
u.ConfigData
Réservé à l’utilisation du système.
u.ConfigData.Priority
Définit le membre ULONGPriority.
u.ConfigData.Reserved1
Non utilisé.
u.ConfigData.Reserved2
Non utilisé.
u.Memory40
Spécifie une plage d’adresses mémoire à l’aide des membres suivants.
Le membre u.Memory40 est disponible uniquement sur Windows Vista et les versions ultérieures du système d’exploitation Windows. Les pilotes de ces versions de Windows doivent utiliser RtlIoDecodeMemIoResource et RtlIoEncodeMemIoResource lire et mettre à jour ce membre, plutôt que de le mettre à jour directement.
u.Memory40.Length40
Les 32 bits élevés de la longueur 40 bits, en octets, de la plage d’adresses mémoire assignables. Les 8 bits inférieurs sont traités comme zéro.
u.Memory40.Alignment40
Les 32 bits élevés de l’alignement 40 bits, en octets, auxquels l’adresse de départ affectée doit adhérer. Les 8 bits inférieurs sont traités comme zéro. L’adresse de départ affectée sera un multiple de l’alignement.
u.Memory40.MinimumAddress
Adresse mémoire relative au bus minimale qui peut être affectée à l’appareil.
u.Memory40.MaximumAddress
Adresse mémoire relative au bus maximale qui peut être affectée à l’appareil.
u.Memory48
Spécifie une plage d’adresses mémoire à l’aide des membres suivants.
Le membre u.Memory48 est disponible uniquement sur Windows Vista et les versions ultérieures du système d’exploitation Windows. Les pilotes de ces versions de Windows doivent utiliser RtlIoDecodeMemIoResource et RtlIoEncodeMemIoResource lire et mettre à jour ce membre, plutôt que de le mettre à jour directement.
u.Memory48.Length48
Les 32 bits élevés de la longueur 48 bits, en octets, de la plage d’adresses mémoire assignables. Les 16 bits inférieurs sont traités comme zéro.
u.Memory48.Alignment48
Les 32 bits élevés de l’alignement 48 bits, en octets, auxquels l’adresse de départ affectée doit adhérer. Les 16 bits inférieurs sont traités comme zéro. L’adresse de départ affectée sera un multiple de l’alignement.
u.Memory48.MinimumAddress
Adresse mémoire relative au bus minimale qui peut être affectée à l’appareil.
u.Memory48.MaximumAddress
Adresse mémoire relative au bus maximale qui peut être affectée à l’appareil.
u.Memory64
Spécifie une plage d’adresses mémoire à l’aide des membres suivants.
Le membre u.Memory64 est disponible uniquement sur Windows Vista et les versions ultérieures du système d’exploitation Windows. Les pilotes pour Windows Vista et versions ultérieures du système d’exploitation Windows doivent utiliser RtlIoDecodeMemIoResource et RtlIoEncodeMemIoResource lire et mettre à jour ce membre, au lieu de le mettre à jour directement.
u.Memory64.Length64
Les 32 bits élevés de la longueur 64 bits, en octets, de la plage d’adresses mémoire assignables. Les 32 bits inférieurs sont traités comme zéro.
u.Memory64.Alignment64
Les 32 bits élevés de l’alignement 64 bits, en octets, auxquels l’adresse de départ affectée doit adhérer. Les 32 bits inférieurs sont traités comme zéro. L’adresse de départ affectée sera un multiple de l’alignement.
u.Memory64.MinimumAddress
Adresse mémoire relative au bus minimale qui peut être affectée à l’appareil.
u.Memory64.MaximumAddress
Adresse mémoire relative au bus maximale qui peut être affectée à l’appareil.
u.Connection
Spécifie une connexion à un bus série ou port série, ou à un ensemble d’une ou plusieurs broches d’E/S à usage général (GPIO).
Le membre u.Connection est disponible à partir de Windows 8.
Les membres suivants décrivent cette connexion.
u.Connection.Class
Classe de connexion. Ce membre est défini sur l’une des valeurs suivantes :
Valeur | Signification |
---|---|
CM_RESOURCE_CONNECTION_CLASS_GPIO | Accédez à l’appareil via une ou plusieurs broches sur un contrôleur GPIO. |
CM_RESOURCE_CONNECTION_CLASS_SERIAL | Accédez à l’appareil via un bus série ou un port série. |
u.Connection.Type
Type de connexion. Si classe = CM_RESOURCE_CONNECTION_CLASS_GPIO, type est défini sur la valeur suivante :
Valeur | Signification |
---|---|
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO | Accédez à l’appareil via des broches GPIO configurées pour les E/S. |
Une broche GPIO configurée comme entrée de demande d’interruption est accessible en tant que ressource d’interruption ordinaire (CmResourceTypeInterrupt).
Si classe = CM_RESOURCE_CONNECTION_CLASS_SERIAL, type est défini sur l’une des valeurs suivantes :
Valeur | Signification |
---|---|
CM_RESOURCE_CONNECTION_TYPE_SERIAL_I2C | L’appareil est connecté à un bus I2C. |
CM_RESOURCE_CONNECTION_TYPE_SERIAL_SPI | L’appareil est connecté à un bus SPI. |
CM_RESOURCE_CONNECTION_TYPE_SERIAL_UART | L’appareil est connecté à un port série. |
u.Connection.Reserved1
Non utilisé.
u.Connection.Reserved2
Non utilisé.
u.Connection.IdLowPart
Les 32 bits inférieurs de l’ID de connexion 64 bits.
u.Connection.IdHighPart
Les 32 bits supérieurs de l’ID de connexion 64 bits.
Exigences
Exigence | Valeur |
---|---|
d’en-tête | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Miniport.h) |