CM_PARTIAL_RESOURCE_DESCRIPTOR estructura (wdm.h)

La CM_PARTIAL_RESOURCE_DESCRIPTOR especifica uno o varios recursos de hardware del sistema, de un solo tipo, asignados a un dispositivo. Esta estructura se usa para crear una matriz dentro de una CM_PARTIAL_RESOURCE_LIST estructura.

Sintaxis

typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
  UCHAR  Type;
  UCHAR  ShareDisposition;
  USHORT Flags;
  union {
    struct {
      PHYSICAL_ADDRESS Start;
      ULONG            Length;
    } Generic;
    struct {
      PHYSICAL_ADDRESS Start;
      ULONG            Length;
    } Port;
    struct {
#if ...
      USHORT    Level;
      USHORT    Group;
#else
      ULONG     Level;
#endif
      ULONG     Vector;
      KAFFINITY Affinity;
    } Interrupt;
    struct {
      union {
        struct {
          USHORT    Group;
          USHORT    Reserved;
          USHORT    MessageCount;
          ULONG     Vector;
          KAFFINITY Affinity;
        } Raw;
        struct {
#if ...
          USHORT    Level;
          USHORT    Group;
#else
          ULONG     Level;
#endif
          ULONG     Vector;
          KAFFINITY Affinity;
        } Translated;
      } DUMMYUNIONNAME;
    } MessageInterrupt;
    struct {
      PHYSICAL_ADDRESS Start;
      ULONG            Length;
    } Memory;
    struct {
      ULONG Channel;
      ULONG Port;
      ULONG Reserved1;
    } Dma;
    struct {
      ULONG Channel;
      ULONG RequestLine;
      UCHAR TransferWidth;
      UCHAR Reserved1;
      UCHAR Reserved2;
      UCHAR Reserved3;
    } DmaV3;
    struct {
      ULONG Data[3];
    } DevicePrivate;
    struct {
      ULONG Start;
      ULONG Length;
      ULONG Reserved;
    } BusNumber;
    struct {
      ULONG DataSize;
      ULONG Reserved1;
      ULONG Reserved2;
    } DeviceSpecificData;
    struct {
      PHYSICAL_ADDRESS Start;
      ULONG            Length40;
    } Memory40;
    struct {
      PHYSICAL_ADDRESS Start;
      ULONG            Length48;
    } Memory48;
    struct {
      PHYSICAL_ADDRESS Start;
      ULONG            Length64;
    } Memory64;
    struct {
      UCHAR Class;
      UCHAR Type;
      UCHAR Reserved1;
      UCHAR Reserved2;
      ULONG IdLowPart;
      ULONG IdHighPart;
    } Connection;
  } u;
} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;

Miembros

Type

Identifica el tipo de recurso. El valor constante especificado para Type indica qué estructura dentro de la unión u es válida, como se indica en la tabla siguiente. (Estas marcas se usan dentro de las estructuras CM_PARTIAL_RESOURCE_DESCRIPTOR y IO_RESOURCE_DESCRIPTOR , excepto donde se indica).

Valor de tipo Subestructura de miembro u
CmResourceTypePort u.Port
CmResourceTypeInterrupt u.Interrupt o u.MessageInterrupt. Si se CM_RESOURCE_INTERRUPT_MESSAGE marca de flags , use u.MessageInterrupt; de lo contrario, use u.Interrupt.
CmResourceTypeMemory u.Memory
CmResourceTypeMemoryLarge Uno de u.Memory40, u.Memory48 o u.Memory64. Las CM_RESOURCE_MEMORY_LARGE_XXX establecidas en el miembro Flags determinan qué estructura se usa.
CmResourceTypeDma u.Dma (si CM_RESOURCE_DMA_V3 está establecido) o u.DmaV3 (si se CM_RESOURCE_DMA_V3 marca)
CmResourceTypeDevicePrivate u.DevicePrivate
CmResourceTypeBusNumber u.BusNumber
CmResourceTypeDeviceSpecific u.DeviceSpecificData(No se usa en IO_RESOURCE_DESCRIPTOR).
CmResourceTypePcCardConfig u.DevicePrivate
CmResourceTypeMfCardConfig u.DevicePrivate
CmResourceTypeConnection u.Connection
CmResourceTypeConfigData Reservado para uso del sistema.
CmResourceTypeNonArbitrated No se usa.

