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