Condividi tramite


struttura IO_RESOURCE_DESCRIPTOR (miniport.h)

La struttura IO_RESOURCE_DESCRIPTOR descrive una gamma di risorse hardware non elaborate, di un tipo, che possono essere usate 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;

Membri

Option

Specifica se questa descrizione della risorsa è obbligatoria, 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 è preferibile 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 impostato e la struttura successiva specifica IRQ 3, con IO_RESOURCE_ALTERNATIVE impostato, 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 utilizzato.

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

Flags

Contiene flag di bit specifici del tipo di risorsa. Nella tabella seguente vengono illustrati i flag validi se Tipo = CmResourceTypeInterrupt.

Valore Significato
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 Se questo flag è impostato, il membro u.Interrupt include i dati che descrivono i criteri di interruzione del dispositivo.
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT L'interrupt è un interrupt secondario. 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. 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 Flag membro della struttura CM_PARTIAL_RESOURCE_DESCRIPTOR.

Spare2

Non utilizzato.

u

Definisce l'unione u.

u.Port

Specifica un intervallo di indirizzi di porta di I/O, utilizzando 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 multiplo intero di Alignment.

u.Port.MinimumAddress

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

u.Port.MaximumAddress

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

u.Memory

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

I driver devono usare RtlIoDecodeMemIoResource e RtlIoEncodeMemIoResource per leggere e aggiornare questo membro, anziché 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 multiplo intero di Alignment.

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 interrupt utilizzando i membri seguenti:

u.Interrupt.MinimumVector

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

u.Interrupt.MaximumVector

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

Se viene impostato il bit del flag CM_RESOURCE_INTERRUPT_MESSAGE, i valori dell'MinimumVector e MaximumVector membri hanno significati speciali. Per altre informazioni, vedere Using Interrupt Resource Descriptors.

u.Interrupt.AffinityPolicy

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

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

u.Interrupt.Group

Specifica un numero di gruppo del processore. Group è un membro valido (ma facoltativo) di u.Interrupt. Questo membro esiste solo se NT_PROCESSOR_GROUPS è definito in fase di compilazione. Se il membro Group esiste, il group e TargetProcessors membri specificano un'affinità di gruppo che identifica il set di processori che devono gestire gli interrupt 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 è compatibile con il gruppo,ovvero 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 interrupt del dispositivo.

u.Interrupt.TargetedProcessors

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

u.Dma

Specifica un'impostazione DMA, utilizzando 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 utilizzato.

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

u.Generic

Non utilizzato.

u.Generic.Length

Non utilizzato.

u.Generic.Alignment

Non utilizzato.

u.Generic.MinimumAddress

Non utilizzato.

u.Generic.MaximumAddress

Non utilizzato.

u.DevicePrivate

Riservato per l'uso del sistema.

u.DevicePrivate.Data[3]

Riservato per l'uso del sistema.

u.BusNumber

Specifica i numeri di bus utilizzando i membri seguenti:

u.BusNumber.Length

Numero di numeri di autobus necessari.

u.BusNumber.MinBusNumber

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

u.BusNumber.MaxBusNumber

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

u.BusNumber.Reserved

Non utilizzato.

u.ConfigData

Riservato per l'uso del sistema.

u.ConfigData.Priority

Riservato per l'uso del sistema.

u.ConfigData.Reserved1

Riservato per l'uso del sistema.

u.ConfigData.Reserved2

Riservato per l'uso del sistema.

u.Memory40

Specifica un intervallo di indirizzi di memoria, utilizzando i membri seguenti.

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

u.Memory40.Length40

I 32 bit alti 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 alti dell'allineamento a 40 bit, in byte, a cui deve essere conforme l'indirizzo iniziale assegnato. 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, utilizzando i membri seguenti.

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

u.Memory48.Length48

I 32 bit alti 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 alti dell'allineamento a 48 bit, in byte, a cui deve essere conforme l'indirizzo iniziale assegnato. 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, utilizzando i membri seguenti.

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

u.Memory64.Length64

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

u.Memory64.Alignment64

I 32 bit alti dell'allineamento a 64 bit, in byte, a cui deve essere conforme l'indirizzo iniziale assegnato. I 32 bit inferiori vengono considerati 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 porta serialeo a un set di uno o più pin di I/ O per utilizzo generico (GPIO).

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

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

u.Connection.IdHighPart

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

Fabbisogno

Requisito Valore
intestazione miniport.h (include Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)

Vedere anche

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt