Compartir a través de


estructura IO_RESOURCE_DESCRIPTOR (wdm.h)

La estructura IO_RESOURCE_DESCRIPTOR describe una variedad de recursos de hardware sin procesar, de un tipo, que un dispositivo puede usar. Una matriz de estructuras 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 siguientes valores:

Valor Significado
0 Se requiere el intervalo de recursos especificado, a menos que también se especifiquen intervalos alternativos.
IO_RESOURCE_PREFERRED Se prefiere el intervalo de recursos especificado a los intervalos alternativos.
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. 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 tipo miembro de la estructura de CM_PARTIAL_RESOURCE_DESCRIPTOR.

ShareDisposition

Indica si se puede compartir el recurso descrito. Para obtener una lista de valores válidos, consulte el miembro ShareDisposition de la estructura de 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 válidas si Type = CmResourceTypeInterrupt:

Valor Significado
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE La línea IRQ se desencadena a nivel. (Estos IRQ normalmente 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 a partir de 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 obtener más información sobre las funcionalidades de reactivación, consulte Habilitación de la reactivación de dispositivos.
CM_RESOURCE_INTERRUPT_WAKE_HINT La interrupción es capaz de despertar el sistema operativo a partir de 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 obtener 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, consulte la descripción de la Flags miembro 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 Alineación.

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 al 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 Alineación.

u.Memory.MinimumAddress

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

u.Memory.MaximumAddress

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 mediante 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 establece el bit de marca CM_RESOURCE_INTERRUPT_MESSAGE, los valores del MinimumVector y miembros 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 el sistema debe distribuir las interrupciones de un dispositivo entre los procesadores.

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

u.Interrupt.Group

Especifica un número de grupo de procesadores. 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 existe el miembro Group Group, los de grupo y TargetedProcessors los miembros especifican juntos 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 información sobre los grupos de procesadores). Un controlador no puede especificar procesadores de destino si Grupo es igual a ALL_PROCESSOR_GROUPS; se omiten dichas especificaciones de destino.

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 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 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 asignado al dispositivo usa para transferir datos al dispositivo o desde él.

u.Generic

No se usa.

u.Generic.Length

No se usa.

u.Generic.Alignment

No se usa.

u.Generic.MinimumAddress

No se usa.

u.Generic.MaximumAddress

No se usa.

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 el miembro ULONG Priority.

u.ConfigData.Reserved1

No se usa.

u.ConfigData.Reserved2

No se usa.

u.Memory40

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

El miembro u.Memory40 solo está disponible en Windows Vista y versiones posteriores del sistema operativo Windows. Los controladores para 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 adherirse 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

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

u.Memory48

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

El miembro u.Memory48 solo está disponible en Windows Vista y versiones posteriores del sistema operativo Windows. Los controladores para 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 adherirse 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

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

u.Memory64

Especifica un intervalo de direcciones de memoria mediante 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 adherirse 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

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

u.Connection

Especifica una conexión a un de bus serie o 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 siguientes miembros describen esta conexión.

u.Connection.Class

Clase de conexión. Este miembro se establece en uno de los siguientes valores:

Valor Significado
CM_RESOURCE_CONNECTION_CLASS_GPIO Acceda al dispositivo a través de uno o varios 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 Clase = 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 Clase = CM_RESOURCE_CONNECTION_CLASS_SERIAL, Type se establece en uno de los siguientes valores:

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 usa.

u.Connection.Reserved2

No se usa.

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
encabezado de 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