Introdução aos recursos de hardware

Os recursos de hardware de um sistema são as portas de E/S, vetores de interrupção, canais de DMA (acesso direto à memória) e outros caminhos de comunicação que devem ser atribuídos a cada dispositivo conectado ao sistema. Os tópicos nesta seção descrevem como os drivers do KMDF (Kernel-Mode Driver Framework) negociam os requisitos de recursos de hardware para um dispositivo, revisam a lista de recursos proposta e recebem os recursos atribuídos. Esta seção também discute como os drivers KMDF e UMDF (User-Mode Driver Framework) acessam e mapeiam recursos atribuídos.

Depois que um usuário conecta um dispositivo PnP, o driver que enumera o dispositivo normalmente cria uma ou mais configurações lógicas, que são combinações de recursos de hardware que o dispositivo pode usar. Essas configurações incluem o seguinte:

  • Uma configuração de inicialização que lista os recursos de hardware que o dispositivo requer quando o sistema é iniciado. (Para dispositivos PnP, essas informações são fornecidas pelo BIOS.)

  • Configurações adicionais nas quais o dispositivo pode operar. O driver agrupa essas configurações adicionais em uma lista de requisitos de recursos. O gerenciador PnP eventualmente selecionará recursos dessa lista para atribuir ao dispositivo.

Depois que o driver cria as configurações lógicas, ele as envia para a estrutura e a estrutura as envia para o gerenciador PnP.

Em seguida, o gerenciador PnP determina quais drivers o dispositivo exige e os carrega se eles ainda não estiverem carregados. O gerenciador PnP envia a lista de requisitos de hardware do dispositivo para os drivers do dispositivo para revisão. Os drivers de função e filtro podem modificar essa lista e enviá-la de volta para o gerenciador PnP.

O gerenciador PnP examina a lista de requisitos de hardware modificado e determina quais dos recursos especificados estão realmente disponíveis no sistema. Se o dispositivo exigir recursos que o gerenciador de PnP havia atribuído anteriormente a outro dispositivo, o gerenciador PnP poderá tentar redistribuir recursos entre os dispositivos do sistema.

Em seguida, o gerenciador PnP cria uma lista de recursos, que é uma lista de recursos que o gerenciador PnP pretende atribuir ao dispositivo. O gerenciador PnP envia essa lista para os drivers do dispositivo para revisão. Neste ponto, os drivers de função e filtro podem remover recursos da lista, mas não podem adicionar recursos a ela.

Por fim, o gerenciador PnP atribui recursos ao dispositivo. A estrutura passa a lista de recursos para a função do dispositivo e os drivers de filtro, e o driver de função do dispositivo executa qualquer inicialização necessária para que o dispositivo e o driver possam acessar os recursos.

As etapas a seguir descrevem o processo com mais detalhes:

  1. Um usuário conecta um dispositivo.

  2. Um motorista de ônibus detecta o dispositivo e o enumera .

  3. A estrutura chama a função de retorno de chamada EvtDeviceResourcesQuery do driver de barramento, que cria uma lista de recursos que descreve a configuração de inicialização do dispositivo.

  4. A estrutura chama a função de retorno de chamada EvtDeviceResourceRequirementsQuery do driver de barramento, que cria uma lista de requisitos de recursos para o dispositivo.

  5. O gerenciador PnP determina quais drivers o dispositivo exige e os carrega, se ainda não estiverem carregados, para criar uma pilha de driver para o dispositivo.

  6. O gerenciador PnP envia a lista de requisitos de recursos do dispositivo para a pilha de driver para revisão. À medida que a lista percorre a pilha de driver, a estrutura chama cada função e filtra a função de retorno de chamada EvtDeviceFilterRemoveResourceRequirements do driver de filtro. À medida que a lista faz backup da pilha, a estrutura chama cada função e filtra a função de retorno de chamada EvtDeviceFilterAddResourceRequirements do driver de filtro. Ambas as funções de retorno de chamada podem modificar a lista de requisitos de recursos.

  7. O gerenciador PnP cria uma lista de recursos para o dispositivo e a envia para a pilha de driver para revisão. A estrutura chama cada função e filtra a função de retorno de chamada EvtDeviceRemoveAddedResources do driver, que remove os recursos que a função de retorno de chamada EvtDeviceFilterAddResourceRequirements do driver adicionou para que o driver de barramento não tente usá-los.

  8. A estrutura recebe a lista de recursos final do gerenciador PnP e a armazena.

  9. Se um driver chamar WdfInterruptCreate para criar objetos de interrupção, a estrutura encontrará recursos de interrupção na lista de recursos e os atribuirá aos objetos de interrupção.

  10. Depois que o dispositivo tiver inserido um estado D0 não inicializado, a estrutura chamará a função de retorno de chamada EvtDevicePrepareHardware de cada driver, passando versões brutas e traduzidas da lista de recursos do dispositivo como um argumento de entrada. O driver pode salvar a lista de recursos, que é válida até que a estrutura chame a função de retorno de chamada EvtDeviceReleaseHardware do driver.