structure CM_PARTIAL_RESOURCE_DESCRIPTOR (wdm.h)

La structure CM_PARTIAL_RESOURCE_DESCRIPTOR spécifie une ou plusieurs ressources matérielles système, d’un type unique, attribuées à un appareil. Cette structure est utilisée pour créer un tableau au sein d’une structure CM_PARTIAL_RESOURCE_LIST .

Syntaxe

typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
  UCHAR  Type;
  UCHAR  ShareDisposition;
  USHORT Flags;
  union {
    struct {
      PHYSICAL_ADDRESS Start;
      ULONG            Length;
    } Generic;
    struct {
      PHYSICAL_ADDRESS Start;
      ULONG            Length;
    } Port;
    struct {
#if ...
      USHORT    Level;
      USHORT    Group;
#else
      ULONG     Level;
#endif
      ULONG     Vector;
      KAFFINITY Affinity;
    } Interrupt;
    struct {
      union {
        struct {
          USHORT    Group;
          USHORT    Reserved;
          USHORT    MessageCount;
          ULONG     Vector;
          KAFFINITY Affinity;
        } Raw;
        struct {
#if ...
          USHORT    Level;
          USHORT    Group;
#else
          ULONG     Level;
#endif
          ULONG     Vector;
          KAFFINITY Affinity;
        } Translated;
      } DUMMYUNIONNAME;
    } MessageInterrupt;
    struct {
      PHYSICAL_ADDRESS Start;
      ULONG            Length;
    } Memory;
    struct {
      ULONG Channel;
      ULONG Port;
      ULONG Reserved1;
    } Dma;
    struct {
      ULONG Channel;
      ULONG RequestLine;
      UCHAR TransferWidth;
      UCHAR Reserved1;
      UCHAR Reserved2;
      UCHAR Reserved3;
    } DmaV3;
    struct {
      ULONG Data[3];
    } DevicePrivate;
    struct {
      ULONG Start;
      ULONG Length;
      ULONG Reserved;
    } BusNumber;
    struct {
      ULONG DataSize;
      ULONG Reserved1;
      ULONG Reserved2;
    } DeviceSpecificData;
    struct {
      PHYSICAL_ADDRESS Start;
      ULONG            Length40;
    } Memory40;
    struct {
      PHYSICAL_ADDRESS Start;
      ULONG            Length48;
    } Memory48;
    struct {
      PHYSICAL_ADDRESS Start;
      ULONG            Length64;
    } Memory64;
    struct {
      UCHAR Class;
      UCHAR Type;
      UCHAR Reserved1;
      UCHAR Reserved2;
      ULONG IdLowPart;
      ULONG IdHighPart;
    } Connection;
  } u;
} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;

Membres

Type

Identifie le type de ressource. La valeur constante spécifiée pour Type indique quelle structure au sein de l’union u est valide, comme indiqué dans le tableau suivant. (Ces indicateurs sont utilisés dans les structures CM_PARTIAL_RESOURCE_DESCRIPTOR et IO_RESOURCE_DESCRIPTOR , sauf indication contraire.)

Valeur de type Sous-structure membre u
CmResourceTypePort u.Port
CmResourceTypeInterrupt u.Interrupt ou u.MessageInterrupt. Si l’indicateur CM_RESOURCE_INTERRUPT_MESSAGE d’indicateurs est défini, utilisez u.MessageInterrupt ; sinon, utilisez u.Interrupt.
CmResourceTypeMemory u.Memory
CmResourceTypeMemoryLarge Un des u.Memory40, u.Memory48 ou u.Memory64. Les indicateurs CM_RESOURCE_MEMORY_LARGE_XXX définis dans le membre Flags déterminent la structure utilisée.
CmResourceTypeDma u.Dma (si CM_RESOURCE_DMA_V3 n’est pas défini) ou u.DmaV3 (si CM_RESOURCE_DMA_V3 indicateur est défini)
CmResourceTypeDevicePrivate u.DevicePrivate
CmResourceTypeBusNumber u.BusNumber
CmResourceTypeDeviceSpecific u.DeviceSpecificData(Non utilisé dans IO_RESOURCE_DESCRIPTOR.)
CmResourceTypePcCardConfig u.DevicePrivate
CmResourceTypeMfCardConfig u.DevicePrivate
CmResourceTypeConnection u.Connection
CmResourceTypeConfigData Réservé pour le système.
CmResourceTypeNonArbitrated Non utilisé.

