Recursos de hardware
Os recursos de hardware são os caminhos de barramento atribuíveis e endereçáveis que permitem que dispositivos periféricos e processadores do sistema se comuniquem entre si. Os recursos de hardware normalmente incluem endereços de porta de E/S, vetores de interrupção e blocos de endereços de memória relativos ao barramento.
Antes que o sistema possa se comunicar com uma instância de dispositivo, o gerenciador de PnP deve atribuir recursos de hardware à instância do dispositivo com base no conhecimento de quais recursos estão disponíveis e quais a instância do dispositivo é capaz de usar. Os recursos são atribuídos a cada nó de dispositivo na árvore de dispositivos (supondo que o dispositivo representado precise de recursos e esses recursos estejam disponíveis). O gerenciador de PnP controla os recursos de hardware usando listas, que ele associa aos nós do dispositivo. Ele usa dois tipos de listas:
Lista de Requisitos de Recursos
Normalmente, os dispositivos são projetados para operar dentro de intervalos de atribuições de recursos. Por exemplo, um dispositivo pode exigir apenas um vetor de interrupção, mas pode ser capaz de usar qualquer um de um intervalo de vetores. Para cada instância de dispositivo, o gerenciador de PnP mantém uma lista de requisitos de recursos que especifica todos os intervalos de recursos de hardware nos quais o dispositivo pode operar. O nome da lista decorre do fato de que o gerenciador PnP é necessário para escolher recursos nessa lista ao atribuí-los ao dispositivo.
O código do modo kernel especifica listas de requisitos de recursos usando estruturas de IO_RESOURCE_REQUIREMENTS_LIST (como entrada para rotinas do sistema ou em resposta a IRPs). O código do modo de usuário especifica listas de requisitos de recursos usando estruturas do gerenciador de configurações PnP como entrada para funções do gerenciador de configurações PnP.
Lista de Recursos
Quando o gerenciador PnP atribui recursos a um dispositivo, ele controla essas atribuições criando uma lista de recursos atribuídos para cada instância do dispositivo. Essas listas podem ser chamadas de listas de atribuição de recursos, mas esse nome normalmente é abreviado para listas de recursos. O gerenciador de PnP pode alterar o conteúdo da lista de recursos à medida que os dispositivos são adicionados ou removidos de um sistema e os recursos são realocados posteriormente. (Os recursos também podem ser atribuídos por um BIOS PnP. Além disso, o software de instalação, usando arquivos INF ou entrada do usuário, pode forçar o gerenciador PnP a atribuir recursos específicos a um dispositivo.)
O código do modo kernel especifica listas de recursos usando estruturas de CM_RESOURCE_LIST (como entrada para rotinas do sistema ou em resposta a IRPs). O código do modo de usuário especifica listas de recursos usando estruturas do gerenciador de configurações PnP como entrada para funções do Gerenciador de Configurações PnP.
O gerenciador PnP armazena listas de requisitos de recursos e listas de recursos no registro, em que eles podem ser exibidos usando Regedit.exe. Os drivers podem acessar essas listas indiretamente por meio de rotinas de Plug and Play e Plug and Play IRPs menores. Os aplicativos no modo de usuário podem usar funções do gerenciador de configurações PnP. (Drivers e aplicativos não devem acessar diretamente essas listas usando funções do Registro porque o formato de armazenamento está sujeito a alterações em uma versão futura.)
Configurações lógicas
As listas de requisitos de recursos e as listas de recursos contêm uma ou mais configurações lógicas. Cada configuração lógica identifica um intervalo de recursos aceitáveis ou um conjunto de recursos específicos para uma instância de dispositivo específica. Além disso, cada configuração lógica de uma instância de dispositivo pertence a um dos tipos de configuração lógica. Os tipos de configuração estão listados abaixo. Várias configurações lógicas, dos mesmos ou diferentes tipos, podem ser atribuídas a cada instância do dispositivo.
Tipos de configuração lógica para listas de requisitos de recursos
Configuração básica
Uma lista de requisitos de recursos que identifica os intervalos de recursos fornecidos por um dispositivo Plug and Play. Um driver deve retornar essa lista quando receber o IRP IRP_MN_QUERY_RESOURCE_REQUIREMENTS . (A configuração básica de um dispositivo não PnP pode ser descrita em um arquivo INF. Nesse caso, o software de instalação do dispositivo lê o arquivo INF e chama as funções do gerenciador de configurações PnP para criar uma lista de requisitos.)
Configuração filtrada
Uma lista de requisitos de recursos que foi fornecida a uma pilha de driver, possivelmente modificada, retornada pela pilha de driver, em resposta à IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP. O gerenciador PnP usa a configuração filtrada resultante como base para alocar recursos.
Substituir Configuração
Uma lista de requisitos de recursos que substitui as configurações básicas. Normalmente, um instalador de dispositivo cria uma configuração de substituição se o arquivo INF do dispositivo incluir uma seção INF DDInstall.LogConfigOverride. Uma configuração de substituição não será removida se seu dispositivo for fisicamente removido do sistema.
Tipos de configuração lógica para listas de recursos
Configuração de inicialização
Uma lista de recursos que identifica os recursos atribuídos a uma instância de dispositivo quando o sistema é inicializado. (Para dispositivos PnP, essa é a configuração fornecida pelo BIOS; para dispositivos não PnP, esses recursos podem ser selecionados por jumpers no cartão.) Um driver deve retornar essa lista de recursos quando receber o IRP IRP_MN_QUERY_RESOURCES. (Uma configuração de inicialização pode estar parcialmente vazia se o BIOS não puder determinar todos os recursos usados por um dispositivo.) O gerenciador PnP poderá modificar essa lista se um dispositivo for removido ou reiniciado. Para dispositivos não PnP, esse tipo de configuração pode ser usado em vez de uma configuração forçada, nesse caso, ele tem uma prioridade de configuração menor do que uma configuração forçada equivalente. Somente uma configuração de inicialização pode existir para cada instância do dispositivo.
Configuração forçada
Uma lista de recursos que identifica os recursos que uma instância de dispositivo deve usar. Uma configuração forçada impede que o gerenciador PnP atribua outros recursos à instância do dispositivo. Um instalador de dispositivo pode criar uma configuração forçada com base nas informações contidas em um INF ou recebidas de um usuário. Uma configuração forçada não será removida se seu dispositivo for fisicamente removido do sistema. Somente uma configuração forçada pode existir para cada instância do dispositivo.
Configuração alocada
Uma lista de recursos que identifica os recursos atualmente em uso por uma instância de dispositivo. Somente uma configuração alocada pode existir para cada instância do dispositivo.
Os drivers de dispositivo são responsáveis por determinar a configuração básica, a configuração filtrada e a configuração de inicialização de um dispositivo compatível com PnP e por retornar essas informações em resposta aos IRPs enviados pelo gerenciador PnP. (Para obter mais informações, consulte Adicionando um dispositivo PnP a um sistema em execução.) O software de instalação do driver pode criar configurações de substituição, configurações forçadas e, para dispositivos não PnP, configurações de inicialização. O gerenciador PnP mantém a configuração alocada de cada instância de dispositivo.
Uma prioridade é atribuída a cada configuração quando ela é criada. Se o gerenciador de PnP descobrir que uma instância de dispositivo recebeu várias configurações lógicas do mesmo tipo, ele tentará usar aquela com a prioridade mais alta primeiro. Se essa configuração resultar em conflitos de recursos, ela tentará a configuração com a próxima prioridade inferior. (Para obter uma lista de prioridades de configuração, consulte CM_Add_Empty_Log_Conf.)