struttura IO_RESOURCE_DESCRIPTOR (wdm.h)

La struttura IO_RESOURCE_DESCRIPTOR descrive un intervallo di risorse hardware non elaborate, di un tipo, che può essere usato da un dispositivo. Una matrice di strutture IO_RESOURCE_DESCRIPTOR è contenuta all'interno di ogni struttura IO_RESOURCE_LIST .

Sintassi

typedef struct _IO_RESOURCE_DESCRIPTOR {
  UCHAR  Option;
  UCHAR  Type;
  UCHAR  ShareDisposition;
  UCHAR  Spare1;
  USHORT Flags;
  USHORT Spare2;
  union {
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Port;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory;
    struct {
      ULONG             MinimumVector;
      ULONG             MaximumVector;
#if ...
      IRQ_DEVICE_POLICY AffinityPolicy;
      USHORT            Group;
#else
      IRQ_DEVICE_POLICY AffinityPolicy;
#endif
      IRQ_PRIORITY      PriorityPolicy;
      KAFFINITY         TargetedProcessors;
    } Interrupt;
    struct {
      ULONG MinimumChannel;
      ULONG MaximumChannel;
    } Dma;
    struct {
      ULONG RequestLine;
      ULONG Reserved;
      ULONG Channel;
      ULONG TransferWidth;
    } DmaV3;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Generic;
    struct {
      ULONG Data[3];
    } DevicePrivate;
    struct {
      ULONG Length;
      ULONG MinBusNumber;
      ULONG MaxBusNumber;
      ULONG Reserved;
    } BusNumber;
    struct {
      ULONG Priority;
      ULONG Reserved1;
      ULONG Reserved2;
    } ConfigData;
    struct {
      ULONG            Length40;
      ULONG            Alignment40;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory40;
    struct {
      ULONG            Length48;
      ULONG            Alignment48;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory48;
    struct {
      ULONG            Length64;
      ULONG            Alignment64;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory64;
    struct {
      UCHAR Class;
      UCHAR Type;
      UCHAR Reserved1;
      UCHAR Reserved2;
      ULONG IdLowPart;
      ULONG IdHighPart;
    } Connection;
  } u;
} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;

Members

Option

Specifica se questa descrizione della risorsa è necessaria, preferita o alternativa. È necessario usare uno dei valori seguenti:

Valore Significato
0 L'intervallo di risorse specificato è obbligatorio, a meno che non vengano specificati anche intervalli alternativi.
IO_RESOURCE_PREFERRED L'intervallo di risorse specificato è preferito a qualsiasi intervallo alternativo.
IO_RESOURCE_ALTERNATIVE L'intervallo di risorse specificato è un'alternativa all'intervallo precedente. Ad esempio, se una struttura IO_RESOURCE_DESCRIPTOR specifica IRQ 5, con IO_RESOURCE_PREFERRED impostata e la struttura successiva specifica IRQ 3, con IO_RESOURCE_ALTERNATIVE impostata, il gestore PnP assegna IRQ 3 al dispositivo solo se IRQ 5 non è disponibile. È possibile specificare più alternative per ogni risorsa. È possibile impostare sia IO_RESOURCE_ALTERNATIVE che IO_RESOURCE_PREFERRED, che indica un'alternativa preferita.
IO_RESOURCE_DEFAULT Non usato.

Type

Identifica il tipo di risorsa. Per un elenco di valori validi, vedere il membro Type della struttura CM_PARTIAL_RESOURCE_DESCRIPTOR .

ShareDisposition

Indica se la risorsa descritta può essere condivisa. Per un elenco di valori validi, vedere il membro ShareDisposition della struttura CM_PARTIAL_RESOURCE_DESCRIPTOR .

Spare1

Non usato.

Flags

Contiene flag di bit specifici del tipo di risorsa. La tabella seguente mostra i flag validi se Type = CmResourceTypeInterrupt:

Valore Significato
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 Se questo flag è impostato, il membro u.Interrupt include dati che descrivono i criteri di interruzione del dispositivo.
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT 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.
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.

Per un elenco di flag validi per altri tipi di risorse, vedere la descrizione del membro Flag della struttura CM_PARTIAL_RESOURCE_DESCRIPTOR .

Spare2

Non usato.

u

Definisce l'unione u .

u.Port

Specifica un intervallo di indirizzi di porta di I/O, usando i membri seguenti.

I driver devono usare RtlIoDecodeMemIoResource e RtlIoEncodeMemIoResource per leggere e aggiornare questo membro, anziché aggiornarlo direttamente.

u.Port.Length

Lunghezza, in byte, dell'intervallo di indirizzi di porta I/O assegnabili.

u.Port.Alignment

Allineamento, in byte, a cui deve essere conforme l'indirizzo iniziale assegnato. L'indirizzo iniziale assegnato deve essere un numero intero multiplo di Allineamento.

u.Port.MinimumAddress

Indirizzo di porta di I/O minimo relativo al bus che può essere assegnato al dispositivo.

u.Port.MaximumAddress

Indirizzo di porta di I/O massimo relativo al bus che può essere assegnato al dispositivo.

u.Memory

Specifica un intervallo di indirizzi di memoria, usando i membri seguenti:

I driver per Windows Vista e versioni successive del sistema operativo Windows devono usare RtlIoDecodeMemIoResource e RtlIoEncodeMemIoResource per leggere e aggiornarlo direttamente.

u.Memory.Length

Lunghezza, in byte, dell'intervallo di indirizzi di memoria assegnabili.

u.Memory.Alignment

Allineamento, in byte, a cui deve essere conforme l'indirizzo iniziale assegnato. L'indirizzo iniziale assegnato deve essere un numero intero multiplo di Allineamento.

u.Memory.MinimumAddress

Indirizzo di memoria relativo al bus minimo che può essere assegnato al dispositivo.

u.Memory.MaximumAddress

Indirizzo di memoria relativo al bus massimo che può essere assegnato al dispositivo.

u.Interrupt

Specifica un intervallo di vettori di interruzione usando i membri seguenti:

u.Interrupt.MinimumVector

Vettore minimo relativo al bus che può essere assegnato al dispositivo.

u.Interrupt.MaximumVector

Vettore massimo relativo al bus che può essere assegnato al dispositivo.

Se il bit di CM_RESOURCE_INTERRUPT_MESSAGE flag è impostato, i valori dei membri MinimumVector e MaximumVector hanno significati speciali. Per altre informazioni, vedere Uso dei descrittori di risorse di interruzione.

Il sistema fornisce i membri aggiuntivi seguenti in Windows Vista e versioni successive del sistema operativo Windows:

u.Interrupt.AffinityPolicy

Specifica un valore IRQ_DEVICE_POLICY che indica come il sistema deve distribuire gli interruzioni di un dispositivo tra processori.

Specifica un valore IRQ_DEVICE_POLICY che indica come il sistema deve distribuire gli interruzioni di un dispositivo tra processori.

u.Interrupt.Group

Specifica un numero di gruppo del processore. Il gruppo è un membro valido ma facoltativo solo in Windows 7 e versioni successive di Windows. Questo membro esiste solo se NT_PROCESSOR_GROUPS è definito in fase di compilazione. Se il membro Gruppo esiste, i membri Group e TargetProcessors specificano insieme un'affinità di gruppo che identifica il set di processori che devono gestire gli interruzioni del dispositivo. Per specificare un'affinità per un determinato gruppo, impostare AffinityPolicy su IrqPolicySpecifiedProcessors e impostare Group sul numero di gruppo appropriato. Inoltre, TargetProcessors deve specificare i processori di destinazione nel gruppo. Se si imposta AffinityPolicy su un valore diverso da IrqPolicySpecifiedProcessors, impostare Group su ALL_PROCESSOR_GROUPS per indicare che il driver è a conoscenza del gruppo , progettato per gestire le informazioni sui gruppi di processori. Un driver non può specificare processori di destinazione se Group è uguale a ALL_PROCESSOR_GROUPS; tali specifiche di destinazione vengono ignorate.

u.Interrupt.PriorityPolicy

Specifica un valore IRQ_PRIORITY che indica la priorità con cui il sistema deve inviare gli interruzioni del dispositivo.

u.Interrupt.TargetedProcessors

Specifica un valore KAFFINITY che indica quali processori devono gestire gli interruzioni del dispositivo. Questo valore viene usato solo se AffinityPolicy è IrqPolicySpecifiedProcessors.

u.Dma

Specifica un'impostazione DMA usando uno dei membri seguenti:

u.Dma.MinimumChannel

Canale DMA relativo al bus minimo che può essere assegnato al dispositivo.

u.Dma.MaximumChannel

Canale DMA relativo al bus massimo che può essere assegnato al dispositivo.

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

Numero della riga di richiesta nel controller DMA di sistema allocato al dispositivo.

u.DmaV3.Reserved

Non usato.

u.DmaV3.Channel

Numero del canale DMA 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.Generic

Non usato.

u.Generic.Length

Non usato.

u.Generic.Alignment

Non usato.

u.Generic.MinimumAddress

Non usato.

u.Generic.MaximumAddress

Non usato.

u.DevicePrivate

Riservato per l'utilizzo nel sistema.

u.DevicePrivate.Data[3]

Riservato per l'utilizzo nel sistema.

u.BusNumber

Specifica i numeri del bus usando i membri seguenti:

u.BusNumber.Length

Numero di numeri di bus necessari.

u.BusNumber.MinBusNumber

Numero minimo del bus relativo al bus che può essere assegnato al dispositivo.

u.BusNumber.MaxBusNumber

Numero massimo del bus relativo al bus che può essere assegnato al dispositivo.

u.BusNumber.Reserved

Non usato.

u.ConfigData

Riservato per l'utilizzo nel sistema.

u.ConfigData.Priority

Definisce la priorità del membro ULONG.

u.ConfigData.Reserved1

Non usato.

u.ConfigData.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 per queste versioni di Windows devono usare RtlIoDecodeMemIoResource e RtlIoEncodeMemIoResource per leggere e aggiornare questo membro, anziché aggiornarlo direttamente.

u.Memory40.Length40

I 32 bit elevati della lunghezza a 40 bit, in byte, dell'intervallo di indirizzi di memoria assegnabili. I 8 bit inferiori vengono considerati zero.

u.Memory40.Alignment40

I 32 bit elevati dell'allineamento a 40 bit, in byte, che l'indirizzo iniziale assegnato deve rispettare. I 8 bit inferiori vengono considerati zero. L'indirizzo iniziale assegnato sarà un multiplo dell'allineamento.

u.Memory40.MinimumAddress

Indirizzo di memoria relativo al bus minimo che può essere assegnato al dispositivo.

u.Memory40.MaximumAddress

Indirizzo di memoria relativo al bus massimo che può essere assegnato al dispositivo.

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 per queste versioni di Windows devono usare RtlIoDecodeMemIoResource e RtlIoEncodeMemIoResource per leggere e aggiornare questo membro, anziché aggiornarlo direttamente.

u.Memory48.Length48

I 32 bit elevati della lunghezza a 48 bit, in byte, dell'intervallo di indirizzi di memoria assegnabili. I 16 bit inferiori vengono considerati zero.

u.Memory48.Alignment48

I 32 bit elevati dell'allineamento a 48 bit, in byte, che l'indirizzo iniziale assegnato deve rispettare. I 16 bit inferiori vengono considerati zero. L'indirizzo iniziale assegnato sarà un multiplo dell'allineamento.

u.Memory48.MinimumAddress

Indirizzo di memoria relativo al bus minimo che può essere assegnato al dispositivo.

u.Memory48.MaximumAddress

Indirizzo di memoria relativo al bus massimo che può essere assegnato al dispositivo.

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 per Windows Vista e versioni successive del sistema operativo Windows devono usare RtlIoDecodeMemIoResource e RtlIoEncodeMemIoResource per leggere e aggiornarlo direttamente.

u.Memory64.Length64

I 32 bit elevati della lunghezza a 64 bit, in byte, dell'intervallo di indirizzi di memoria assegnabili. I 32 bit inferiori vengono trattati come zero.

u.Memory64.Alignment64

I 32 bit elevati dell'allineamento a 64 bit, in byte, che l'indirizzo iniziale assegnato deve rispettare. I 32 bit inferiori vengono trattati come zero. L'indirizzo iniziale assegnato sarà un multiplo dell'allineamento.

u.Memory64.MinimumAddress

Indirizzo di memoria relativo al bus minimo che può essere assegnato al dispositivo.

u.Memory64.MaximumAddress

Indirizzo di memoria relativo al bus massimo che può essere assegnato al dispositivo.

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.

Il membro u.Connection è disponibile a partire da Windows 8.

I membri seguenti descrivono questa connessione.

u.Connection.Class

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

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

I 32 bit inferiori dell'ID connessione a 64 bit.

u.Connection.IdHighPart

I 32 bit superiori dell'ID connessione a 64 bit.

Requisiti

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

Vedi anche

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt