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 u.Memory40, u.Memory48o u.Memory64. I flag di XXX CM_RESOURCE_MEMORY_LARGE_CM_RESOURCE_MEMORY_LARGE_impostati nel membro flag determinano la struttura utilizzata.
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 anziché il membro Dma . Il membro DmaV3 è disponibile a partire da Windows 8.

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 group e affinity membri specificano un'affinità di gruppo che indica quali processori possono interrompere il dispositivo. Per specificare un'affinità per qualsiasi gruppo, impostare Group su ALL_PROCESSOR_GROUPS.

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

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 group e affinity specificano un'affinità di gruppo che indica quali processori possono ricevere gli interrupt del dispositivo. Per specificare un'affinità per qualsiasi gruppo, impostare Group su ALL_PROCESSOR_GROUPS.

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 RtlCmDecodeMemIoResource e RtlCmEncodeMemIoResource per leggere e aggiornare il membro u.Memory anziché aggiornarlo direttamente.

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 è disponibile a partire da Windows 8.

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 è disponibile solo in Windows Vista e versioni successive del sistema operativo Windows. I driver devono usare RtlCmDecodeMemIoResource e RtlCmEncodeMemIoResource per leggere e aggiornare questo membro, anziché aggiornarlo direttamente.

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 è disponibile solo in Windows Vista e versioni successive del sistema operativo Windows. I driver devono usare RtlCmDecodeMemIoResource e RtlCmEncodeMemIoResource per leggere e aggiornare questo membro, anziché aggiornarlo direttamente.

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 è disponibile solo in Windows Vista e versioni successive del sistema operativo Windows. I driver devono usare RtlCmDecodeMemIoResource e RtlCmEncodeMemIoResource per leggere e aggiornare questo membro, anziché aggiornarlo direttamente.

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 è disponibile a partire da Windows 8.

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)

Vedere anche

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