estrutura IO_RESOURCE_DESCRIPTOR (wdm.h)

A estrutura IO_RESOURCE_DESCRIPTOR descreve um intervalo de recursos de hardware brutos, de um tipo, que podem ser usados por um dispositivo. Uma matriz de estruturas IO_RESOURCE_DESCRIPTOR está contida em cada estrutura IO_RESOURCE_LIST .

Sintaxe

typedef struct _IO_RESOURCE_DESCRIPTOR {
  UCHAR  Option;
  UCHAR  Type;
  UCHAR  ShareDisposition;
  UCHAR  Spare1;
  USHORT Flags;
  USHORT Spare2;
  union {
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Port;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory;
    struct {
      ULONG             MinimumVector;
      ULONG             MaximumVector;
#if ...
      IRQ_DEVICE_POLICY AffinityPolicy;
      USHORT            Group;
#else
      IRQ_DEVICE_POLICY AffinityPolicy;
#endif
      IRQ_PRIORITY      PriorityPolicy;
      KAFFINITY         TargetedProcessors;
    } Interrupt;
    struct {
      ULONG MinimumChannel;
      ULONG MaximumChannel;
    } Dma;
    struct {
      ULONG RequestLine;
      ULONG Reserved;
      ULONG Channel;
      ULONG TransferWidth;
    } DmaV3;
    struct {
      ULONG            Length;
      ULONG            Alignment;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Generic;
    struct {
      ULONG Data[3];
    } DevicePrivate;
    struct {
      ULONG Length;
      ULONG MinBusNumber;
      ULONG MaxBusNumber;
      ULONG Reserved;
    } BusNumber;
    struct {
      ULONG Priority;
      ULONG Reserved1;
      ULONG Reserved2;
    } ConfigData;
    struct {
      ULONG            Length40;
      ULONG            Alignment40;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory40;
    struct {
      ULONG            Length48;
      ULONG            Alignment48;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory48;
    struct {
      ULONG            Length64;
      ULONG            Alignment64;
      PHYSICAL_ADDRESS MinimumAddress;
      PHYSICAL_ADDRESS MaximumAddress;
    } Memory64;
    struct {
      UCHAR Class;
      UCHAR Type;
      UCHAR Reserved1;
      UCHAR Reserved2;
      ULONG IdLowPart;
      ULONG IdHighPart;
    } Connection;
  } u;
} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;

Membros

Option

Especifica se essa descrição de recurso é obrigatória, preferencial ou alternativa. Um dos seguintes valores deve ser usado:

Valor Significado
0 O intervalo de recursos especificado é necessário, a menos que intervalos alternativos também sejam especificados.
IO_RESOURCE_PREFERRED O intervalo de recursos especificado é preferencial para qualquer intervalo alternativo.
IO_RESOURCE_ALTERNATIVE O intervalo de recursos especificado é uma alternativa ao intervalo que o precede. Por exemplo, se uma estrutura IO_RESOURCE_DESCRIPTOR especificar IRQ 5, com IO_RESOURCE_PREFERRED definido e a próxima estrutura especificar IRQ 3, com IO_RESOURCE_ALTERNATIVE definido, o gerenciador PnP atribuirá IRQ 3 ao dispositivo somente se IRQ 5 estiver indisponível. Várias alternativas podem ser especificadas para cada recurso. Tanto IO_RESOURCE_ALTERNATIVE quanto IO_RESOURCE_PREFERRED podem ser definidos, indicando uma alternativa preferencial.
IO_RESOURCE_DEFAULT Não usado.

Type

Identifica o tipo de recurso. Para obter uma lista de valores válidos, consulte o membro Type da estrutura CM_PARTIAL_RESOURCE_DESCRIPTOR .

ShareDisposition

Indica se o recurso descrito pode ser compartilhado. Para obter uma lista de valores válidos, consulte o membro ShareDisposition da estrutura CM_PARTIAL_RESOURCE_DESCRIPTOR .

Spare1

Não usado.

Flags

Contém sinalizadores de bits específicos para o tipo de recurso. A tabela a seguir mostra os sinalizadores válidos se o Tipo = CmResourceTypeInterrupt:

Valor Significado
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE A linha IRQ é disparada em nível. (Esses IRQs geralmente são compartilhá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 Se esse sinalizador estiver definido, o membro u.Interrupt incluirá dados que descrevem a política de interrupção do dispositivo.
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT A interrupção é capaz de ativar 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 recursos de ativação, consulte Habilitando a ativação do dispositivo.
CM_RESOURCE_INTERRUPT_WAKE_HINT A interrupção é capaz de ativar 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 recursos de ativação, consulte Habilitando a ativação do dispositivo.

Para obter uma lista de sinalizadores válidos para outros tipos de recursos, consulte a descrição do membro Flags da estrutura CM_PARTIAL_RESOURCE_DESCRIPTOR .

Spare2

Não usado.

u

Define a união u .

u.Port

Especifica um intervalo de endereços de porta de E/S, usando os membros a seguir.

Os drivers devem usar RtlIoDecodeMemIoResource e RtlIoEncodeMemIoResource para ler e atualizar esse membro, em vez de atualizá-lo diretamente.

u.Port.Length

O comprimento, em bytes, do intervalo de endereços de porta de E/S atribuíveis.

u.Port.Alignment

O alinhamento, em bytes, ao qual o endereço inicial atribuído deve aderir. O endereço inicial atribuído deve ser um múltiplo inteiro de Alignment.

u.Port.MinimumAddress

O endereço mínimo da porta de E/S relativa ao barramento que pode ser atribuído ao dispositivo.

u.Port.MaximumAddress

O endereço máximo da porta de E/S relativa ao barramento que pode ser atribuído ao dispositivo.

u.Memory

Especifica um intervalo de endereços de memória, usando os seguintes membros:

Drivers para Windows Vista e versões posteriores do sistema operacional Windows devem usar RtlIoDecodeMemIoResource e RtlIoEncodeMemIoResource para ler e atualizar esse membro, em vez de atualizá-lo diretamente.

u.Memory.Length

O comprimento, em bytes, do intervalo de endereços de memória atribuíveis.

u.Memory.Alignment

O alinhamento, em bytes, ao qual o endereço inicial atribuído deve aderir. O endereço inicial atribuído deve ser um múltiplo inteiro de Alignment.

u.Memory.MinimumAddress

O endereço de memória relativo ao barramento mínimo que pode ser atribuído ao dispositivo.

u.Memory.MaximumAddress

O endereço máximo de memória relativa ao barramento que pode ser atribuído ao dispositivo.

u.Interrupt

Especifica um intervalo de vetores de interrupção, usando os seguintes membros:

u.Interrupt.MinimumVector

O vetor mínimo relativo ao barramento que pode ser atribuído ao dispositivo.

u.Interrupt.MaximumVector

O vetor relativo máximo do barramento que pode ser atribuído ao dispositivo.

Se o bit do sinalizador CM_RESOURCE_INTERRUPT_MESSAGE for definido, os valores dos membros MinimumVector e MaximumVector terão significados especiais. Para obter mais informações, consulte Usando descritores de recurso de interrupção.

O sistema fornece os seguintes membros adicionais no Windows Vista e versões posteriores do sistema operacional Windows:

u.Interrupt.AffinityPolicy

Especifica um valor IRQ_DEVICE_POLICY que indica como o sistema deve distribuir as interrupções de um dispositivo entre processadores.

Especifica um valor IRQ_DEVICE_POLICY que indica como o sistema deve distribuir as interrupções de um dispositivo entre processadores.

u.Interrupt.Group

Especifica um número de grupo de processadores. Group é um membro válido, mas opcional do u.Interrupt somente no Windows 7 e versões posteriores do Windows. Esse membro só existirá se NT_PROCESSOR_GROUPS for definido em tempo de compilação. Se o membro group existir, os membros Group e TargetedProcessors juntos especificarão uma afinidade de grupo que identifica o conjunto de processadores que devem lidar com as interrupções do dispositivo. Para especificar uma afinidade para um grupo específico, defina AffinityPolicy como IrqPolicySpecifiedProcessors e defina Group como o número de grupo apropriado. Além disso, TargetedProcessors deve especificar os processadores de destino no grupo. Se você definir AffinityPolicy como um valor diferente de IrqPolicySpecifiedProcessors, defina Group como ALL_PROCESSOR_GROUPS para indicar que o driver tem reconhecimento de grupo (ou seja, projetado para lidar com informações sobre grupos de processadores). Um driver não poderá especificar processadores de destino se Group for igual a ALL_PROCESSOR_GROUPS; essas especificações de destino são ignoradas.

u.Interrupt.PriorityPolicy

Especifica um valor IRQ_PRIORITY que indica a prioridade com a qual o sistema deve expedir as interrupções do dispositivo.

u.Interrupt.TargetedProcessors

Especifica um valor KAFFINITY que indica quais processadores devem lidar com as interrupções do dispositivo. Esse valor será usado somente se AffinityPolicy for IrqPolicySpecifiedProcessors.

u.Dma

Especifica uma configuração de AMD, usando um dos seguintes membros:

u.Dma.MinimumChannel

O canal mínimo de DMA relativo ao barramento que pode ser atribuído ao dispositivo.

u.Dma.MaximumChannel

O canal DMA relativo ao barramento máximo que pode ser atribuído ao dispositivo.

u.DmaV3

Especifica as configurações de AMD 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.RequestLine

O número da linha de solicitação no controlador de DMA do sistema alocado para o dispositivo.

u.DmaV3.Reserved

Não usado.

u.DmaV3.Channel

O número do canal DMA no controlador de DMA do sistema que é 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.Generic

Não usado.

u.Generic.Length

Não usado.

u.Generic.Alignment

Não usado.

u.Generic.MinimumAddress

Não usado.

u.Generic.MaximumAddress

Não usado.

u.DevicePrivate

Reservado para uso do sistema.

u.DevicePrivate.Data[3]

Reservado para uso do sistema.

u.BusNumber

Especifica números de barramento, usando os seguintes membros:

u.BusNumber.Length

O número de números de ônibus necessários.

u.BusNumber.MinBusNumber

O número mínimo de barramento relativo ao barramento que pode ser atribuído ao dispositivo.

u.BusNumber.MaxBusNumber

O número máximo de barramento relativo ao barramento que pode ser atribuído ao dispositivo.

u.BusNumber.Reserved

Não usado.

u.ConfigData

Reservado para uso do sistema.

u.ConfigData.Priority

Define a Prioridade do membro ULONG.

u.ConfigData.Reserved1

Não usado.

u.ConfigData.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 para essas versões do Windows devem usar RtlIoDecodeMemIoResource e RtlIoEncodeMemIoResource para ler e atualizar esse membro, em vez de atualizá-lo diretamente.

u.Memory40.Length40

Os 32 bits altos do comprimento de 40 bits, em bytes, do intervalo de endereços de memória atribuíveis. Os 8 bits inferiores são tratados como zero.

u.Memory40.Alignment40

Os 32 bits altos do alinhamento de 40 bits, em bytes, aos quais o endereço inicial atribuído deve aderir. Os 8 bits inferiores são tratados como zero. O endereço inicial atribuído será um múltiplo do alinhamento.

u.Memory40.MinimumAddress

O endereço de memória relativa ao barramento mínimo que pode ser atribuído ao dispositivo.

u.Memory40.MaximumAddress

O endereço máximo de memória relativa ao barramento que pode ser atribuído ao dispositivo.

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 para essas versões do Windows devem usar RtlIoDecodeMemIoResource e RtlIoEncodeMemIoResource para ler e atualizar esse membro, em vez de atualizá-lo diretamente.

u.Memory48.Length48

Os 32 bits altos do comprimento de 48 bits, em bytes, do intervalo de endereços de memória atribuíveis. Os 16 bits inferiores são tratados como zero.

u.Memory48.Alignment48

Os 32 bits altos do alinhamento de 48 bits, em bytes, aos quais o endereço inicial atribuído deve aderir. Os 16 bits inferiores são tratados como zero. O endereço inicial atribuído será um múltiplo do alinhamento.

u.Memory48.MinimumAddress

O endereço de memória relativa ao barramento mínimo que pode ser atribuído ao dispositivo.

u.Memory48.MaximumAddress

O endereço máximo de memória relativa ao barramento que pode ser atribuído ao dispositivo.

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. Drivers para Windows Vista e versões posteriores do sistema operacional Windows devem usar RtlIoDecodeMemIoResource e RtlIoEncodeMemIoResource para ler e atualizar esse membro, em vez de atualizá-lo diretamente.

u.Memory64.Length64

Os 32 bits altos do comprimento de 64 bits, em bytes, do intervalo de endereços de memória atribuíveis. Os 32 bits inferiores são tratados como zero.

u.Memory64.Alignment64

Os 32 bits altos do alinhamento de 64 bits, em bytes, aos quais o endereço inicial atribuído deve aderir. Os 32 bits inferiores são tratados como zero. O endereço inicial atribuído será um múltiplo do alinhamento.

u.Memory64.MinimumAddress

O endereço de memória relativa ao barramento mínimo que pode ser atribuído ao dispositivo.

u.Memory64.MaximumAddress

O endereço máximo de memória relativa ao barramento que pode ser atribuído ao dispositivo.

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).

O membro u.Connection está disponível a partir do Windows 8.

Os membros a seguir descrevem essa conexão.

u.Connection.Class

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

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

Os 32 bits inferiores da ID de conexão de 64 bits.

u.Connection.IdHighPart

Os 32 bits superiores da ID de conexão de 64 bits.

Requisitos

Requisito Valor
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)

Confira também

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt