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.
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.
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 |
|---|---|
|
Acceda al dispositivo a través de pins GPIO configurados para E/S. |
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
Comentarios
Enviar y ver comentarios de