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 de u es válida, como se indica en la tabla siguiente. (Estas marcas se usan en estructuras de CM_PARTIAL_RESOURCE_DESCRIPTOR y IO_RESOURCE_DESCRIPTOR, excepto donde se indique).
Valor de tipo | Subestructura miembro u |
---|---|
CmResourceTypePort | de |
cmResourceTypeInterrupt | u.Interrupt o u.MessageInterrupt. Si se establece la marca CM_RESOURCE_INTERRUPT_MESSAGE de Flags, use u.MessageInterrupt; De lo contrario, use u.Interrupt. |
cmResourceTypeMemory | u.Memory |
CmResourceTypeMemoryLarge | Uno de los |
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 enumeran en la tabla siguiente:
Valor | 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. |
CmResourceShared | El recurso se puede compartir sin restricciones. |
Flags
Contiene bits de marca 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
Bandera | 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 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. |
Tipo de recurso CmResourceTypeInterrupt
Bandera | 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, 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, consulte interrupciones gpIO. |
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. |
Tipo de recurso CmResourceTypeMemory
Bandera | 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 se puede capturar 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
Bandera | Definición |
---|---|
CM_RESOURCE_MEMORY_LARGE_40 | El descriptor de memoria usa el miembro |
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 de |
Tipo de recurso CmResourceTypeDma
Bandera | 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 |
u
Define la unión u.
u.Generic
No se usa.
u.Generic.Start
No se usa.
u.Generic.Length
No se usa.
u.Port
Especifica un intervalo de direcciones de puerto de E/S mediante 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.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 mediante los siguientes miembros:
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 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. La grupo de
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 KAFFINITYque 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 con señal de 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
u.MessageInterrupt.DUMMYUNIONNAME.Raw
Define la estructura
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. La de grupo de
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 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. El translated.Group y translated.Affinity los miembros 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 mediante 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 DMA_OPERATIONS.
El miembro
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 asignado al dispositivo usa para transferir datos al dispositivo o desde él.
u.DmaV3.Reserved1
No se usa.
u.DmaV3.Reserved2
No se usa.
u.DmaV3.Reserved3
No se usa.
u.DevicePrivate
Reservado para uso del sistema.
u.DevicePrivate.Data[3]
u.BusNumber
Especifica los 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. Si se usa u.DeviceSpecificData, la estructura CM_PARTIAL_RESOURCE_DESCRIPTOR debe ser la última de la matriz CM_PARTIAL_RESOURCE_LIST.
Algunos ejemplos de estructuras específicas del dispositivo incluyen CM_FLOPPY_DEVICE_DATA, CM_KEYBOARD_DEVICE_DATA, CM_SCSI_DEVICE_DATAy CM_SERIAL_DEVICE_DATA.
u.DeviceSpecificData.DataSize
Especifica el número de bytes anexados al final de la estructura CM_PARTIAL_RESOURCE_DESCRIPTOR.
u.DeviceSpecificData.Reserved1
No se usa.
u.DeviceSpecificData.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 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 de la más baja 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 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 mediante 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 de la más baja 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 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 mediante 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 de la más baja 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 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 de bus serie o puerto serie, o a un conjunto de una o varias patillas de E/S de uso general (GPIO). Los siguientes miembros describen esta conexión.
El miembro
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 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
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 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 1bloque DeviceSpecificData. Debe ubicarse al final de todos los descriptores de recursos en un bloque de descriptor completo.
Requisitos
Requisito | Valor |
---|---|
encabezado de |
wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h) |