estrutura CM_PARTIAL_RESOURCE_DESCRIPTOR (wdm.h)
A estrutura CM_PARTIAL_RESOURCE_DESCRIPTOR especifica um ou mais recursos de hardware do sistema, de um único tipo, atribuídos a um dispositivo. Essa estrutura é usada para criar uma matriz dentro de uma estrutura de CM_PARTIAL_RESOURCE_LIST.
Sintaxe
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;
Membros
Type
Identifica o tipo de recurso. O valor constante especificado para Type indica qual estrutura dentro do u união é válida, conforme indicado na tabela a seguir. (Esses sinalizadores são usados dentro de estruturas CM_PARTIAL_RESOURCE_DESCRIPTOR e IO_RESOURCE_DESCRIPTOR, exceto quando observado.)
Valor do tipo | subestrutura do membro u |
---|---|
CmResourceTypePort | u.Port |
CmResourceTypeInterrupt | u.Interrupt ou u.MessageInterrupt. Se o sinalizador CM_RESOURCE_INTERRUPT_MESSAGE de sinalizadores estiver definido, use u.MessageInterrupt; caso contrário, use u.Interrupt. |
CmResourceTypeMemory | u.Memory |
CmResourceTypeMemoryLarge | Um dos |
CmResourceTypeDma | u.Dma (se CM_RESOURCE_DMA_V3 não estiver definido) ou u.DmaV3 (se CM_RESOURCE_DMA_V3 sinalizador estiver definido) |
CmResourceTypeDevicePrivate | u.DevicePrivate |
CmResourceTypeBusNumber | u.BusNumber |
CmResourceTypeDeviceSpecific | u.DeviceSpecificData (não usado em IO_RESOURCE_DESCRIPTOR.) |
CmResourceTypePcCardConfig | u.DevicePrivate |
CmResourceTypeMfCardConfig | u.DevicePrivate |
CmResourceTypeConnection | u.Connection |
CmResourceTypeConfigData | Reservado para uso do sistema. |
CmResourceTypeNonArbitrated | Não usado. |
ShareDisposition
Indica se o recurso descrito pode ser compartilhado. Os valores de constante válidos são listados na tabela a seguir:
Valor | Significado |
---|---|
CmResourceShareDeviceExclusive | O dispositivo requer uso exclusivo do recurso. |
CmResourceShareDriverExclusive | O driver requer uso exclusivo do recurso. Não há suporte para drivers WDM. |
CmResourceShareShared | O recurso pode ser compartilhado sem restrições. |
Flags
Contém bits de sinalizador específicos para o tipo de recurso, conforme indicado nas tabelas a seguir (os sinalizadores podem ser bit a bit oRed juntos conforme apropriado):
Tipo de recurso CmResourceTypePort
Bandeira | Definição |
---|---|
CM_RESOURCE_PORT_MEMORY | O dispositivo é acessado no espaço de endereço de memória. |
CM_RESOURCE_PORT_IO | O dispositivo é acessado no espaço de endereço de E/S. |
CM_RESOURCE_PORT_10_BIT_DECODE | O dispositivo decodifica 10 bits do endereço da porta. |
CM_RESOURCE_PORT_12_BIT_DECODE | O dispositivo decodifica 12 bits do endereço da porta. |
CM_RESOURCE_PORT_16_BIT_DECODE | O dispositivo decodifica 16 bits do endereço da porta. |
CM_RESOURCE_PORT_POSITIVE_DECODE | O dispositivo usa "decodificação positiva" em vez de "decodificação subtrativa". (Em geral, os dispositivos PCI usam decodificação positiva e os barramentos ISA usam o decodificador subtrativo.) |
CM_RESOURCE_PORT_PASSIVE_DECODE | O dispositivo decodifica a porta, mas o driver não a usa. |
CM_RESOURCE_PORT_WINDOW_DECODE | Reservado para uso do sistema. |
Tipo de recurso CmResourceTypeInterrupt
Bandeira | Definição |
---|---|
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE | A linha IRQ é disparada em nível. (Esses IRQs geralmente são fragmentáveis.) |
CM_RESOURCE_INTERRUPT_LATCHED | A linha IRQ é disparada por borda. |
CM_RESOURCE_INTERRUPT_MESSAGE | Se esse sinalizador estiver definido, a interrupção será uma interrupção sinalizada por mensagem. Caso contrário, a interrupção será uma interrupção baseada em linha. |
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED | Não usado com a estrutura CM_PARTIAL_RESOURCE_DESCRIPTOR. Para obter mais informações sobre esse sinalizador, consulte IO_RESOURCE_DESCRIPTOR. |
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT | A interrupção é uma interrupção secundária. Esse sinalizador pode ser definido a partir do Windows 8. Para obter mais informações sobre interrupções secundárias, consulte interrupções de GPIO. |
CM_RESOURCE_INTERRUPT_WAKE_HINT | A interrupção é capaz de acordar o sistema operacional de um estado ocioso de baixa potência ou de um estado de suspensão do sistema. Esse sinalizador pode ser definido a partir do Windows 8. Para obter mais informações sobre recursos de ativação, consulte Habilitando ode ativação do dispositivo. |
Tipo de recurso CmResourceTypeMemory
Bandeira | Definição |
---|---|
CM_RESOURCE_MEMORY_READ_WRITE | O intervalo de memória é legível e gravável. |
CM_RESOURCE_MEMORY_READ_ONLY | O intervalo de memória é somente leitura. |
CM_RESOURCE_MEMORY_WRITE_ONLY | O intervalo de memória é somente gravação. |
CM_RESOURCE_MEMORY_PREFETCHABLE | O intervalo de memória é pré-executável. |
CM_RESOURCE_MEMORY_COMBINEDWRITE | O cache de gravação combinada é permitido. |
CM_RESOURCE_MEMORY_24 | O dispositivo usa endereçamento de 24 bits. |
CM_RESOURCE_MEMORY_CACHEABLE | O intervalo de memória pode ser armazenado em cache. |
Tipo de recurso CmResourceTypeMemoryLarge
Bandeira | Definição |
---|---|
CM_RESOURCE_MEMORY_LARGE_40 | O descritor de memória usa o membro u.Memory40. |
CM_RESOURCE_MEMORY_LARGE_48 | O descritor de memória usa o membro u.Memory48. |
CM_RESOURCE_MEMORY_LARGE_64 | O descritor de memória usa o membro |
Tipo de recurso CmResourceTypeDma
Bandeira | Definição |
---|---|
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 bits e 16 bits |
CM_RESOURCE_DMA_BUS_MASTER | O dispositivo dá suporte a transferências de DMA mestre do barramento. |
CM_RESOURCE_DMA_TYPE_A | Digitar um DMA |
CM_RESOURCE_DMA_TYPE_B | Tipo B DMA |
CM_RESOURCE_DMA_TYPE_F | Tipo F DMA |
CM_RESOURCE_DMA_V3 | Use o membro |
u
Define a união u.
u.Generic
Não usado.
u.Generic.Start
Não usado.
u.Generic.Length
Não usado.
u.Port
Especifica um intervalo de endereços de porta de E/S usando os membros a seguir.
Drivers para Windows Vista e versões posteriores do sistema operacional Windows podem usar rtlCmDecodeMemIoResource e RtlCmEncodeMemIoResource para ler e atualizar o membro u.Port, em vez de atualizá-lo diretamente.
u.Port.Start
Para recursos brutos: especifica o endereço físico relativo ao barramento do menor intervalo de endereços de porta de E/S contíguos alocados para o dispositivo.
Para recursos traduzidos: especifica o endereço físico do sistema do mais baixo de um intervalo de endereços de porta de E/S contíguos alocados para o dispositivo.
Para obter mais informações sobre recursos brutos e traduzidos, consulte Comentários.
u.Port.Length
O comprimento, em bytes, do intervalo de endereços de porta de E/S alocados.
u.Interrupt
Especifica um vetor e um nível de interrupção, usando os seguintes membros:
u.Interrupt.Level
Para recursos brutos: especifica o IRQL específico do barramento do dispositivo (se apropriado para a plataforma e o barramento).
Para recursos traduzidos: especifica o DIRQL atribuído ao dispositivo.
Para obter mais informações sobre recursos brutos e traduzidos, consulte Comentários.
u.Interrupt.Group
Especifica o número do grupo de processadores. Esse membro só existirá se a constante NT_PROCESSOR_GROUPS for definida em tempo de compilação. Esse membro pode ser diferente de zero apenas no Windows 7 e versões posteriores do Windows. Os membros de Grupo
u.Interrupt.Vector
Para recursos brutos: especifica o vetor de interrupção específico do barramento do dispositivo (se apropriado para a plataforma e o barramento).
Para recursos traduzidos: especifica o vetor de interrupção do sistema global atribuído ao dispositivo.
Para obter mais informações sobre recursos brutos e traduzidos, consulte Comentários.
u.Interrupt.Affinity
Contém um valor de máscara de bits KAFFINITYque indica o conjunto de processadores que o dispositivo pode interromper. Para indicar que o dispositivo pode interromper qualquer processador, esse membro está definido como -1.
u.MessageInterrupt
Especifica uma interrupção sinalizada por mensagem. Este membro é um sindicato. Use u.MessageInterrupt.Raw para recursos brutos e u.MessageInterrupt.Translated para recursos traduzidos. Esse tipo de recurso só é retornado no Windows Vista e em versões posteriores do sistema operacional Windows.
Para obter mais informações sobre recursos brutos e traduzidos, consulte Comentários.
u.MessageInterrupt.DUMMYUNIONNAME
Define a união
u.MessageInterrupt.DUMMYUNIONNAME.Raw
Define a estrutura Raw.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Group
Especifica um número de grupo de processadores. Esse membro só existirá se NT_PROCESSOR_GROUPS for definido em tempo de compilação. Esse membro pode ser diferente de zero apenas no Windows 7 e versões posteriores do Windows. Os membros de Grupo
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Reserved
Não usado.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.MessageCount
Especifica o número de interrupções sinalizadas por mensagem geradas para esse driver.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Vector
Especifica o vetor de interrupção do dispositivo.
u.MessageInterrupt.DUMMYUNIONNAME.Raw.Affinity
Especifica um valor KAFFINITY que indica os processadores que recebem as interrupções do dispositivo.
u.MessageInterrupt.DUMMYUNIONNAME.Translated
O membro
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Level
Especifica o DIRQL (DISPOSITIVO IRQL) atribuído às interrupções do dispositivo.
Especifica o DIRQL (DISPOSITIVO IRQL) atribuído às interrupções do dispositivo.
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Group
Especifica um número de grupo de processadores. Esse membro só existirá se NT_PROCESSOR_GROUPS for definido em tempo de compilação. Esse membro pode ser diferente de zero apenas no Windows 7 e versões posteriores do Windows. Os membros Translated.Group e Translated.Affinity juntos especificam uma afinidade de grupo que indica quais processadores podem receber as interrupções do dispositivo. Para especificar uma afinidade para qualquer grupo, defina Translated.Group como ALL_PROCESSOR_GROUPS.
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Vector
Especifica o vetor de interrupção do dispositivo.
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Affinity
Especifica um valor KAFFINITY que identifica os processadores que recebem as interrupções do dispositivo.
u.Memory
Especifica um intervalo de endereços de memória, usando os membros a seguir.
Drivers para Windows Vista e versões posteriores do sistema operacional Windows podem usar rtlCmDecodeMemIoResource e RtlCmEncodeMemIoResource para ler e atualizar o membro u.Memory, em vez de atualizá-lo diretamente.
u.Memory.Start
Para recursos brutos: especifica o endereço físico relativo ao barramento do menor intervalo de endereços de memória contíguos alocados para o dispositivo.
Para recursos traduzidos: especifica o endereço físico do sistema do mais baixo de um intervalo de endereços de memória contíguos alocados ao dispositivo.
Para obter mais informações sobre recursos brutos e traduzidos, consulte Comentários.
u.Memory.Length
Especifica o comprimento, em bytes, do intervalo de endereços de memória alocados.
u.Dma
Especifica uma configuração de DMA usando um dos seguintes membros:
u.Dma.Channel
Especifica o número do canal DMA em um controlador DMA do sistema que o dispositivo pode usar.
u.Dma.Port
Especifica o número da porta DMA que um dispositivo do tipo MCA pode usar.
u.Dma.Reserved1
Não usado.
u.DmaV3
Especifica as configurações de DMA para um driver que usa a versão 3 da estrutura de DMA_OPERATIONS.
O membro
u.DmaV3.Channel
Especifica o número do canal DMA no controlador DMA do sistema que é alocado para o dispositivo.
u.DmaV3.RequestLine
Especifica o número da linha de solicitação no controlador DMA do sistema que é alocado para o dispositivo.
u.DmaV3.TransferWidth
Especifica a largura, em bits, do barramento de dados que o controlador DMA do sistema que é alocado para o dispositivo usa para transferir dados de ou para o dispositivo.
u.DmaV3.Reserved1
Não usado.
u.DmaV3.Reserved2
Não usado.
u.DmaV3.Reserved3
Não usado.
u.DevicePrivate
Reservado para uso do sistema.
u.DevicePrivate.Data[3]
u.BusNumber
Especifica números de ônibus, usando os seguintes membros:
u.BusNumber.Start
Especifica a menor numeração de um intervalo de ônibus contíguos alocados para o dispositivo.
u.BusNumber.Length
Especifica o número de ônibus alocados para o dispositivo.
u.BusNumber.Reserved
Não usado.
u.DeviceSpecificData
Especifica o tamanho de uma estrutura privada específica do dispositivo que é acrescentada ao final da estrutura CM_PARTIAL_RESOURCE_DESCRIPTOR. Se u.DeviceSpecificData for usada, a estrutura CM_PARTIAL_RESOURCE_DESCRIPTOR deverá ser a última na matriz CM_PARTIAL_RESOURCE_LIST.
Exemplos de estruturas específicas do dispositivo incluem CM_FLOPPY_DEVICE_DATA, CM_KEYBOARD_DEVICE_DATA, CM_SCSI_DEVICE_DATAe CM_SERIAL_DEVICE_DATA.
u.DeviceSpecificData.DataSize
Especifica o número de bytes acrescentados ao final da estrutura de CM_PARTIAL_RESOURCE_DESCRIPTOR.
u.DeviceSpecificData.Reserved1
Não usado.
u.DeviceSpecificData.Reserved2
Não usado.
u.Memory40
Especifica um intervalo de endereços de memória, usando os membros a seguir.
O membro u.Memory40 está disponível apenas no Windows Vista e versões posteriores do sistema operacional Windows. Os drivers devem usar RtlCmDecodeMemIoResource e rtlCmEncodeMemIoResource para ler e atualizar esse membro, em vez de atualizá-lo diretamente.
u.Memory40.Start
Para recursos brutos: especifica o endereço físico relativo ao barramento do menor intervalo de endereços de memória contíguos que são alocados para o dispositivo.
Para recursos traduzidos: especifica o endereço físico do sistema do mais baixo de um intervalo de endereços de memória contíguos que são alocados para o dispositivo.
Para obter mais informações sobre recursos brutos e traduzidos, consulte Comentários.
u.Memory40.Length40
Contém os 32 bits altos do comprimento de 40 bits, em bytes, do intervalo de endereços de memória alocados. Os 8 bits mais baixos são tratados como zero.
u.Memory48
Especifica um intervalo de endereços de memória, usando os membros a seguir.
O membro
u.Memory48.Start
Para recursos brutos: especifica o endereço físico relativo ao barramento do menor intervalo de endereços de memória contíguos que são alocados para o dispositivo.
Para recursos traduzidos: especifica o endereço físico do sistema do mais baixo de um intervalo de endereços de memória contíguos que são alocados para o dispositivo.
Para obter mais informações sobre recursos brutos e traduzidos, consulte Comentários.
u.Memory48.Length48
Contém os 32 bits altos do comprimento de 48 bits, em bytes, do intervalo de endereços de memória alocados. Os 16 bits mais baixos são tratados como zero.
u.Memory64
Especifica um intervalo de endereços de memória, usando os membros a seguir.
O membro
u.Memory64.Start
Para recursos brutos: especifica o endereço físico relativo ao barramento do menor intervalo de endereços de memória contíguos que são alocados para o dispositivo.
Para recursos traduzidos: especifica o endereço físico do sistema do mais baixo de um intervalo de endereços de memória contíguos que são alocados para o dispositivo.
Para obter mais informações sobre recursos brutos e traduzidos, consulte Comentários.
u.Memory64.Length64
Contém os 32 bits altos do comprimento de 64 bits, em bytes, do intervalo de endereços de memória alocados. Os 32 bits mais baixos são tratados como zero.
u.Connection
Especifica uma conexão com um de barramento serial
O membro u.Connection está disponível a partir do Windows 8.
u.Connection.Class
Especifica a classe de conexão. Esse membro é definido como um dos seguintes valores:
Valor | Significado |
---|---|
CM_RESOURCE_CONNECTION_CLASS_GPIO | Acesse o dispositivo por meio de um ou mais pinos em um controlador GPIO. |
CM_RESOURCE_CONNECTION_CLASS_SERIAL | Acesse o dispositivo por meio de um barramento serial ou porta serial. |
u.Connection.Type
Especifica o tipo de conexão.
Se Class = CM_RESOURCE_CONNECTION_CLASS_GPIO, Type será definido como o seguinte valor:
Valor | Significado |
---|---|
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO | Acesse o dispositivo por meio de pinos GPIO configurados para E/S. |
Um pin GPIO configurado como uma entrada de solicitação de interrupção é acessado como um recurso de interrupção comum (CmResourceTypeInterrupt).
Se Class = CM_RESOURCE_CONNECTION_CLASS_SERIAL, Type será definido como um dos seguintes valores:
Valor | Significado |
---|---|
CM_RESOURCE_CONNECTION_TYPE_SERIAL_I2C | O dispositivo está conectado a um barramento I2C. |
CM_RESOURCE_CONNECTION_TYPE_SERIAL_SPI | O dispositivo está conectado a um barramento SPI. |
CM_RESOURCE_CONNECTION_TYPE_SERIAL_UART | O dispositivo está conectado a uma porta serial. |
u.Connection.Reserved1
Não usado.
u.Connection.Reserved2
Não usado.
u.Connection.IdLowPart
Contém os 32 bits inferiores da ID de conexão de 64 bits.
u.Connection.IdHighPart
Contém os 32 bits superiores da ID de conexão de 64 bits.
Observações
Uma estrutura CM_PARTIAL_RESOURCE_DESCRIPTOR pode descrever um recurso bruto (relativo ao barramento) ou um recurso traduzido (físico do sistema), dependendo da rotina ou do IRP com o qual ele está sendo usado. Para obter mais informações, consulte recursos brutos e traduzidos e IRP_MN_START_DEVICE.
Só pode haver
Requisitos
Requisito | Valor |
---|---|
cabeçalho | wdm.h (incluem Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h) |
Consulte também
rtlCmEncodeMemIoResource