ShareDisposition

Indica si se puede compartir el recurso descrito. Los valores constantes válidos se muestran en la tabla siguiente.

Value Significado
CmResourceShareDeviceExclusive
El dispositivo requiere un uso exclusivo del recurso.
CmResourceShareDriverExclusive
El controlador requiere un uso exclusivo del recurso. (No se admite para los controladores WDM).
CmResourceShareShared
El recurso se puede compartir sin restricciones.

Flags

Contiene bits de marca que son específicos del tipo de recurso, como se indica en la tabla siguiente. Las marcas se pueden usar en ORed bit a bit según corresponda.

Tipo de recurso Marca Definición
CmResourceTypePort
CM_RESOURCE_PORT_MEMORY Se accede al dispositivo en el espacio de direcciones de memoria.
CM_RESOURCE_PORT_IO Se accede al dispositivo en el espacio de direcciones de E/S.
CM_RESOURCE_PORT_10_BIT_DECODE El dispositivo descodifica 10 bits de la dirección del puerto.
CM_RESOURCE_PORT_12_BIT_DECODE El dispositivo descodifica 12 bits de la dirección del puerto.
CM_RESOURCE_PORT_16_BIT_DECODE El dispositivo descodifica 16 bits de la dirección del puerto.
CM_RESOURCE_PORT_POSITIVE_DECODE El dispositivo usa "descodificación positiva" en lugar de "descodificación resta". (En general, los dispositivos PCI usan descodificación positiva y los buses ISA usan descodificación resta).
CM_RESOURCE_PORT_PASSIVE_DECODE El dispositivo descodifica el puerto, pero el controlador no lo usa.
CM_RESOURCE_PORT_WINDOW_DECODE Reservado para uso del sistema.
CmResourceTypeInterrupt
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 No se usa con la CM_PARTIAL_RESOURCE_DESCRIPTOR estructura. Para obtener más información sobre esta marca, vea IO_RESOURCE_DESCRIPTOR.
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.
CmResourceTypeMemory
CM_RESOURCE_MEMORY_READ_WRITE El intervalo de memoria es legible y se puede escribir.
CM_RESOURCE_MEMORY_READ_ONLY El intervalo de memoria es de solo lectura.
CM_RESOURCE_MEMORY_WRITE_ONLY El intervalo de memoria es de solo escritura.
CM_RESOURCE_MEMORY_PREFETCHABLE El intervalo de memoria se puede captura previamente.
CM_RESOURCE_MEMORY_COMBINEDWRITE Se permite el almacenamiento en caché de escritura combinada.
CM_RESOURCE_MEMORY_24 El dispositivo usa direccionamiento de 24 bits.
CM_RESOURCE_MEMORY_CACHEABLE El intervalo de memoria se puede almacenar en caché.
CmResourceTypeMemoryLarge
CM_RESOURCE_MEMORY_LARGE_40 El descriptor de memoria usa el miembro u.Memory40 .
CM_RESOURCE_MEMORY_LARGE_48 El descriptor de memoria usa el miembro u.Memory48 .
CM_RESOURCE_MEMORY_LARGE_64 El descriptor de memoria usa el miembro u.Memory64 .
CmResourceTypeDma
CM_RESOURCE_DMA_8 Canal DMA de 8 bits
CM_RESOURCE_DMA_16 Canal DMA de 16 bits
CM_RESOURCE_DMA_32 Canal DMA de 32 bits
CM_RESOURCE_DMA_8_AND_16 Canal DMA de 8 y 16 bits
CM_RESOURCE_DMA_BUS_MASTER El dispositivo admite transferencias DMA maestras de bus.
CM_RESOURCE_DMA_TYPE_A Tipo de DMA
CM_RESOURCE_DMA_TYPE_B DMA de tipo B
CM_RESOURCE_DMA_TYPE_F DMA de tipo F
CM_RESOURCE_DMA_V3 Use el miembro DmaV3 en lugar del miembro Dma . El miembro DmaV3 está disponible a partir de Windows 8.

