Condividi tramite


CM_PARTIAL_RESOURCE_DESCRIPTOR struttura (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;

Members

Type

Identifica il tipo di risorsa. Il valore costante specificato per Type indica la 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 annotato.

Valore del tipo sottostruttura membro u
CmResourceTypePort u.Port
CmResourceTypeInterrupt u.Interrupt o u.MessageInterrupt. Se il flag di CM_RESOURCE_INTERRUPT_MESSAGE flag di flag è impostato, usare u.MessageInterrupt; in caso contrario, usare u.Interrupt.
CmResourceTypeMemory u.Memory
CmResourceTypeMemoryLarge Uno degli u.Memory40, u.Memory48 o u.Memory64. I flag CM_RESOURCE_MEMORY_LARGE_XXX impostati nel membro Flags 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'utilizzo nel sistema.
CmResourceTypeNonArbitrated Non usato.

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.
CmResourceShared 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 bit per bit-ORed in base alle esigenze):

Tipo di risorsa CmResourceTypePort

Flag Definizione
CM_RESOURCE_PORT_MEMORY Il dispositivo è accessibile nello spazio degli indirizzi di memoria.
CM_RESOURCE_PORT_IO Il dispositivo è accessibile 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 subtrattiva". In generale, i dispositivi PCI usano il decodificatore positivo e gli autobus ISA usano decodifica subtrattiva.
CM_RESOURCE_PORT_PASSIVE_DECODE Il dispositivo decodifica la porta, ma il driver non lo usa.
CM_RESOURCE_PORT_WINDOW_DECODE Riservato per l'utilizzo nel sistema.

Tipo di risorsa CmResourceTypeInterrupt

Flag Definizione
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE La riga IRQ viene attivata a livello di livello. Questi IRQs sono in genere condivisibili.
CM_RESOURCE_INTERRUPT_LATCHED La riga IRQ viene attivata come perimetrale.
CM_RESOURCE_INTERRUPT_MESSAGE Se questo flag è impostato, l'interruzione è un interruzione segnalato dal messaggio. In caso contrario, l'interruzione è un interruzione basata su riga.
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED Non usato con la struttura CM_PARTIAL_RESOURCE_DESCRIPTOR . Per altre informazioni su questo flag, vedere IO_RESOURCE_DESCRIPTOR.
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT L'interruzione è un interruzione secondaria. Questo flag può essere impostato a partire da Windows 8. Per altre informazioni sugli interruzioni secondarie, vedere Interruzioni GPIO.
CM_RESOURCE_INTERRUPT_WAKE_HINT L'interruzione è in grado di svegliare il sistema operativo da uno stato di inattività a bassa potenza 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

Flag 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 combinata di scrittura è 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

Flag 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

Flag 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 Digitare 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 usato.

u.Generic.Start

Non usato.

u.Generic.Length

Non usato.

u.Port

Specifica un intervallo di indirizzi di porta di I/O usando 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 I/O contigui allocati al dispositivo.

Per le risorse tradotte: specifica l'indirizzo fisico di sistema più basso di un intervallo di indirizzi di porte 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 bus 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 membri gruppo e affinità specificano insieme un'affinità di gruppo che indica quali processori il dispositivo può interrompere. 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 interruzione 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 di maschera di bit tipizzato KAFFINITY 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 di processori. 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 gruppo e affinità specificano insieme un'affinità di gruppo che indica quali processori possono ricevere le interruzioni del dispositivo. Per specificare un'affinità per qualsiasi gruppo, impostare Group su ALL_PROCESSOR_GROUPS.

u.MessageInterrupt.DUMMYUNIONNAME.Raw.Reserved

Non usato.

u.MessageInterrupt.DUMMYUNIONNAME.Raw.MessageCount

Specifica il numero di interruzioni segnalate dal messaggio generate per questo driver.

u.MessageInterrupt.DUMMYUNIONNAME.Raw.Vector

Specifica il vettore di interruzione 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 di processori. 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 insieme un'affinità di gruppo che indica quali processori possono ricevere le interruzioni 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 interruzione 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, 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 usato.

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 che il controller DMA di sistema allocato al dispositivo usa per trasferire i dati da o verso il dispositivo.

u.DmaV3.Reserved1

Non usato.

u.DmaV3.Reserved2

Non usato.

u.DmaV3.Reserved3

Non usato.

u.DevicePrivate

Riservato per l'utilizzo nel sistema.

u.DevicePrivate.Data[3]

u.BusNumber

Specifica i numeri del bus usando i membri seguenti:

u.BusNumber.Start

Specifica il numero più basso di un intervallo di autobus contigui allocati al dispositivo.

u.BusNumber.Length

Specifica il numero di autobus allocati al dispositivo.

u.BusNumber.Reserved

Non usato.

u.DeviceSpecificData

Specifica le dimensioni di una struttura privata specifica del dispositivo aggiunta alla fine della struttura CM_PARTIAL_RESOURCE_DESCRIPTOR. Se viene usato u.DeviceSpecificData , la struttura di 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_DATA e CM_SERIAL_DEVICE_DATA.

u.DeviceSpecificData.DataSize

Specifica il numero di byte aggiunti alla fine della struttura CM_PARTIAL_RESOURCE_DESCRIPTOR .

u.DeviceSpecificData.Reserved1

Non usato.

u.DeviceSpecificData.Reserved2

Non usato.

u.Memory40

Specifica un intervallo di indirizzi di memoria, usando 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 più basso di un intervallo di indirizzi di memoria contigui allocati al dispositivo.

Per le risorse tradotte: specifica l'indirizzo fisico di sistema dell'intervallo minimo 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 elevati della lunghezza a 40 bit, in byte, dell'intervallo di indirizzi di memoria allocati. I 8 bit più bassi vengono considerati zero.

u.Memory48

Specifica un intervallo di indirizzi di memoria, usando 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 più basso di un intervallo di indirizzi di memoria contigui allocati al dispositivo.

Per le risorse tradotte: specifica l'indirizzo fisico di sistema dell'intervallo minimo 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 elevati della lunghezza a 48 bit, in byte, dell'intervallo di indirizzi di memoria allocati. I 16 bit più bassi vengono considerati come zero.

u.Memory64

Specifica un intervallo di indirizzi di memoria, usando 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 più basso di un intervallo di indirizzi di memoria contigui allocati al dispositivo.

Per le risorse tradotte: specifica l'indirizzo fisico di sistema dell'intervallo minimo 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 elevati 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 a una porta seriale o a un set di pin di I/O (GPIO) per utilizzo generico. 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 su 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 I/O.

Un pin GPIO configurato come input della richiesta di interruzione viene accessibile come risorsa di interruzione 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 usato.

u.Connection.Reserved2

Non usato.

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.

Commenti

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

Può essere presente solo 1 blocco DeviceSpecificData. Deve trovarsi alla fine di tutti i descrittori di risorse in un blocco di descrittore completo.

Requisiti

Requisito Valore
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h)

Vedi 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