ShareDisposition

Indique si la ressource décrite peut être partagée. Les valeurs de constante valides sont répertoriées dans le tableau suivant :

Valeur Signification
CmResourceShareDeviceExclusive L’appareil nécessite une utilisation exclusive de la ressource.
CmResourceShareDriverExclusive Le pilote nécessite une utilisation exclusive de la ressource. Non pris en charge pour les pilotes WDM.
CmResourceShared La ressource peut être partagée sans restriction.

Flags

Contient des bits d’indicateur spécifiques au type de ressource, comme indiqué dans les tableaux suivants (les indicateurs peuvent être regroupés au niveau du bit-ORed le cas échéant) :

Type de ressource CmResourceTypePort

Indicateur Définition
CM_RESOURCE_PORT_MEMORY L’appareil est accessible dans l’espace d’adressage en mémoire.
CM_RESOURCE_PORT_IO L’appareil est accessible dans l’espace d’adressage des E/S.
CM_RESOURCE_PORT_10_BIT_DECODE L’appareil décode 10 bits de l’adresse du port.
CM_RESOURCE_PORT_12_BIT_DECODE L’appareil décode 12 bits de l’adresse du port.
CM_RESOURCE_PORT_16_BIT_DECODE L’appareil décode 16 bits de l’adresse du port.
CM_RESOURCE_PORT_POSITIVE_DECODE L’appareil utilise « décodage positif » au lieu de « décodage soustractif ». (En général, les appareils PCI utilisent le décodage positif et les bus ISA utilisent le décodage soustractif.)
CM_RESOURCE_PORT_PASSIVE_DECODE L’appareil décode le port, mais le pilote ne l’utilise pas.
CM_RESOURCE_PORT_WINDOW_DECODE Réservé pour le système.

Type de ressource CmResourceTypeInterrupt

Indicateur Définition
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE La ligne IRQ est déclenchée par 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 Non utilisé avec la structure CM_PARTIAL_RESOURCE_DESCRIPTOR . Pour plus d’informations sur cet indicateur, consultez IO_RESOURCE_DESCRIPTOR.
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT L’interruption est une interruption secondaire. Cet indicateur peut être défini en commençant par Windows 8. Pour plus d’informations sur les interruptions secondaires, consultez Interruptions GPIO.
CM_RESOURCE_INTERRUPT_WAKE_HINT L’interruption est capable de réveiller le système d’exploitation à partir d’un état d’inactivité à faible consommation ou d’un état de mise en veille du système. Cet indicateur peut être défini en commençant par Windows 8. Pour plus d’informations sur les fonctionnalités de veille, consultez Activation de la mise en éveil des appareils.

Type de ressource CmResourceTypeMemory

Indicateur Définition
CM_RESOURCE_MEMORY_READ_WRITE La plage de mémoire est lisible et accessible en écriture.
CM_RESOURCE_MEMORY_READ_ONLY La plage de mémoire est en lecture seule.
CM_RESOURCE_MEMORY_WRITE_ONLY La plage de mémoire est en écriture seule.
CM_RESOURCE_MEMORY_PREFETCHABLE La plage de mémoire est prérécupérationable.
CM_RESOURCE_MEMORY_COMBINEDWRITE La mise en cache en écriture combinée est autorisée.
CM_RESOURCE_MEMORY_24 L’appareil utilise l’adressage 24 bits.
CM_RESOURCE_MEMORY_CACHEABLE La plage de mémoire peut être mise en cache.

Type de ressource CmResourceTypeMemoryLarge

Indicateur Définition
CM_RESOURCE_MEMORY_LARGE_40 Le descripteur de mémoire utilise le membre u.Memory40 .
CM_RESOURCE_MEMORY_LARGE_48 Le descripteur de mémoire utilise le membre u.Memory48 .
CM_RESOURCE_MEMORY_LARGE_64 Le descripteur de mémoire utilise le membre u.Memory64 .

Type de ressource CmResourceTypeDma