u

u.Generic

No se usa.

u.Generic.Start

u.Generic.Length

u.Port

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

Los controladores para Windows Vista y versiones posteriores del sistema operativo Windows pueden usar RtlCmDecodeMemIoResource y RtlCmEncodeMemIoResource para leer y actualizar el miembro u.Port, en lugar de actualizarlo directamente.

u.Port.Start

Para recursos sin procesar: especifica la dirección física relativa al bus de la menor de un intervalo de direcciones de puerto de E/S contiguas asignadas al dispositivo.

Para los recursos traducidos: especifica la dirección física del sistema de la menor de un intervalo de direcciones de puerto de E/S contiguas asignadas al dispositivo.

Para obtener más información sobre los recursos sin procesar y traducidos, vea Comentarios.

u.Port.Length

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

u.Interrupt

Especifica un vector y un nivel de interrupción, utilizando los miembros siguientes:

u.Interrupt.Level

Para los recursos sin procesar: especifica el IRQL específico del bus del dispositivo (si procede para la plataforma y el bus).

Para los recursos traducidos: especifica el DIRQL asignado al dispositivo.

Para obtener más información sobre los recursos sin procesar y traducidos, vea Comentarios.

u.Interrupt.Group

Especifica el número de grupo de procesadores. Este miembro solo existe si la NT_PROCESSOR_GROUPS constante se define en tiempo de compilación. Este miembro solo puede ser distinto de cero en Windows 7 y versiones posteriores de Windows. Los miembros Grupo y Afinidad especifican una afinidad de grupo que indica qué procesadores puede interrumpir el dispositivo. Para especificar una afinidad para cualquier grupo, establezca Grupo en ALL_PROCESSOR_GROUPS.

u.Interrupt.Vector

Para los recursos sin procesar: especifica el vector de interrupción específico del bus del dispositivo (si procede para la plataforma y el bus).

Para los recursos traducidos: especifica el vector de interrupción del sistema global asignado al dispositivo.

Para obtener más información sobre los recursos sin procesar y traducidos, vea Comentarios.

u.Interrupt.Affinity

Contiene un valor de máscara de bits con tipo KAFFINITY que indica el conjunto de procesadores que el dispositivo puede interrumpir. Para indicar que el dispositivo puede interrumpir cualquier procesador, este miembro se establece en -1.

u.MessageInterrupt

Especifica una interrupción señalada por mensaje. Este miembro es una unión. Use u.MessageInterrupt.Raw para los recursos sin procesar y u.MessageInterrupt.Translated para los recursos traducidos. Este tipo de recurso solo se devuelve en Windows Vista y versiones posteriores del Windows operativo.

Para obtener más información sobre los recursos sin procesar y traducidos, vea Comentarios.

El miembro u.MessageInterrupt.Raw tiene los siguientes miembros:

u.MessageInterrupt.DUMMYUNIONNAME

u.MessageInterrupt.DUMMYUNIONNAME.Raw

u.MessageInterrupt.DUMMYUNIONNAME.Raw.Group

Especifica un número de grupo de procesadores. Este miembro solo existe si NT_PROCESSOR_GROUPS se define en tiempo de compilación. Este miembro solo puede ser distinto de cero en Windows 7 y versiones posteriores de Windows. Los miembros Grupo y Afinidad especifican una afinidad de grupo que indica qué procesadores pueden recibir las interrupciones del dispositivo. Para especificar una afinidad para cualquier grupo, establezca Grupo en ALL_PROCESSOR_GROUPS.

u.MessageInterrupt.DUMMYUNIONNAME.Raw.Reserved

No se usa.

u.MessageInterrupt.DUMMYUNIONNAME.Raw.MessageCount

Especifica el número de interrupciones señaladas por mensajes generadas para este controlador.

u.MessageInterrupt.DUMMYUNIONNAME.Raw.Vector

