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

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