Indicateur Définition
CM_RESOURCE_DMA_8 Canal DMA 8 bits
CM_RESOURCE_DMA_16 Canal DMA 16 bits
CM_RESOURCE_DMA_32 Canal DMA 32 bits
CM_RESOURCE_DMA_8_AND_16 Canal DMA 8 bits et 16 bits
CM_RESOURCE_DMA_BUS_MASTER L’appareil prend en charge les transferts de bus master DMA.
CM_RESOURCE_DMA_TYPE_A Tapez un DMA
CM_RESOURCE_DMA_TYPE_B Type B DMA
CM_RESOURCE_DMA_TYPE_F Type F DMA
CM_RESOURCE_DMA_V3 Utilisez le membre DmaV3 au lieu du membre Dma . Le membre DmaV3 est disponible à partir de Windows 8.

u

Définit l’union u .

u.Generic

Non utilisé.

u.Generic.Start

Non utilisé.

u.Generic.Length

Non utilisé.

u.Port

Spécifie une plage d’adresses de port d’E/S, à l’aide des membres suivants.

Les pilotes pour Windows Vista et les versions ultérieures du système d’exploitation Windows peuvent utiliser RtlCmDecodeMemIoResource et RtlCmEncodeMemIoResource pour lire et mettre à jour le membre u.Port , plutôt que de le mettre à jour directement.

u.Port.Start

Pour les ressources brutes : spécifie l’adresse physique relative du bus de la plus basse d’une plage d’adresses de port d’E/S contiguës allouées à l’appareil.

Pour les ressources traduites : spécifie l’adresse physique système la plus basse d’une plage d’adresses de port d’E/S contiguës allouées à l’appareil.

Pour plus d’informations sur les ressources brutes et traduites, consultez Remarques.

u.Port.Length

Longueur, en octets, de la plage d’adresses de port d’E/S allouées.

u.Interrupt

Spécifie un vecteur et un niveau d’interruption, à l’aide des membres suivants :

u.Interrupt.Level

Pour les ressources brutes : spécifie l’IRQL spécifique au bus de l’appareil (si approprié pour la plateforme et le bus).

Pour les ressources traduites : spécifie le DIRQL affecté à l’appareil.

Pour plus d’informations sur les ressources brutes et traduites, consultez Remarques.

u.Interrupt.Group

Spécifie le numéro du groupe de processeurs. Ce membre existe uniquement si la constante NT_PROCESSOR_GROUPS est définie au moment de la compilation. Ce membre peut être différent de zéro uniquement sur Windows 7 et versions ultérieures de Windows. Les membres Group et Affinity spécifient ensemble une affinité de groupe qui indique les processeurs que l’appareil peut interrompre. Pour spécifier une affinité pour n’importe quel groupe, définissez Groupe sur ALL_PROCESSOR_GROUPS.

u.Interrupt.Vector

Pour les ressources brutes : spécifie le vecteur d’interruption spécifique au bus de l’appareil (si approprié pour la plateforme et le bus).

Pour les ressources traduites : spécifie le vecteur d’interruption système global affecté à l’appareil.

Pour plus d’informations sur les ressources brutes et traduites, consultez Remarques.

u.Interrupt.Affinity

Contient une valeur de masque de bits de type KAFFINITY indiquant l’ensemble des processeurs que l’appareil peut interrompre. Pour indiquer que l’appareil peut interrompre n’importe quel processeur, ce membre est défini sur -1.

u.MessageInterrupt

Spécifie une interruption signalée par un message. Ce membre est un syndicat. Utilisez u.MessageInterrupt.Raw pour les ressources brutes et u.MessageInterrupt.Translated pour les ressources traduites. Ce type de ressource est retourné uniquement sur Windows Vista et les versions ultérieures du système d’exploitation Windows.

Pour plus d’informations sur les ressources brutes et traduites, consultez Remarques.

u.MessageInterrupt.DUMMYUNIONNAME

Définit l’union DUMMYUNIONNAME .

u.MessageInterrupt.DUMMYUNIONNAME.Raw

Définit la structure Raw .

u.MessageInterrupt.DUMMYUNIONNAME.Raw.Group

Spécifie un numéro de groupe de processeurs. Ce membre existe uniquement si NT_PROCESSOR_GROUPS est défini au moment de la compilation. Ce membre peut être différent de zéro uniquement sur Windows 7 et versions ultérieures de Windows. Les membres Group et Affinity spécifient ensemble une affinité de groupe qui indique quels processeurs peuvent recevoir les interruptions de l’appareil. Pour spécifier une affinité pour n’importe quel groupe, définissez Groupe sur ALL_PROCESSOR_GROUPS.