Especifica el vector de interrupción del dispositivo.

u.MessageInterrupt.DUMMYUNIONNAME.Raw.Affinity

Especifica un valor KAFFINITY que indica los procesadores que reciben las interrupciones del dispositivo.

u.MessageInterrupt.DUMMYUNIONNAME.Translated

El miembro u.MessageInterrupt.Translated tiene los siguientes miembros:

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Level

Especifica el IRQL del dispositivo (DIRQL) asignado a las interrupciones del dispositivo.

Especifica el IRQL del dispositivo (DIRQL) asignado a las interrupciones del dispositivo.

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Group

Especifica un número de grupo de procesadores. Este miembro solo existe si NT_PROCESSOR_GROUPS se define en tiempo de compilación. Este miembro solo puede ser distinto de cero en Windows 7 y versiones posteriores de Windows. Los miembros Translated.Group y Translated.Affinity juntos especifican una afinidad de grupo que indica qué procesadores pueden recibir las interrupciones del dispositivo. Para especificar una afinidad para cualquier grupo, establezca Translated.Group en ALL_PROCESSOR_GROUPS.

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Vector

Especifica el vector de interrupción del dispositivo.

u.MessageInterrupt.DUMMYUNIONNAME.Translated.Affinity

Especifica un valor KAFFINITY que identifica los procesadores que reciben las interrupciones del dispositivo.

u.Memory

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

Los controladores para Windows Vista y versiones posteriores del sistema operativo Windows pueden usar RtlCmDecodeMemIoResource y RtlCmEncodeMemIoResource para leer y actualizar el miembro u.Memory, en lugar de actualizarlo directamente.

u.Memory.Start

Para recursos sin procesar: especifica la dirección física relativa al bus de la menor de un intervalo de direcciones de memoria contiguas asignadas al dispositivo.

Para los recursos traducidos: especifica la dirección física del sistema de la menor de un intervalo de direcciones de memoria contiguas asignadas al dispositivo.

Para obtener más información sobre los recursos sin procesar y traducidos, vea Comentarios.

u.Memory.Length

Especifica la longitud, en bytes, del intervalo de direcciones de memoria asignadas.

u.Dma

Especifica una configuración de DMA mediante uno de los miembros siguientes:

u.Dma.Channel

Especifica el número del canal DMA en un controlador DMA del sistema que el dispositivo puede usar.

u.Dma.Port

Especifica el número del puerto DMA que puede usar un dispositivo de tipo MCA.

u.Dma.Reserved1

No se usa.

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

Especifica el número del canal DMA en el controlador DMA del sistema que se asigna al dispositivo.

u.DmaV3.RequestLine

Especifica el número de la línea de solicitud 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 asignado al dispositivo para transferir datos hacia o desde el dispositivo.

u.DmaV3.Reserved1

No se utiliza.

u.DmaV3.Reserved2

No se utiliza.

u.DmaV3.Reserved3

No se utiliza.

u.DevicePrivate

Reservado para uso del sistema.

u.DevicePrivate.Data

u.BusNumber

Especifica números de bus con los miembros siguientes:

u.BusNumber.Start

Especifica el número más bajo de un intervalo de buses contiguos asignados al dispositivo.

u.BusNumber.Length

Especifica el número de buses asignados al dispositivo.

u.BusNumber.Reserved

No se usa.

u.DeviceSpecificData

Especifica el tamaño de una estructura privada específica del dispositivo que se anexa al final de la estructura CM_PARTIAL_RESOURCE_DESCRIPTOR dispositivo. Si se usa u.DeviceSpecificData, la CM_PARTIAL_RESOURCE_DESCRIPTOR debe ser la última de la matriz CM_PARTIAL_RESOURCE_LIST datos.

Algunos ejemplos de estructuras específicas del dispositivo son CM_FLOPPY_DEVICE_DATA, CM_KEYBOARD_DEVICE_DATA, CM_SCSI_DEVICE_DATA y CM_SERIAL_DEVICE_DATA.

u.DeviceSpecificData.DataSize

