IO_RESOURCE_DESCRIPTOR structure (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 obligatoire, 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 obligatoire, 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 plages alternatives. |
IO_RESOURCE_ALTERNATIVE | La plage de ressources spécifiée est une alternative à la plage qui la précède. Par exemple, si une structure IO_RESOURCE_DESCRIPTOR spécifie IRQ 5, avec IO_RESOURCE_PREFERRED défini, et si la structure suivante spécifie IRQ 3, avec IO_RESOURCE_ALTERNATIVE défini, 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. Vous pouvez définir IO_RESOURCE_ALTERNATIVE et IO_RESOURCE_PREFERRED, 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 présente les indicateurs valides si Type = CmResourceTypeInterrupt :
Valeur | Signification |
---|---|
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE | La ligne IRQ est déclenchée au niveau. (Ces IRQs sont généralement partageables.) |
CM_RESOURCE_INTERRUPT_LATCHED | La ligne IRQ est déclenchée à l’extrémité. |
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 sortir le système d’exploitation d’un état d’inactivité à faible consommation 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 veille, consultez Activation de la mise en éveil de l’appareil. |
CM_RESOURCE_INTERRUPT_WAKE_HINT | L’interruption est capable de sortir le système d’exploitation d’un état d’inactivité à faible consommation 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 veille, consultez Activation de la mise en éveil de l’appareil. |
Pour obtenir la liste des indicateurs valides pour d’autres types de ressources, consultez la description du membre Indicateurs 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, plutôt que 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 l’alignement.
u.Port.MinimumAddress
Adresse minimale de port d’E/S relative au bus 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 les versions ultérieures du système d’exploitation Windows doivent utiliser RtlIoDecodeMemIoResource et RtlIoEncodeMemIoResource pour 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 l’alignement.
u.Memory.MinimumAddress
Adresse mémoire minimale relative du bus qui peut être affectée à l’appareil.
u.Memory.MaximumAddress
Adresse mémoire relative maximale du bus 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 de 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 des membres MinimumVector et 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 les 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. Le groupe est un membre valide mais facultatif de u.Interrupt uniquement dans Windows 7 et versions ultérieures de Windows. Ce membre existe uniquement si NT_PROCESSOR_GROUPS est défini au moment de la compilation. Si le membre du groupe existe, les membres Group et 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 Group sur ALL_PROCESSOR_GROUPS pour indiquer que le pilote prend en charge le groupe (c’est-à-dire qu’il est conçu pour gérer des informations sur les groupes de processeurs). Un pilote ne peut pas spécifier de processeurs cibles si Group est égal à ALL_PROCESSOR_GROUPS ; ces spécifications cibles sont ignorées.
u.Interrupt.PriorityPolicy
Spécifie une valeur de 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 pour 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
Numéro 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é pour le système.
u.DevicePrivate.Data[3]
Réservé pour le 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 qui peut être attribué à l’appareil.
u.BusNumber.MaxBusNumber
Numéro de bus relatif maximal qui peut être affecté à l’appareil.
u.BusNumber.Reserved
Non utilisé.
u.ConfigData
Réservé pour le système.
u.ConfigData.Priority
Définit la priorité du membre ULONG.
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 pour 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 de 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, que l’adresse de départ affectée doit respecter. 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 minimale du bus qui peut être affectée à l’appareil.
u.Memory40.MaximumAddress
Adresse mémoire relative maximale du bus 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 pour 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 de 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, que l’adresse de départ affectée doit respecter. 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 minimale du bus qui peut être affectée à l’appareil.
u.Memory48.MaximumAddress
Adresse mémoire relative maximale du bus 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 les versions ultérieures du système d’exploitation Windows doivent utiliser RtlIoDecodeMemIoResource et RtlIoEncodeMemIoResource pour lire et mettre à jour ce membre, plutôt que de le mettre à jour directement.
u.Memory64.Length64
Les 32 bits élevés de la longueur de 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, que l’adresse de départ affectée doit respecter. 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 minimale du bus qui peut être affectée à l’appareil.
u.Memory64.MaximumAddress
Adresse mémoire relative maximale du bus qui peut être affectée à l’appareil.
u.Connection
Spécifie une connexion à un bus série ou à un 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 la connexion. Si Class = 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 en tant qu’entrée de demande d’interruption est accessible en tant que ressource d’interruption ordinaire (CmResourceTypeInterrupt).
Si Class = 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.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h, Miniport.h) |