u.MessageInterrupt.DUMMYUNIONNAME.Raw.Reserved

Non utilisé.

u.MessageInterrupt.DUMMYUNIONNAME.Raw.MessageCount

Spécifie le nombre d’interruptions signalées par un message générées pour ce pilote.

u.MessageInterrupt.DUMMYUNIONNAME.Raw.Vector

Spécifie le vecteur d’interruption de l’appareil.

u.MessageInterrupt.DUMMYUNIONNAME.Raw.Affinity

Spécifie une valeur KAFFINITY qui indique les processeurs qui reçoivent les interruptions de l’appareil.

u.MessageInterrupt.DUMMYUNIONNAME.Translated

Le membre u.MessageInterrupt.Translated a les membres suivants :

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Level

Spécifie l’IRQL de l’appareil (DIRQL) affecté aux interruptions de l’appareil.

Spécifie l’IRQL de l’appareil (DIRQL) affecté aux interruptions de l’appareil.

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Group

Spécifie un numéro de groupe de processeurs. Ce membre existe uniquement si NT_PROCESSOR_GROUPS est défini au moment de la compilation. Ce membre peut être différent de zéro uniquement sur Windows 7 et versions ultérieures de Windows. Les membres Translated.Group et Translated.Affinity spécifient ensemble une affinité de groupe qui indique quels processeurs peuvent recevoir les interruptions de l’appareil. Pour spécifier une affinité pour n’importe quel groupe, définissez Translated.Group sur ALL_PROCESSOR_GROUPS.

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Vector

Spécifie le vecteur d’interruption de l’appareil.

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Affinity

Spécifie une valeur KAFFINITY qui identifie les processeurs qui reçoivent les interruptions de 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 peuvent utiliser RtlCmDecodeMemIoResource et RtlCmEncodeMemIoResource pour lire et mettre à jour le membre u.Memory , plutôt que de le mettre à jour directement.

u.Memory.Start

Pour les ressources brutes : spécifie l’adresse physique relative du bus de la plus basse d’une plage d’adresses mémoire contiguës allouées à l’appareil.

Pour les ressources traduites : spécifie l’adresse physique système la plus faible d’une plage d’adresses mémoire contiguës allouées à l’appareil.

Pour plus d’informations sur les ressources brutes et traduites, consultez Remarques.

u.Memory.Length

Spécifie la longueur, en octets, de la plage d’adresses mémoire allouées.

u.Dma

Spécifie un paramètre DMA, à l’aide de l’un des membres suivants :

u.Dma.Channel

Spécifie le numéro du canal DMA sur un contrôleur DMA système que l’appareil peut utiliser.

u.Dma.Port

Spécifie le numéro du port DMA qu’un appareil de type MCA peut utiliser.

u.Dma.Reserved1

Non utilisé.

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.Channel

Spécifie le numéro du canal DMA sur le contrôleur DMA système alloué à l’appareil.

u.DmaV3.RequestLine

Spécifie le numéro de la ligne de requête 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.DmaV3.Reserved1

Non utilisé.

u.DmaV3.Reserved2

Non utilisé.

u.DmaV3.Reserved3

Non utilisé.

u.DevicePrivate

Réservé pour le système.

u.DevicePrivate.Data[3]

u.BusNumber

Spécifie les numéros de bus, à l’aide des membres suivants :

u.BusNumber.Start

Spécifie le numéro le plus bas d’une plage de bus contigus alloués à l’appareil.

u.BusNumber.Length

Spécifie le nombre de bus alloués à l’appareil.

u.BusNumber.Reserved

Non utilisé.

u.DeviceSpecificData

Spécifie la taille d’une structure privée spécifique à l’appareil qui est ajoutée à la fin de la structure CM_PARTIAL_RESOURCE_DESCRIPTOR . Si u.DeviceSpecificData est utilisé, la structure CM_PARTIAL_RESOURCE_DESCRIPTOR doit être la dernière dans le tableau CM_PARTIAL_RESOURCE_LIST .

Des exemples de structures spécifiques à l’appareil incluent CM_FLOPPY_DEVICE_DATA, CM_KEYBOARD_DEVICE_DATA, CM_SCSI_DEVICE_DATA et CM_SERIAL_DEVICE_DATA.

u.DeviceSpecificData.DataSize

Spécifie le nombre d’octets ajoutés à la fin de la structure CM_PARTIAL_RESOURCE_DESCRIPTOR .

u.DeviceSpecificData.Reserved1

Non utilisé.

u.DeviceSpecificData.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 doivent utiliser RtlCmDecodeMemIoResource et RtlCmEncodeMemIoResource pour lire et mettre à jour ce membre, plutôt que de le mettre à jour directement.

u.Memory40.Start

Pour les ressources brutes : spécifie l’adresse physique relative du bus du plus bas d’une plage d’adresses mémoire contiguës allouées à l’appareil.

Pour les ressources traduites : spécifie l’adresse physique système du plus bas d’une plage d’adresses mémoire contiguës allouées à l’appareil.

Pour plus d’informations sur les ressources brutes et traduites, consultez Remarques.

u.Memory40.Length40

Contient les 32 bits élevés de la longueur de 40 bits, en octets, de la plage d’adresses mémoire allouées. Les 8 bits les plus bas sont traités comme zéro.

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 doivent utiliser RtlCmDecodeMemIoResource et RtlCmEncodeMemIoResource pour lire et mettre à jour ce membre, plutôt que de le mettre à jour directement.

u.Memory48.Start

Pour les ressources brutes : spécifie l’adresse physique relative du bus du plus bas d’une plage d’adresses mémoire contiguës allouées à l’appareil.

Pour les ressources traduites : spécifie l’adresse physique système du plus bas d’une plage d’adresses mémoire contiguës allouées à l’appareil.

Pour plus d’informations sur les ressources brutes et traduites, consultez Remarques.

u.Memory48.Length48

Contient les 32 bits élevés de la longueur de 48 bits, en octets, de la plage d’adresses mémoire allouées. Les 16 bits les plus bas sont traités comme zéro.

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 doivent utiliser RtlCmDecodeMemIoResource et RtlCmEncodeMemIoResource pour lire et mettre à jour ce membre, plutôt que de le mettre à jour directement.

u.Memory64.Start

Pour les ressources brutes : spécifie l’adresse physique relative du bus du plus bas d’une plage d’adresses mémoire contiguës allouées à l’appareil.

Pour les ressources traduites : spécifie l’adresse physique système du plus bas d’une plage d’adresses mémoire contiguës allouées à l’appareil.

Pour plus d’informations sur les ressources brutes et traduites, consultez Remarques.

u.Memory64.Length64

Contient les 32 bits élevés de la longueur de 64 bits, en octets, de la plage d’adresses mémoire allouées. Les 32 bits les plus bas sont traités comme zéro.

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). Les membres suivants décrivent cette connexion.

Le membre u.Connection est disponible à partir de Windows 8.

u.Connection.Class

Spécifie la 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

Spécifie le type de 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

Contient les 32 bits inférieurs de l’ID de connexion 64 bits.

u.Connection.IdHighPart

Contient les 32 bits supérieurs de l’ID de connexion 64 bits.

Remarques

Une structure CM_PARTIAL_RESOURCE_DESCRIPTOR peut décrire une ressource brute (relative au bus) ou une ressource traduite (physique système), en fonction de la routine ou de l’IRP avec laquelle elle est utilisée. Pour plus d’informations, consultez Ressources brutes et traduites et IRP_MN_START_DEVICE.

Il ne peut y avoir que 1 bloc DeviceSpecificData. Il doit se trouver à la fin de tous les descripteurs de ressources dans un bloc de descripteur complet.

Configuration requise

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

Voir aussi

CM_FLOPPY_DEVICE_DATA

CM_FULL_RESOURCE_DESCRIPTOR

CM_KEYBOARD_DEVICE_DATA

CM_PARTIAL_RESOURCE_LIST

CM_RESOURCE_LIST

CM_SCSI_DEVICE_DATA

CM_SERIAL_DEVICE_DATA

DMA_OPERATIONS

IO_RESOURCE_DESCRIPTOR

IRP_MN_START_DEVICE

IoConnectInterrupt

IoGetDeviceProperty

IoReportResourceForDetection

KAFFINITY

RtlCmDecodeMemIoResource

RtlCmEncodeMemIoResource