Especifica el número de bytes anexados al final de la CM_PARTIAL_RESOURCE_DESCRIPTOR estructura.

u.DeviceSpecificData.Reserved1

No se utiliza.

u.DeviceSpecificData.Reserved2

No se utiliza.

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 deben usar RtlCmDecodeMemIoResource y RtlCmEncodeMemIoResource para leer y actualizar este miembro, en lugar de actualizarlo directamente.

u.Memory40.Start

Para recursos sin procesar: especifica la dirección física relativa al bus de la menor de un intervalo de direcciones de memoria contiguas que se asignan al dispositivo.

Para los recursos traducidos: especifica la dirección física del sistema de la menor de un intervalo de direcciones de memoria contiguas que se asignan al dispositivo.

Para obtener más información sobre los recursos sin procesar y traducidos, vea Comentarios.

u.Memory40.Length40

Contiene los 32 bits altos de la longitud de 40 bits, en bytes, del intervalo de direcciones de memoria asignadas. Los 8 bits más bajos se tratan como cero.

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 deben usar RtlCmDecodeMemIoResource y RtlCmEncodeMemIoResource para leer y actualizar este miembro, en lugar de actualizarlo directamente.

u.Memory48.Start

Para recursos sin procesar: especifica la dirección física relativa al bus de la menor de un intervalo de direcciones de memoria contiguas que se asignan al dispositivo.

Para los recursos traducidos: especifica la dirección física del sistema de la menor de un intervalo de direcciones de memoria contiguas que se asignan al dispositivo.

Para obtener más información sobre los recursos sin procesar y traducidos, vea Comentarios.

u.Memory48.Length48

Contiene los 32 bits altos de la longitud de 48 bits, en bytes, del intervalo de direcciones de memoria asignadas. Los 16 bits más bajos se tratan como cero.

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 deben usar RtlCmDecodeMemIoResource y RtlCmEncodeMemIoResource para leer y actualizar este miembro, en lugar de actualizarlo directamente.

u.Memory64.Start

Para recursos sin procesar: especifica la dirección física relativa al bus de la menor de un intervalo de direcciones de memoria contiguas que se asignan al dispositivo.

Para los recursos traducidos: especifica la dirección física del sistema de la menor de un intervalo de direcciones de memoria contiguas que se asignan al dispositivo.

Para obtener más información sobre los recursos sin procesar y traducidos, vea Comentarios.

u.Memory64.Length64

Contiene los 32 bits altos de la longitud de 64 bits, en bytes, del intervalo de direcciones de memoria asignadas. Los 32 bits más bajos se tratan como cero.

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). Los miembros siguientes describen esta conexión.

El miembro u.Connection está disponible a partir de Windows 8.

u.Connection.Class

Especifica la 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

Especifica el 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

Contiene los 32 bits inferiores del identificador de conexión de 64 bits.

u.Connection.IdHighPart

Contiene los 32 bits superiores del identificador de conexión de 64 bits.

Observaciones

Una CM_PARTIAL_RESOURCE_DESCRIPTOR estructura puede describir un recurso sin procesar (relativo al bus) o un recurso traducido (físico del sistema), en función de la rutina o el IRP con el que se esté utilizando. Para obtener más información, vea Recursos sin procesar y traducidos y IRP_MN_START_DEVICE.

Solo puede haber un bloque DeviceSpecificData . Debe encontrarse al final de todos los descriptores de recursos en un bloque de descriptores completo.

Requisitos

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

Vea también

CM_FLOPPY_DEVICE_DATA

CM_FULL_RESOURCE_DESCRIPTOR

CM_KEYBOARD_DEVICE_DATA

CM_PARTIAL_RESOURCE_LIST

CM_RESOURCE_LIST

CM_SCSI_DEVICE_DATA

CM_SERIAL_DEVICE_DATA

DMA_OPERATIONS

IO_RESOURCE_DESCRIPTOR

IRP_MN_START_DEVICE

IoConnectInterrupt

IoGetDeviceProperty

IoReportResourceForDetection

KAFFINITY

RtlCmDecodeMemIoResource

RtlCmEncodeMemIoResource