IO_RESOURCE_DESCRIPTOR estructura (wdm.h)

La IO_RESOURCE_DESCRIPTOR describe una variedad de recursos de hardware sin procesar, de un tipo, que un dispositivo puede usar. Una matriz de IO_RESOURCE_DESCRIPTOR estructura se encuentra dentro de cada IO_RESOURCE_LIST estructura.

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 del recurso es obligatoria, preferida o alternativa. Se debe usar uno de los siguientes valores:

Value Significado
0
El intervalo de recursos especificado es necesario, a menos que también se especifiquen intervalos alternativos.
IO_RESOURCE_PREFERRED
Se prefiere el intervalo de recursos especificado a cualquier intervalo alternativo.
IO_RESOURCE_ALTERNATIVE
El intervalo de recursos especificado es una alternativa al intervalo anterior. Por ejemplo, si una estructura 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. Tanto IO_RESOURCE_ALTERNATIVE como IO_RESOURCE_PREFERRED se pueden establecer, 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 CM_PARTIAL_RESOURCE_DESCRIPTOR estructura.

ShareDisposition

Indica si se puede compartir el recurso descrito. Para obtener una lista de valores válidos, vea el miembro ShareDisposition de la CM_PARTIAL_RESOURCE_DESCRIPTOR estructura.

Spare1

Flags

Contiene marcas de bits que son específicas del tipo de recurso. En la tabla siguiente se muestran las marcas que son válidas si TypeCmResourceTypeInterrupt = .

Value Significado
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE
La línea IRQ se desencadena en el nivel. (Estas IRQ normalmente se pueden compartir).
CM_RESOURCE_INTERRUPT_LATCHED
La línea IRQ se desencadena en el borde.
CM_RESOURCE_INTERRUPT_MESSAGE
Si se establece esta marca, la interrupción es una interrupción con señal de mensaje. De lo contrario, la interrupción es una interrupción basada en línea. Esta marca se puede establecer a partir de Windows Vista.
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. Esta marca se puede establecer a partir de Windows Vista.
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT
La interrupción es una interrupción secundaria. Esta marca se puede establecer a partir de Windows 8. Para obtener más información sobre las interrupciones secundarias, vea Interrupciones de GPIO.
CM_RESOURCE_INTERRUPT_WAKE_HINT
La interrupción es capaz de activar el sistema operativo desde un estado de inactividad de bajo consumo o un estado de suspensión del sistema. Esta marca se puede establecer a partir de Windows 8. Para más información sobre las funcionalidades de reactivación, consulte Habilitación de la reactivación de dispositivos.

Para obtener una lista de marcas válidas para otros tipos de recursos, vea la descripción del miembro Flags de la CM_PARTIAL_RESOURCE_DESCRIPTOR estructura.

Spare2

u

port

Especifica un intervalo de direcciones de puerto de E/S con los miembros siguientes.

Los controladores de 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.

Length

Longitud, en bytes, del intervalo de direcciones de puerto de E/S asignables.

Alignment

Alineación, en bytes, a la que debe cumplirse la dirección inicial asignada. La dirección inicial asignada debe ser un múltiplo entero de Alignment.

MinimumAddress

Dirección de puerto de E/S relativa al bus mínima que se puede asignar al dispositivo.

MaximumAddress

Dirección de puerto de E/S máxima relativa al bus que se puede asignar al dispositivo.

u.Port

u.Port.Length

u.Port.Alignment

u.Port.MinimumAddress

u.Port.MaximumAddress

u.Memory

Especifica un intervalo de direcciones de memoria mediante los miembros siguientes:

Los controladores de 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

Alineación, en bytes, a la que debe cumplirse la dirección inicial asignada. La dirección inicial asignada debe ser un múltiplo entero de Alignment.

u.Memory.MinimumAddress

Dirección de memoria relativa de bus mínima que se puede asignar al dispositivo.

u.Memory.MaximumAddress

Dirección de memoria máxima relativa al bus que se puede asignar al dispositivo.

u.Interrupt

Especifica un intervalo de vectores de interrupción con los siguientes miembros:

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 CM_RESOURCE_INTERRUPT_MESSAGE bit de marca, los valores de los miembros MinimumVector y MaximumVector tienen significados especiales. Para obtener más información, vea Usar descriptores de recursos de interrupción.

