estructura IO_RESOURCE_DESCRIPTOR (wdm.h)
La estructura IO_RESOURCE_DESCRIPTOR describe un rango de recursos de hardware sin procesar, de un tipo, que un dispositivo puede usar. Una matriz de estructuras de IO_RESOURCE_DESCRIPTOR se encuentra dentro de cada estructura IO_RESOURCE_LIST .
Sintaxis
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;
Miembros
Option
Especifica si esta descripción de recursos es necesaria, preferida o alternativa. Se debe usar uno de los valores siguientes:
Valor | Significado |
---|---|
0 | Se requiere el intervalo de recursos especificado, a menos que también se especifiquen rangos alternativos. |
IO_RESOURCE_PREFERRED | El intervalo de recursos especificado se prefiere a cualquier intervalo alternativo. |
IO_RESOURCE_ALTERNATIVE | El intervalo de recursos especificado es una alternativa al intervalo anterior. Por ejemplo, si una estructura de IO_RESOURCE_DESCRIPTOR especifica IRQ 5, con IO_RESOURCE_PREFERRED establecido y la estructura siguiente especifica IRQ 3, con IO_RESOURCE_ALTERNATIVE establecido, el administrador de PnP asigna IRQ 3 al dispositivo solo si IRQ 5 no está disponible. Se pueden especificar varias alternativas para cada recurso. Se pueden establecer IO_RESOURCE_ALTERNATIVE y IO_RESOURCE_PREFERRED, lo que indica una alternativa preferida. |
IO_RESOURCE_DEFAULT | No se usa. |
Type
Identifica el tipo de recurso. Para obtener una lista de valores válidos, vea el miembro Type de la estructura CM_PARTIAL_RESOURCE_DESCRIPTOR .
ShareDisposition
Indica si se puede compartir el recurso descrito. Para obtener una lista de valores válidos, vea el miembro ShareDisposition de la estructura CM_PARTIAL_RESOURCE_DESCRIPTOR .
Spare1
No se usa.
Flags
Contiene marcas de bits específicas del tipo de recurso. En la tabla siguiente se muestran las marcas que son válidas si Type = CmResourceTypeInterrupt:
Valor | Significado |
---|---|
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE | La línea IRQ se desencadena a nivel. (Normalmente, estos IRQ se pueden compartir). |
CM_RESOURCE_INTERRUPT_LATCHED | La línea IRQ se desencadena de forma perimetral. |
CM_RESOURCE_INTERRUPT_MESSAGE | Si se establece esta marca, la interrupción es una interrupción señalada por mensaje. De lo contrario, la interrupción es una interrupción basada en líneas. |
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED | Si se establece esta marca, el miembro u.Interrupt incluye datos que describen la directiva de interrupción del dispositivo. |
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT | La interrupción es capaz de despertar el sistema operativo de un estado inactivo de bajo consumo o un estado de suspensión del sistema. Esta marca se puede establecer a partir de Windows 8. Para obtener más información sobre las funcionalidades de reactivación, consulte Habilitación de la reactivación del dispositivo. |
CM_RESOURCE_INTERRUPT_WAKE_HINT | La interrupción es capaz de despertar el sistema operativo de un estado inactivo de bajo consumo o un estado de suspensión del sistema. Esta marca se puede establecer a partir de Windows 8. Para obtener más información sobre las funcionalidades de reactivación, consulte Habilitación de la reactivación del dispositivo. |
Para obtener una lista de marcas válidas para otros tipos de recursos, consulte la descripción del miembro Flags de la estructura CM_PARTIAL_RESOURCE_DESCRIPTOR .
Spare2
No se usa.
u
Define la unión u .
u.Port
Especifica un intervalo de direcciones de puerto de E/S mediante los siguientes miembros.
Los controladores deben usar RtlIoDecodeMemIoResource y RtlIoEncodeMemIoResource para leer y actualizar este miembro, en lugar de actualizarlo directamente.
u.Port.Length
Longitud, en bytes, del intervalo de direcciones de puerto de E/S asignables.
u.Port.Alignment
La alineación, en bytes, a la que debe ajustarse la dirección inicial asignada. La dirección inicial asignada debe ser un entero múltiplo de Alignment.
u.Port.MinimumAddress
La dirección de puerto de E/S relativa al bus mínima que se puede asignar al dispositivo.
u.Port.MaximumAddress
Dirección máxima de puerto de E/S relativa a bus que se puede asignar al dispositivo.
u.Memory
Especifica un intervalo de direcciones de memoria, con los miembros siguientes:
Los controladores para Windows Vista y versiones posteriores del sistema operativo Windows deben usar RtlIoDecodeMemIoResource y RtlIoEncodeMemIoResource para leer y actualizar este miembro, en lugar de actualizarlo directamente.
u.Memory.Length
Longitud, en bytes, del intervalo de direcciones de memoria asignables.
u.Memory.Alignment
La alineación, en bytes, a la que debe ajustarse la dirección inicial asignada. La dirección inicial asignada debe ser un entero múltiplo de Alignment.
u.Memory.MinimumAddress
La dirección de memoria relativa al bus mínima que se puede asignar al dispositivo.
u.Memory.MaximumAddress
La dirección máxima de memoria relativa al bus que se puede asignar al dispositivo.
u.Interrupt
Especifica un intervalo de vectores de interrupción, utilizando los miembros siguientes:
u.Interrupt.MinimumVector
Vector mínimo relativo al bus que se puede asignar al dispositivo.
u.Interrupt.MaximumVector
Vector máximo relativo al bus que se puede asignar al dispositivo.
Si se establece el bit de marca CM_RESOURCE_INTERRUPT_MESSAGE , los valores de los miembros MinimumVector y MaximumVector tienen significados especiales. Para obtener más información, consulte Uso de descriptores de recursos de interrupción.
El sistema proporciona los siguientes miembros adicionales en Windows Vista y versiones posteriores del sistema operativo Windows:
u.Interrupt.AffinityPolicy
Especifica un valor de IRQ_DEVICE_POLICY que indica cómo debe distribuir el sistema las interrupciones de un dispositivo entre procesadores.
Especifica un valor de IRQ_DEVICE_POLICY que indica cómo debe distribuir el sistema las interrupciones de un dispositivo entre procesadores.
u.Interrupt.Group
Especifica un número de grupo de procesadores. El grupo es un miembro válido pero opcional de u.Interrupt solo en Windows 7 y versiones posteriores de Windows. Este miembro solo existe si NT_PROCESSOR_GROUPS se define en tiempo de compilación. Si el miembro Group existe, los miembros Group y TargetedProcessors juntos especifican una afinidad de grupo que identifica el conjunto de procesadores que deben controlar las interrupciones del dispositivo. Para especificar una afinidad para un grupo determinado, establezca AffinityPolicy en IrqPolicySpecifiedProcessors y establezca Group en el número de grupo adecuado. Además, TargetedProcessors debe especificar los procesadores de destino del grupo. Si establece AffinityPolicy en un valor distinto de IrqPolicySpecifiedProcessors, establezca Group en ALL_PROCESSOR_GROUPS para indicar que el controlador es compatible con grupos (es decir, diseñado para controlar la información sobre los grupos de procesadores). Un controlador no puede especificar procesadores de destino si Group es igual a ALL_PROCESSOR_GROUPS; estas especificaciones de destino se omiten.
u.Interrupt.PriorityPolicy
Especifica un valor de IRQ_PRIORITY que indica la prioridad con la que el sistema debe enviar las interrupciones del dispositivo.
u.Interrupt.TargetedProcessors
Especifica un valor KAFFINITY que indica qué procesadores deben controlar las interrupciones del dispositivo. Este valor solo se usa si AffinityPolicy es IrqPolicySpecifiedProcessors.
u.Dma
Especifica una configuración de DMA, con uno de los siguientes miembros:
u.Dma.MinimumChannel
Canal DMA relativo al bus mínimo que se puede asignar al dispositivo.
u.Dma.MaximumChannel
El canal DMA relativo al bus máximo que se puede asignar al dispositivo.
u.DmaV3
Especifica la configuración de DMA para un controlador que usa la versión 3 de la estructura de DMA_OPERATIONS .
El miembro u.DmaV3 está disponible a partir de Windows 8.
u.DmaV3.RequestLine
Número de la línea de solicitud en el controlador DMA del sistema que se asigna al dispositivo.
u.DmaV3.Reserved
No se usa.
u.DmaV3.Channel
Número del canal DMA en el controlador DMA del sistema que se asigna al dispositivo.
u.DmaV3.TransferWidth
Especifica el ancho, en bits, del bus de datos que el controlador DMA del sistema que se asigna al dispositivo usa para transferir datos hacia o desde el dispositivo.
u.Generic
No se utiliza.
u.Generic.Length
No se utiliza.
u.Generic.Alignment
No se utiliza.
u.Generic.MinimumAddress
No se utiliza.
u.Generic.MaximumAddress
No se utiliza.
u.DevicePrivate
Reservado para uso del sistema.
u.DevicePrivate.Data[3]
Reservado para uso del sistema.
u.BusNumber
Especifica los números de bus, con los miembros siguientes:
u.BusNumber.Length
Número de números de autobús necesarios.
u.BusNumber.MinBusNumber
Número mínimo de bus relativo al bus que se puede asignar al dispositivo.
u.BusNumber.MaxBusNumber
Número máximo de bus relativo al bus que se puede asignar al dispositivo.
u.BusNumber.Reserved
No se usa.
u.ConfigData
Reservado para uso del sistema.
u.ConfigData.Priority
Define la prioridad del miembro de ULONG.
u.ConfigData.Reserved1
No se utiliza.
u.ConfigData.Reserved2
No se utiliza.
u.Memory40
Especifica un intervalo de direcciones de memoria, utilizando los siguientes miembros.
El miembro u.Memory40 solo está disponible en Windows Vista y versiones posteriores del sistema operativo Windows. Los controladores de estas versiones de Windows deben usar RtlIoDecodeMemIoResource y RtlIoEncodeMemIoResource para leer y actualizar este miembro, en lugar de actualizarlo directamente.
u.Memory40.Length40
Los 32 bits altos de la longitud de 40 bits, en bytes, del intervalo de direcciones de memoria asignables. Los 8 bits inferiores se tratan como cero.
u.Memory40.Alignment40
Los 32 bits altos de la alineación de 40 bits, en bytes, a los que debe ajustarse la dirección inicial asignada. Los 8 bits inferiores se tratan como cero. La dirección inicial asignada será un múltiplo de la alineación.
u.Memory40.MinimumAddress
La dirección de memoria relativa al bus mínima que se puede asignar al dispositivo.
u.Memory40.MaximumAddress
La dirección máxima de memoria relativa al bus que se puede asignar al dispositivo.
u.Memory48
Especifica un intervalo de direcciones de memoria, utilizando los siguientes miembros.
El miembro u.Memory48 solo está disponible en Windows Vista y versiones posteriores del sistema operativo Windows. Los controladores de estas versiones de Windows deben usar RtlIoDecodeMemIoResource y RtlIoEncodeMemIoResource para leer y actualizar este miembro, en lugar de actualizarlo directamente.
u.Memory48.Length48
Los 32 bits altos de la longitud de 48 bits, en bytes, del intervalo de direcciones de memoria asignables. Los 16 bits inferiores se tratan como cero.
u.Memory48.Alignment48
Los 32 bits altos de la alineación de 48 bits, en bytes, a los que debe ajustarse la dirección inicial asignada. Los 16 bits inferiores se tratan como cero. La dirección inicial asignada será un múltiplo de la alineación.
u.Memory48.MinimumAddress
La dirección de memoria relativa al bus mínima que se puede asignar al dispositivo.
u.Memory48.MaximumAddress
La dirección máxima de memoria relativa al bus que se puede asignar al dispositivo.
u.Memory64
Especifica un intervalo de direcciones de memoria, utilizando los siguientes miembros.
El miembro u.Memory64 solo está disponible en Windows Vista y versiones posteriores del sistema operativo Windows. Los controladores para Windows Vista y versiones posteriores del sistema operativo Windows deben usar RtlIoDecodeMemIoResource y RtlIoEncodeMemIoResource para leer y actualizar este miembro, en lugar de actualizarlo directamente.
u.Memory64.Length64
Los 32 bits altos de la longitud de 64 bits, en bytes, del intervalo de direcciones de memoria asignables. Los 32 bits inferiores se tratan como cero.
u.Memory64.Alignment64
Los 32 bits altos de la alineación de 64 bits, en bytes, a los que debe ajustarse la dirección inicial asignada. Los 32 bits inferiores se tratan como cero. La dirección inicial asignada será un múltiplo de la alineación.
u.Memory64.MinimumAddress
La dirección de memoria relativa al bus mínima que se puede asignar al dispositivo.
u.Memory64.MaximumAddress
La dirección máxima de memoria relativa al bus que se puede asignar al dispositivo.
u.Connection
Especifica una conexión a un bus serie o a un puerto serie, o a un conjunto de una o varias patillas de E/S de uso general (GPIO).
El miembro u.Connection está disponible a partir de Windows 8.
Los miembros siguientes describen esta conexión.
u.Connection.Class
Clase de conexión. Este miembro se establece en uno de los valores siguientes:
Valor | Significado |
---|---|
CM_RESOURCE_CONNECTION_CLASS_GPIO | Acceda al dispositivo a través de una o varias patillas en un controlador GPIO. |
CM_RESOURCE_CONNECTION_CLASS_SERIAL | Acceda al dispositivo a través de un bus serie o un puerto serie. |
u.Connection.Type
Tipo de conexión. Si Class = CM_RESOURCE_CONNECTION_CLASS_GPIO, Type se establece en el siguiente valor:
Valor | Significado |
---|---|
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO | Acceda al dispositivo a través de patillas GPIO configuradas para E/S. |
Se accede a un pin GPIO configurado como entrada de solicitud de interrupción como un recurso de interrupción normal (CmResourceTypeInterrupt).
Si Class = CM_RESOURCE_CONNECTION_CLASS_SERIAL, Type se establece en uno de los valores siguientes:
Valor | Significado |
---|---|
CM_RESOURCE_CONNECTION_TYPE_SERIAL_I2C | El dispositivo está conectado a un bus I2C. |
CM_RESOURCE_CONNECTION_TYPE_SERIAL_SPI | El dispositivo está conectado a un bus SPI. |
CM_RESOURCE_CONNECTION_TYPE_SERIAL_UART | El dispositivo está conectado a un puerto serie. |
u.Connection.Reserved1
No se utiliza.
u.Connection.Reserved2
No se utiliza.
u.Connection.IdLowPart
Los 32 bits inferiores del identificador de conexión de 64 bits.
u.Connection.IdHighPart
Los 32 bits superiores del identificador de conexión de 64 bits.
Requisitos
Requisito | Valor |
---|---|
Header | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Miniport.h) |