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)

Consulte también

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt