Partager via


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)

Voir aussi

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt