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 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 da união u é válida, conforme indicado na tabela a seguir. (Esses sinalizadores são usados em estruturas de CM_PARTIAL_RESOURCE_DESCRIPTOR e IO_RESOURCE_DESCRIPTOR , exceto quando observado.)
Valor do tipo | subestrutura de 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 u.Memory40, u.Memory48 ou u.Memory64. Os sinalizadores CM_RESOURCE_MEMORY_LARGE_XXX definidos no membro Flags determina qual estrutura é usada. |
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 constantes 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
Sinalizador | 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 subtractiva". (Em geral, os dispositivos PCI usam decodificação positiva e os barramentos ISA usam o decodificador subtractivo.) |
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
Sinalizador | 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 começando com 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 começando com Windows 8. Para obter mais informações sobre os recursos de ativação, consulte Habilitando o ativamento do dispositivo. |
Tipo de recurso CmResourceTypeMemory
Sinalizador | 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é-buscado. |
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 é armazenável em cache. |
Tipo de recurso CmResourceTypeMemoryLarge
Sinalizador | 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 u.Memory64 . |
Tipo de recurso CmResourceTypeDma
Sinalizador | 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 de barramento master. |
CM_RESOURCE_DMA_TYPE_A | Digite um AMD |
CM_RESOURCE_DMA_TYPE_B | Tipo B DMA |
CM_RESOURCE_DMA_TYPE_F | Tipo F DMA |
CM_RESOURCE_DMA_V3 | Use o membro DmaV3 em vez do membro Dma . O membro DmaV3 está disponível a partir do Windows 8. |
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 mais baixo de um intervalo de endereços de porta de E/S contíguos alocados ao 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 ao 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 Grupo e Afinidade juntos especificam uma afinidade de grupo que indica quais processadores o dispositivo pode interromper. Para especificar uma afinidade para qualquer grupo, defina Grupo como ALL_PROCESSOR_GROUPS.
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 do tipo KAFFINITY que indica o conjunto de processadores que o dispositivo pode interromper. Para indicar que o dispositivo pode interromper qualquer processador, esse membro é 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 DUMMYUNIONNAME .
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 Grupo e Afinidade 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 Grupo como ALL_PROCESSOR_GROUPS.
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.Translated tem os seguintes membros:
u.MessageInterrupt.DUMMYUNIONNAME.Translated.Level
Especifica o IRQL do dispositivo (DIRQL) atribuído às interrupções do dispositivo.
Especifica o IRQL do dispositivo (DIRQL) 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 mais baixo de um intervalo de endereços de memória contíguos alocados ao 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 AMD, usando um dos seguintes membros:
u.Dma.Channel
Especifica o número do canal DMA em um controlador de 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 DMA_OPERATIONS .
O membro u.DmaV3 está disponível a partir do Windows 8.
u.DmaV3.Channel
Especifica o número do canal DMA no controlador de DMA do sistema alocado para o dispositivo.
u.DmaV3.RequestLine
Especifica o número da linha de solicitação no controlador de DMA do sistema alocado para o dispositivo.
u.DmaV3.TransferWidth
Especifica a largura, em bits, do barramento de dados que o controlador de DMA do sistema 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 barramento, usando os seguintes membros:
u.BusNumber.Start
Especifica o menor número de um intervalo de ônibus contíguos alocados ao 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 usado, 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_DATA e CM_SERIAL_DEVICE_DATA.
u.DeviceSpecificData.DataSize
Especifica o número de bytes acrescentados ao final da estrutura 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 em 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 de um intervalo de endereços de memória contíguos alocados ao 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 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 está disponível apenas no Windows Vista e em 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.Memory48.Start
Para recursos brutos: especifica o endereço físico relativo ao barramento do menor de um intervalo de endereços de memória contíguos alocados ao 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 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 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.Memory64.Start
Para recursos brutos: especifica o endereço físico relativo ao barramento do menor de um intervalo de endereços de memória contíguos alocados ao 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 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 barramento serial ou porta serial ou com um conjunto de um ou mais pinos de E /S de uso geral (GPIO). Os membros a seguir descrevem essa conexão.
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.
Comentários
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 está sendo usado. Para obter mais informações, consulte Recursos brutos e traduzidos e IRP_MN_START_DEVICE.
Só pode haver um bloco DeviceSpecificData. Ele deve estar localizado no final de todos os descritores de recursos em um bloco de descritor completo.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h) |
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de