estructura CM_PARTIAL_RESOURCE_DESCRIPTOR (wdm.h)

La estructura 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 estructura de CM_PARTIAL_RESOURCE_LIST .

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 tanto en estructuras de CM_PARTIAL_RESOURCE_DESCRIPTOR como de IO_RESOURCE_DESCRIPTOR , excepto cuando se indique).

Valor del tipo Subestructura de miembro u
CmResourceTypePort u.Port
CmResourceTypeInterrupt u.Interrupt o u.MessageInterrupt. Si se establece la marca CM_RESOURCE_INTERRUPT_MESSAGE de Marcas , use u.MessageInterrupt; En caso contrario, use u.Interrupt.
CmResourceTypeMemory u.Memory
CmResourceTypeMemoryLarge Uno de u.Memory40, u.Memory48 o u.Memory64. Las marcas CM_RESOURCE_MEMORY_LARGE_XXX establecidas en el miembro Flags determinan qué estructura se usa.
CmResourceTypeDma u.Dma (si no se establece CM_RESOURCE_DMA_V3) o u.DmaV3 (si se establece 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:

Valor Significado
CmResourceShareDeviceExclusive El dispositivo requiere un uso exclusivo del recurso.
CmResourceShareDriverExclusive El controlador requiere el 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 las tablas siguientes (las marcas pueden ser bit a bit-ORed juntas según corresponda):

Tipo de recurso CmResourceTypePort

Marca Definición
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 de puerto.
CM_RESOURCE_PORT_16_BIT_DECODE El dispositivo descodifica 16 bits de la dirección de 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.

Tipo de recurso CmResourceTypeInterrupt

Marca Definición
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 No se usa con la estructura CM_PARTIAL_RESOURCE_DESCRIPTOR . Para obtener más información sobre esta marca, consulte 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, consulte Interrupciones gpIO.
CM_RESOURCE_INTERRUPT_WAKE_HINT La interrupción es capaz de despertar 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 obtener más información sobre las funcionalidades de reactivación, consulte Habilitación de reactivación de dispositivos.

Tipo de recurso CmResourceTypeMemory

Marca Definición
CM_RESOURCE_MEMORY_READ_WRITE El intervalo de memoria es legible y grabable.
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 es capturable 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é.

Tipo de recurso CmResourceTypeMemoryLarge

Marca Definición
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 .

Tipo de recurso CmResourceTypeDma

Marca Definición
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 DMA
CM_RESOURCE_DMA_TYPE_B Tipo B DMA
CM_RESOURCE_DMA_TYPE_F Tipo F DMA
CM_RESOURCE_DMA_V3 Use el miembro DmaV3 en lugar del miembro Dma . El miembro DmaV3 está disponible a partir de Windows 8.

u

Define la unión u .

u.Generic

No se utiliza.

u.Generic.Start

No se utiliza.

u.Generic.Length

No se utiliza.

u.Port

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

Los controladores de 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 los recursos sin procesar: especifica la dirección física relativa al bus de la más baja 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 más baja 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 de interrupción y un nivel, con los miembros siguientes:

u.Interrupt.Level

Para los recursos sin procesar: especifica el IRQL específico del bus del dispositivo (si es adecuado 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 constante 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 Group y Affinity juntos 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 es adecuado 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 sistema operativo Windows.

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

u.MessageInterrupt.DUMMYUNIONNAME

Define la unión DUMMYUNIONNAME .

u.MessageInterrupt.DUMMYUNIONNAME.Raw

Define la estructura 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 Group y 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 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 mensaje 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 miembros siguientes:

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 especifican juntos 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 siguientes miembros.

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 los recursos sin procesar: especifica la dirección física relativa al bus de la más baja 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 más baja 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, con uno de los siguientes miembros:

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 estructura de DMA_OPERATIONS .

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 el controlador DMA del sistema que se asigna al dispositivo usa 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[3]

u.BusNumber

Especifica números de bus, con los siguientes miembros:

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 autobuses 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 . Si se usa u.DeviceSpecificData , la estructura CM_PARTIAL_RESOURCE_DESCRIPTOR debe ser la última de la matriz CM_PARTIAL_RESOURCE_LIST .

Entre los ejemplos de estructuras específicas del dispositivo se incluyen 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 estructura de CM_PARTIAL_RESOURCE_DESCRIPTOR .

u.DeviceSpecificData.Reserved1

No se utiliza.

u.DeviceSpecificData.Reserved2

No se utiliza.

u.Memory40

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

El miembro u.Memory40 solo está disponible en Windows Vista y versiones posteriores del sistema operativo Windows. Los controladores deben usar RtlCmDecodeMemIoResource y RtlCmEncodeMemIoResource para leer y actualizar este miembro, en lugar de actualizarlo directamente.

u.Memory40.Start

Para los recursos sin procesar: especifica la dirección física relativa al bus del más bajo 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 más baja 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.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, con los siguientes miembros.

El miembro u.Memory48 solo está disponible en Windows Vista y versiones posteriores del sistema operativo Windows. Los controladores deben usar RtlCmDecodeMemIoResource y RtlCmEncodeMemIoResource para leer y actualizar este miembro, en lugar de actualizarlo directamente.

u.Memory48.Start

Para los recursos sin procesar: especifica la dirección física relativa al bus del más bajo 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 más baja 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.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, con los siguientes miembros.

El miembro u.Memory64 solo está disponible en Windows Vista y versiones posteriores del sistema operativo Windows. Los controladores deben usar RtlCmDecodeMemIoResource y RtlCmEncodeMemIoResource para leer y actualizar este miembro, en lugar de actualizarlo directamente.

u.Memory64.Start

Para los recursos sin procesar: especifica la dirección física relativa al bus del más bajo 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 más baja 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.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 patillas de E/S de uso general (GPIO). Los siguientes miembros 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:

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

Especifica el tipo de conexión.

Si Class = CM_RESOURCE_CONNECTION_CLASS_GPIO, Type se establece en el valor siguiente:

Valor Significado
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO Acceda al dispositivo a través de patillas GPIO configuradas para E/S.

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:

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

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.

Comentarios

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

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

Requisitos

Requisito Valor
Header wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h)

Consulte 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