struttura CM_PARTIAL_RESOURCE_DESCRIPTOR (wdm.h)
La struttura CM_PARTIAL_RESOURCE_DESCRIPTOR specifica una o più risorse hardware di sistema, di un singolo tipo, assegnate a un dispositivo. Questa struttura viene usata per creare una matrice all'interno di una struttura CM_PARTIAL_RESOURCE_LIST.
Sintassi
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;
Membri
Type
Identifica il tipo di risorsa. Il valore costante specificato per Type indica quale struttura all'interno dell'unione u è valida, come indicato nella tabella seguente. Questi flag vengono usati sia all'interno di strutture CM_PARTIAL_RESOURCE_DESCRIPTOR che di IO_RESOURCE_DESCRIPTOR, tranne dove indicato.
Valore del tipo | sottostruttura membro u |
---|---|
CmResourceTypePort | u.Port |
CmResourceTypeInterrupt | u.Interrupt o u.MessageInterrupt. Se è impostato il flag CM_RESOURCE_INTERRUPT_MESSAGE di Flags, usare u.MessageInterrupt; in caso contrario, usare u.Interrupt. |
CmResourceTypeMemory | u.Memory |
cmResourceTypeMemoryLarge | Uno dei |
CmResourceTypeDma | u.Dma (se CM_RESOURCE_DMA_V3 non è impostato) o u.DmaV3 (se è impostato CM_RESOURCE_DMA_V3 flag) |
CmResourceTypeDevicePrivate | u.DevicePrivate |
cmResourceTypeBusNumber | u.BusNumber |
CmResourceTypeDeviceSpecific | u.DeviceSpecificData(non usato all'interno di IO_RESOURCE_DESCRIPTOR.) |
CmResourceTypePcCardConfig | u.DevicePrivate |
cmResourceTypeMfCardConfig | u.DevicePrivate |
cmResourceTypeConnection | u.Connection |
CmResourceTypeConfigData | Riservato per l'uso del sistema. |
cmResourceTypeNonArbitrated | Non utilizzato. |
ShareDisposition
Indica se la risorsa descritta può essere condivisa. I valori costanti validi sono elencati nella tabella seguente:
Valore | Significato |
---|---|
CmResourceShareDeviceExclusive | Il dispositivo richiede l'uso esclusivo della risorsa. |
CmResourceShareDriverExclusive | Il driver richiede l'uso esclusivo della risorsa. Non supportato per i driver WDM. |
CmResourceShareShared | La risorsa può essere condivisa senza restrizioni. |
Flags
Contiene bit di flag specifici per il tipo di risorsa, come indicato nelle tabelle seguenti (i flag possono essere contemporaneamente ORed bit per bit in base alle esigenze):
Tipo di risorsa CmResourceTypePort
Bandiera | Definizione |
---|---|
CM_RESOURCE_PORT_MEMORY | Il dispositivo è accessibile nello spazio degli indirizzi della memoria. |
CM_RESOURCE_PORT_IO | È possibile accedere al dispositivo nello spazio indirizzi di I/O. |
CM_RESOURCE_PORT_10_BIT_DECODE | Il dispositivo decodifica 10 bit dell'indirizzo della porta. |
CM_RESOURCE_PORT_12_BIT_DECODE | Il dispositivo decodifica 12 bit dell'indirizzo della porta. |
CM_RESOURCE_PORT_16_BIT_DECODE | Il dispositivo decodifica 16 bit dell'indirizzo della porta. |
CM_RESOURCE_PORT_POSITIVE_DECODE | Il dispositivo usa "decodifica positiva" anziché "decodifica sottrazione". In generale, i dispositivi PCI usano decodifica positiva e gli autobus ISA usano decodifica sottrazione. |
CM_RESOURCE_PORT_PASSIVE_DECODE | Il dispositivo decodifica la porta, ma il driver non lo usa. |
CM_RESOURCE_PORT_WINDOW_DECODE | Riservato per l'uso del sistema. |
Tipo di risorsa CmResourceTypeInterrupt
Bandiera | Definizione |
---|---|
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE | La riga IRQ viene attivata a livello. Queste domande frequenti sono in genere condivisibili. |
CM_RESOURCE_INTERRUPT_LATCHED | La riga IRQ è attivata dai bordi. |
CM_RESOURCE_INTERRUPT_MESSAGE | Se questo flag è impostato, l'interrupt è un interrupt segnalato dal messaggio. In caso contrario, l'interrupt è un interrupt basato su riga. |
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED | Non utilizzato con la struttura CM_PARTIAL_RESOURCE_DESCRIPTOR. Per altre informazioni su questo flag, vedere IO_RESOURCE_DESCRIPTOR. |
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT | L'interrupt è un interrupt secondario. Questo flag può essere impostato a partire da Windows 8. Per altre informazioni sugli interrupt secondari, vedere interrupt GPIO. |
CM_RESOURCE_INTERRUPT_WAKE_HINT | L'interrupt è in grado di riattivare il sistema operativo da uno stato di inattività a basso consumo o uno stato di sospensione del sistema. Questo flag può essere impostato a partire da Windows 8. Per altre informazioni sulle funzionalità di riattivazione, vedere Abilitazione della riattivazione del dispositivo. |
Tipo di risorsa CmResourceTypeMemory
Bandiera | Definizione |
---|---|
CM_RESOURCE_MEMORY_READ_WRITE | L'intervallo di memoria è leggibile e scrivibile. |
CM_RESOURCE_MEMORY_READ_ONLY | L'intervallo di memoria è di sola lettura. |
CM_RESOURCE_MEMORY_WRITE_ONLY | L'intervallo di memoria è di sola scrittura. |
CM_RESOURCE_MEMORY_PREFETCHABLE | L'intervallo di memoria è preletturabile. |
CM_RESOURCE_MEMORY_COMBINEDWRITE | La memorizzazione nella cache in scrittura combinata è consentita. |
CM_RESOURCE_MEMORY_24 | Il dispositivo usa l'indirizzamento a 24 bit. |
CM_RESOURCE_MEMORY_CACHEABLE | L'intervallo di memoria è memorizzabile nella cache. |
Tipo di risorsa CmResourceTypeMemoryLarge
Bandiera | Definizione |
---|---|
CM_RESOURCE_MEMORY_LARGE_40 | Il descrittore di memoria usa il membro u.Memory40 |
CM_RESOURCE_MEMORY_LARGE_48 | Il descrittore di memoria usa il membro u.Memory48 |
CM_RESOURCE_MEMORY_LARGE_64 | Il descrittore di memoria usa il membro u.Memory64 |
Tipo di risorsa CmResourceTypeDma
Bandiera | Definizione |
---|---|
CM_RESOURCE_DMA_8 | Canale DMA a 8 bit |
CM_RESOURCE_DMA_16 | Canale DMA a 16 bit |
CM_RESOURCE_DMA_32 | Canale DMA a 32 bit |
CM_RESOURCE_DMA_8_AND_16 | Canale DMA a 8 bit e a 16 bit |
CM_RESOURCE_DMA_BUS_MASTER | Il dispositivo supporta i trasferimenti DMA master del bus. |
CM_RESOURCE_DMA_TYPE_A | Tipo A DMA |
CM_RESOURCE_DMA_TYPE_B | Tipo B DMA |
CM_RESOURCE_DMA_TYPE_F | Tipo F DMA |
CM_RESOURCE_DMA_V3 | Usare il membro DmaV3 |
u
Definisce l'unione u
u.Generic
Non utilizzato.
u.Generic.Start
Non utilizzato.
u.Generic.Length
Non utilizzato.
u.Port
Specifica un intervallo di indirizzi di porta di I/O, utilizzando i membri seguenti.
I driver per Windows Vista e versioni successive del sistema operativo Windows possono usare RtlCmDecodeMemIoResource e RtlCmEncodeMemIoResource per leggere e aggiornare il membro u.Port anziché aggiornarlo direttamente.
u.Port.Start
Per le risorse non elaborate: specifica l'indirizzo fisico relativo al bus del più basso di un intervallo di indirizzi di porta di I/O contigui allocati al dispositivo.
Per le risorse tradotte: specifica l'indirizzo fisico del sistema più basso di un intervallo di indirizzi di porta di I/O contigui allocati al dispositivo.
Per altre informazioni sulle risorse non elaborate e tradotte, vedere Osservazioni.
u.Port.Length
Lunghezza, in byte, dell'intervallo di indirizzi di porta I/O allocati.
u.Interrupt
Specifica un vettore di interrupt e un livello utilizzando i membri seguenti:
u.Interrupt.Level
Per le risorse non elaborate: specifica l'IRQL specifico del dispositivo (se appropriato per la piattaforma e il bus).
Per le risorse tradotte: specifica il DIRQL assegnato al dispositivo.
Per altre informazioni sulle risorse non elaborate e tradotte, vedere Osservazioni.
u.Interrupt.Group
Specifica il numero del gruppo di processori. Questo membro esiste solo se la costante NT_PROCESSOR_GROUPS è definita in fase di compilazione. Questo membro può essere diverso da zero solo in Windows 7 e versioni successive di Windows. I
u.Interrupt.Vector
Per le risorse non elaborate: specifica il vettore di interrupt specifico del bus del dispositivo , se appropriato per la piattaforma e il bus.
Per le risorse tradotte: specifica il vettore di interrupt di sistema globale assegnato al dispositivo.
Per altre informazioni sulle risorse non elaborate e tradotte, vedere Osservazioni.
u.Interrupt.Affinity
Contiene un valore KAFFINITYmaschera di bit tipizzata che indica il set di processori che il dispositivo può interrompere. Per indicare che il dispositivo può interrompere qualsiasi processore, questo membro è impostato su -1.
u.MessageInterrupt
Specifica un interrupt segnalato dal messaggio. Questo membro è un'unione. Usare u.MessageInterrupt.Raw per le risorse non elaborate e u.MessageInterrupt.Translated per le risorse tradotte. Questo tipo di risorsa viene restituito solo in Windows Vista e versioni successive del sistema operativo Windows.
Per altre informazioni sulle risorse non elaborate e tradotte, vedere Osservazioni.
u.MessageInterrupt.DUMMYUNIONNAME
Definisce l'unione DUMMYUNIONNAME.
u.MessageInterrupt.DUMMYUNIONNAME.Raw
Definisce la struttura
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Group
Specifica un numero di gruppo del processore. Questo membro esiste solo se NT_PROCESSOR_GROUPS è definito in fase di compilazione. Questo membro può essere diverso da zero solo in Windows 7 e versioni successive di Windows. I membri
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Reserved
Non utilizzato.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.MessageCount
Specifica il numero di interrupt con segnalazione di messaggi generati per questo driver.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Vector
Specifica il vettore di interrupt del dispositivo.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Affinity
Specifica un valore KAFFINITY che indica i processori che ricevono gli interrupt del dispositivo.
u.MessageInterrupt.DUMMYUNIONNAME.Translated
Il membro u.MessageInterrupt.Translated ha i membri seguenti:
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Level
Specifica il dispositivo IRQL (DIRQL) assegnato agli interrupt del dispositivo.
Specifica il dispositivo IRQL (DIRQL) assegnato agli interrupt del dispositivo.
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Group
Specifica un numero di gruppo del processore. Questo membro esiste solo se NT_PROCESSOR_GROUPS è definito in fase di compilazione. Questo membro può essere diverso da zero solo in Windows 7 e versioni successive di Windows. I membri Translated.Group e Translated.Affinity specificano un'affinità di gruppo che indica quali processori possono ricevere gli interrupt del dispositivo. Per specificare un'affinità per qualsiasi gruppo, impostare Translated.Group su ALL_PROCESSOR_GROUPS.
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Vector
Specifica il vettore di interrupt del dispositivo.
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Affinity
Specifica un valore KAFFINITY che identifica i processori che ricevono gli interrupt del dispositivo.
u.Memory
Specifica un intervallo di indirizzi di memoria, utilizzando i membri seguenti.
I driver per Windows Vista e versioni successive del sistema operativo Windows possono usare
u.Memory.Start
Per le risorse non elaborate: specifica l'indirizzo fisico relativo al bus del più basso di un intervallo di indirizzi di memoria contigui allocati al dispositivo.
Per le risorse tradotte: specifica l'indirizzo fisico del sistema più basso di un intervallo di indirizzi di memoria contigui allocati al dispositivo.
Per altre informazioni sulle risorse non elaborate e tradotte, vedere Osservazioni.
u.Memory.Length
Specifica la lunghezza, espressa in byte, dell'intervallo di indirizzi di memoria allocati.
u.Dma
Specifica un'impostazione DMA, utilizzando uno dei membri seguenti:
u.Dma.Channel
Specifica il numero del canale DMA in un controller DMA di sistema che il dispositivo può usare.
u.Dma.Port
Specifica il numero della porta DMA che un dispositivo di tipo MCA può usare.
u.Dma.Reserved1
Non utilizzato.
u.DmaV3
Specifica le impostazioni DMA per un driver che usa la versione 3 della struttura DMA_OPERATIONS.
Il membro u.DmaV3
u.DmaV3.Channel
Specifica il numero del canale DMA nel controller DMA di sistema allocato al dispositivo.
u.DmaV3.RequestLine
Specifica il numero della riga di richiesta nel controller DMA di sistema allocato al dispositivo.
u.DmaV3.TransferWidth
Specifica la larghezza, in bit, del bus di dati utilizzato dal controller DMA di sistema allocato al dispositivo per trasferire i dati da o verso il dispositivo.
u.DmaV3.Reserved1
Non utilizzato.
u.DmaV3.Reserved2
Non utilizzato.
u.DmaV3.Reserved3
Non utilizzato.
u.DevicePrivate
Riservato per l'uso del sistema.
u.DevicePrivate.Data[3]
u.BusNumber
Specifica i numeri di bus utilizzando i membri seguenti:
u.BusNumber.Start
Specifica il numero più basso di un intervallo di bus contigui allocati al dispositivo.
u.BusNumber.Length
Specifica il numero di bus allocati al dispositivo.
u.BusNumber.Reserved
Non utilizzato.
u.DeviceSpecificData
Specifica le dimensioni di una struttura privata specifica del dispositivo aggiunta alla fine della struttura CM_PARTIAL_RESOURCE_DESCRIPTOR. Se si usa u.DeviceSpecificData, la struttura CM_PARTIAL_RESOURCE_DESCRIPTOR deve essere l'ultima nella matrice di CM_PARTIAL_RESOURCE_LIST.
Esempi di strutture specifiche del dispositivo includono CM_FLOPPY_DEVICE_DATA, CM_KEYBOARD_DEVICE_DATA, CM_SCSI_DEVICE_DATAe CM_SERIAL_DEVICE_DATA.
u.DeviceSpecificData.DataSize
Specifica il numero di byte accodati alla fine della struttura CM_PARTIAL_RESOURCE_DESCRIPTOR.
u.DeviceSpecificData.Reserved1
Non utilizzato.
u.DeviceSpecificData.Reserved2
Non utilizzato.
u.Memory40
Specifica un intervallo di indirizzi di memoria, utilizzando i membri seguenti.
Il membro u.Memory40
u.Memory40.Start
Per le risorse non elaborate: specifica l'indirizzo fisico relativo al bus del più basso di un intervallo di indirizzi di memoria contigui allocati al dispositivo.
Per le risorse tradotte: specifica l'indirizzo fisico del sistema più basso di un intervallo di indirizzi di memoria contigui allocati al dispositivo.
Per altre informazioni sulle risorse non elaborate e tradotte, vedere Osservazioni.
u.Memory40.Length40
Contiene i 32 bit alti della lunghezza a 40 bit, in byte, dell'intervallo di indirizzi di memoria allocati. I 8 bit più bassi vengono considerati come zero.
u.Memory48
Specifica un intervallo di indirizzi di memoria, utilizzando i membri seguenti.
Il membro u.Memory48
u.Memory48.Start
Per le risorse non elaborate: specifica l'indirizzo fisico relativo al bus del più basso di un intervallo di indirizzi di memoria contigui allocati al dispositivo.
Per le risorse tradotte: specifica l'indirizzo fisico del sistema più basso di un intervallo di indirizzi di memoria contigui allocati al dispositivo.
Per altre informazioni sulle risorse non elaborate e tradotte, vedere Osservazioni.
u.Memory48.Length48
Contiene i 32 bit alti della lunghezza a 48 bit, in byte, dell'intervallo di indirizzi di memoria allocati. I 16 bit più bassi vengono considerati zero.
u.Memory64
Specifica un intervallo di indirizzi di memoria, utilizzando i membri seguenti.
Il membro u.Memory64
u.Memory64.Start
Per le risorse non elaborate: specifica l'indirizzo fisico relativo al bus del più basso di un intervallo di indirizzi di memoria contigui allocati al dispositivo.
Per le risorse tradotte: specifica l'indirizzo fisico del sistema più basso di un intervallo di indirizzi di memoria contigui allocati al dispositivo.
Per altre informazioni sulle risorse non elaborate e tradotte, vedere Osservazioni.
u.Memory64.Length64
Contiene i 32 bit alti della lunghezza a 64 bit, in byte, dell'intervallo di indirizzi di memoria allocati. I 32 bit più bassi vengono considerati zero.
u.Connection
Specifica una connessione a un bus seriale o porta serialeo a un set di uno o più pin di I/ O per utilizzo generico (GPIO). I membri seguenti descrivono questa connessione.
Il membro u.Connection
u.Connection.Class
Specifica la classe di connessione. Questo membro è impostato su uno dei valori seguenti:
Valore | Significato |
---|---|
CM_RESOURCE_CONNECTION_CLASS_GPIO | Accedere al dispositivo tramite uno o più pin in un controller GPIO. |
CM_RESOURCE_CONNECTION_CLASS_SERIAL | Accedere al dispositivo tramite un bus seriale o una porta seriale. |
u.Connection.Type
Specifica il tipo di connessione.
Se Class = CM_RESOURCE_CONNECTION_CLASS_GPIO, Type è impostato sul valore seguente:
Valore | Significato |
---|---|
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO | Accedere al dispositivo tramite pin GPIO configurati per l'I/O. |
Un pin GPIO configurato come input di richiesta di interrupt è accessibile come risorsa di interrupt normale (CmResourceTypeInterrupt).
Se Class = CM_RESOURCE_CONNECTION_CLASS_SERIAL, Type è impostato su uno dei valori seguenti:
Valore | Significato |
---|---|
CM_RESOURCE_CONNECTION_TYPE_SERIAL_I2C | Il dispositivo è connesso a un bus I2C. |
CM_RESOURCE_CONNECTION_TYPE_SERIAL_SPI | Il dispositivo è connesso a un bus SPI. |
CM_RESOURCE_CONNECTION_TYPE_SERIAL_UART | Il dispositivo è connesso a una porta seriale. |
u.Connection.Reserved1
Non utilizzato.
u.Connection.Reserved2
Non utilizzato.
u.Connection.IdLowPart
Contiene i 32 bit inferiori dell'ID connessione a 64 bit.
u.Connection.IdHighPart
Contiene i 32 bit superiori dell'ID connessione a 64 bit.
Osservazioni
Una struttura CM_PARTIAL_RESOURCE_DESCRIPTOR può descrivere una risorsa non elaborata (relativa al bus) o una risorsa tradotta (fisica del sistema), a seconda della routine o dell'IRP con cui viene usata. Per altre informazioni, vedere risorse non elaborate e tradotte e IRP_MN_START_DEVICE.
È possibile 1 soloblocco DeviceSpecificData. Deve trovarsi alla fine di tutti i descrittori di risorse in un blocco descrittore completo.
Fabbisogno
Requisito | Valore |
---|---|
intestazione |
wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h) |