Partilhar via


Exemplo de pilha de dispositivos WDM

Esta seção descreve os objetos de dispositivo que um conjunto de drivers pode criar para hardware USB. Ilustra os objetos de dispositivos WDM e como eles se organizam em camadas.

A figura seguinte mostra os objetos de dispositivo que os controladores de exemplo criam. Para obter mais informações, consulte WDM Driver Layers: An Example.

Diagrama ilustrando um exemplo de camadas dos objetos de dispositivos WDM para um joystick USB.

Começando na parte inferior desta figura, os objetos de dispositivo nas pilhas de dispositivos de exemplo incluem:

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

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

    O gestor PnP identifica o controlador PCI como o controlador de função para o barramento PCI, carrega o controlador (se ainda não estiver carregado) e entrega o PDO ao controlador PCI. Na sua rotina AddDevice, o driver PCI cria um FDO para o barramento PCI (IoCreateDevice) e liga o FDO à stack de dispositivos (IoAttachDeviceToDeviceStack) para o barramento PCI. O driver PCI cria e anexa este FDO como parte das suas responsabilidades enquanto driver de função para o barramento PCI.

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

  2. Um DOP e um FDO para o controlador host USB.

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

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

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

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

    O controlador host USB enumera seu barramento, localiza o hub USB na única porta e cria um DOP 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 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, para que o gerenciador PnP carregue o driver de filtro. O driver de filtro determina que é 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 driver de classe HID/miniclasse e carrega esses drivers. O par de drivers consiste em um mini driver de classe vinculado a uma DLL de driver de classe. Juntos, eles atuam como um controlador de função para o dispositivo. O par de driver de classe/miniclasse cria um objeto de dispositivo, o FDO, e o anexa à pilha de dispositivos.

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

O controlador principal do barramento sempre cria o PDO na parte inferior da pilha de dispositivos para determinando um dispositivo específico. Quando os drivers lidam com PnP ou IRPs de energia, eles devem passar cada IRP até a pilha de dispositivos para o DOP e seu driver de barramento associado.

A figura seguinte mostra as mesmas pilhas de dispositivos da figura anterior, mas destaca quais objetos de dispositivo cada controlador cria e gere.

Diagrama que ilustra as camadas de objetos de dispositivo de exemplo na perspetiva do controlador.

Um controlador de barramento abrange mais de uma pilha de dispositivos. Um driver de barramento cria o FDO para o seu adaptador ou controlador de barramento e cria um PDO para cada um dos seus dispositivos subordinados.