Partilhar via


Criando uma lista de requisitos de recursos

Quando um controlador de ônibus detecta um dispositivo filho, o controlador é responsável por compilar uma lista de requisitos de recursos para o dispositivo. Cada item na lista é uma configuração lógica para o dispositivo.

Depois que o driver reporta o dispositivo durante a enumeração de barramento, a estrutura chama a função de retorno de chamada EvtDeviceResourceRequirementsQuery do driver. Essa função callback recebe um identificador para um objeto "resource-requirements-list" que representa uma lista de requisitos de recursos vazia.

O driver deve fazer o seguinte para adicionar informações a uma lista de requisitos de recursos:

  • Crie uma configuração lógica vazia.

    Para cada configuração lógica que o driver especificará, o driver deve chamar WdfIoResourceListCreate para criar uma configuração lógica vazia.

  • Adicione descritores de recursos à configuração lógica.

    Para adicionar descritores de recursos a uma configuração lógica, o driver deve fazer o seguinte, para cada tipo de recurso de hardware que o dispositivo requer:

    1. Preencha uma estrutura IO_RESOURCE_DESCRIPTOR alocada por um driver, que especifica um intervalo de valores válidos para um recurso específico.
    2. Chame WdfIoResourceListAppendDescriptor ou WdfIoResourceListInsertDescriptor para adicionar o conteúdo da estrutura IO_RESOURCE_DESCRIPTOR a uma configuração lógica.

    Se um dispositivo usa mais de uma instância de um tipo de recurso, todos os drivers na pilha que acedem ao recurso devem estar cientes da ordem em que os recursos são adicionados. Por exemplo, se um dispositivo requer dois intervalos de endereços de porta de E/S, todos os drivers que acessam os descritores de recursos devem estar cientes da ordem em que os dois intervalos são adicionados à configuração lógica.

  • Adicione a configuração lógica à lista de requisitos de recursos.

    Para adicionar uma configuração lógica à lista de requisitos de recursos do dispositivo, o driver chama WdfIoResourceRequirementsListAppendIoResList ou WdfIoResourceRequirementsListInsertIoResList.

    Ao atribuir recursos a um dispositivo, o gerenciador PnP tenta corresponder aos requisitos da primeira configuração lógica na lista. Se os recursos necessários para essa configuração não estiverem disponíveis, o gerenciador PnP corresponderá à próxima configuração na lista para a qual os recursos estão disponíveis.

    Se o seu driver suportar um dispositivo não-PnP, normalmente deve também chamar WdfIoResourceRequirementsListSetSlotNumber e WdfIoResourceRequirementsListSetInterfaceType.

Depois que a função de retorno de chamada EvtDeviceResourceRequirementsQuery do driver retorna, o framework passa a lista de requisitos de recursos para o gestor PnP.