El sistema proporciona los siguientes miembros adicionales en Windows Vista y versiones posteriores del Windows operativo:

u.Interrupt.AffinityPolicy

Especifica un valor IRQ_DEVICE_POLICY que indica cómo el sistema debe distribuir las interrupciones de un dispositivo entre procesadores.

Especifica un valor IRQ_DEVICE_POLICY que indica cómo el sistema debe distribuir las interrupciones de un dispositivo entre procesadores.

u.Interrupt.Group

Especifica un número de grupo de procesadores. Group 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 Grupo en el número de grupo adecuado. Además, TargetedProcessors debe especificar los procesadores de destino en el grupo. Si establece AffinityPolicy en un valor distinto de IrqPolicySpecifiedProcessors, establezca Grupo en ALL_PROCESSOR_GROUPS para indicar que el controlador es compatible con el grupo (es decir, diseñado para controlar 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 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 mediante uno de los miembros siguientes:

u.Dma.MinimumChannel

Canal DMA mínimo relativo al bus que se puede asignar al dispositivo.

u.Dma.MaximumChannel

Canal DMA máximo relativo al bus 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 DMA_OPERATIONS estructura.

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 usa el controlador DMA del sistema que se asigna al dispositivo para transferir datos hacia o desde el dispositivo.

u.Generic

No se usa.

u.Generic.Length

u.Generic.Alignment

u.Generic.MinimumAddress

u.Generic.MaximumAddress

u.DevicePrivate

Reservado para uso del sistema.

u.DevicePrivate.Data

u.BusNumber

Especifica números de bus con los miembros siguientes:

u.BusNumber.Length

Número de números de bus necesarios.

u.BusNumber.MinBusNumber

Número de bus mínimo relativo al bus que se puede asignar al dispositivo.

u.BusNumber.MaxBusNumber

Número máximo de bus relativo que se puede asignar al dispositivo.

u.BusNumber.Reserved

No se usa.

u.ConfigData

Reservado para uso del sistema.

u.ConfigData.Priority

u.ConfigData.Reserved1

u.ConfigData.Reserved2

u.Memory40

Especifica un intervalo de direcciones de memoria, utilizando los miembros siguientes.

El miembro u.Memory40 solo está disponible en Windows Vista y versiones posteriores del Windows operativo. 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, que debe cumplir 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

Dirección de memoria relativa de bus mínima que se puede asignar al dispositivo.

u.Memory40.MaximumAddress

Dirección de memoria máxima relativa al bus que se puede asignar al dispositivo.

u.Memory48

Especifica un intervalo de direcciones de memoria, utilizando los miembros siguientes.

El miembro u.Memory48 solo está disponible en Windows Vista y versiones posteriores del Windows operativo. 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, que debe cumplir 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

Dirección de memoria relativa de bus mínima que se puede asignar al dispositivo.

u.Memory48.MaximumAddress

Dirección de memoria máxima relativa al bus que se puede asignar al dispositivo.

u.Memory64

Especifica un intervalo de direcciones de memoria, utilizando los miembros siguientes.

El miembro u.Memory64 solo está disponible en Windows Vista y versiones posteriores del Windows operativo. Los controladores de 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, que debe cumplir 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

Dirección de memoria relativa de bus mínima que se puede asignar al dispositivo.

u.Memory64.MaximumAddress

Dirección de memoria máxima relativa al bus que se puede asignar al dispositivo.

u.Connection

Especifica una conexión a un bus serie o un puerto serie, o a un conjunto de uno o varios pins 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 siguientes valores.

Value Significado
CM_RESOURCE_CONNECTION_CLASS_GPIO
Acceda al dispositivo a través de uno o varios pines 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:

Value Significado
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO
Acceda al dispositivo a través de pins GPIO configurados para E/S.
Nota Se tiene acceso 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:
Value Significado
CM_RESOURCE_CONNECTION_TYPE_SERIAL_I2C
El dispositivo está conectado a un bus IzosC.
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

   
Encabezado wdm.h (incluye Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)

Consulte también

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt