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