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