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