Exemplo de pilha de dispositivos WDM

Esta seção descreve os objetos do dispositivo que um conjunto de drivers pode criar para hardware USB. Ele ilustra os objetos do dispositivo WDM e como eles são colocados em camadas.

A figura a seguir mostra os objetos de dispositivo que os drivers de amostra criam. Para obter mais informações, consulte Camadas de Driver do WDM: um exemplo.

Diagrama ilustrando as camadas do objeto de dispositivo WDM de exemplo para um joystick USB.

A partir da parte inferior dessa figura, os objetos do dispositivo nas pilhas de dispositivo de exemplo incluem:

  1. Um PDO e um FDO para o barramento PCI.

    O driver do barramento raiz enumera o barramento interno do sistema (o barramento raiz) e cria um PDO para cada dispositivo encontrado. Um desses PDOs é para o barramento PCI. (A figura não mostra o PDO e o FDO para o barramento raiz.)

    O gerenciador PnP identifica o driver PCI como o driver de função para o barramento PCI, carrega o driver (se ainda não estiver carregado) e passa o PDO para o driver PCI. Em sua rotina AddDevice, o driver PCI cria um FDO para o barramento PCI (IoCreateDevice) e acopla o FDO à pilha de dispositivos (IoAttachDeviceToDeviceStack). O driver PCI cria e anexa esse FDO como parte de suas responsabilidades como driver de funções do barramento PCI.

    Este exemplo não inclui drivers de filtro para o barramento PCI.

  2. Um PDO e um FDO para o controlador de host USB.

    O gerenciador PnP orienta o driver PCI a iniciar seu dispositivo (IRP_MN_START_DEVICE) e, em seguida, consulta o driver PCI para seus filhos (IRP_MN_QUERY_DEVICE_RELATIONS com tipo de relação de BusRelations). Em resposta, o driver PCI enumera os dispositivos em seu barramento. Neste exemplo, o driver PCI encontra um controlador de host USB e cria um PDO para esse dispositivo. A seta larga na figura indica que o controlador de host USB é um "filho" do barramento PCI. O driver PCI cria PDOs para seus dispositivos filhos como parte das suas funções como driver do barramento PCI.

    O gerenciador PnP identifica o par de driver de classe/miniclasse do controlador de host USB como o driver de função para o controlador de host USB e carrega o par de driver. O gerenciador PnP chama o conjunto de drivers no momento apropriado para criar e anexar um FDO ao controlador de host USB.

    Este exemplo não inclui drivers de filtro para o controlador de host USB.

  3. Um PDO e um FDO para o hub USB.

    O controlador de host USB enumera seu barramento, localiza o hub USB na única porta e cria um PDO para o hub. O driver do hub USB cria e anexa um FDO para o hub.

    Este exemplo não inclui drivers de filtro para o hub USB.

  4. Um PDO, um FDO e dois DOs de filtro para o dispositivo de joystick.

    O driver do hub USB enumera seu barramento, localiza um dispositivo HID (o joystick) e cria um PDO para o joystick.

    Neste exemplo, um driver de filtro de nível inferior é configurado no registro para dispositivos joystick, de modo que o gerenciador PnP carrega o driver de filtro. O driver de filtro determina que ele é relevante para o dispositivo e cria e anexa um filtro DO à pilha de dispositivos.

    O gerenciador PnP determina que o driver de função para o dispositivo joystick é o par de drivers da classe/miniclasse HID e carrega esses drivers. O par de controladores consiste em um controlador de miniclasse vinculado a uma DLL de controlador de classe. Juntos, eles funcionam como um único driver de função para o dispositivo. O par de driver de classe/miniclasse cria um objeto de dispositivo, o FDO, e o anexa à pilha do dispositivo.

    Um driver de filtro de nível superior cria e anexa um filtro DO à pilha do dispositivo, de maneira semelhante ao filtro de nível inferior.

O driver de barramento principal sempre cria o PDO na base da pilha de dispositivos para um aparelho específico. Quando os drivers lidam com PnP ou IRPs de energia, eles devem passar cada IRP por toda a pilha de dispositivos até o PDO e seu driver de barramento associado.

A figura a seguir mostra as mesmas pilhas de dispositivos da figura anterior, mas enfatiza quais objetos de dispositivo cada driver cria e gerencia.

diagrama ilustrando camadas de objeto de dispositivo de exemplo na perspectiva do driver.

Um controlador de barramento abrange mais de uma camada de dispositivos. Um motorista de ônibus cria o FDO para seu controlador ou adaptador de barramento e cria um PDO para cada um de seus dispositivos filho.