Compartilhar via


Exemplo de pilha de dispositivos WDM

Esta seção descreve os objetos de dispositivo criados por um possível conjunto de drivers para hardware USB para ilustrar objetos de dispositivo WDM e como eles são colocados em camadas.

A figura a seguir mostra os objetos de dispositivo criados pelos drivers de exemplo descritos em Camadas de Driver do WDM: Um Exemplo.

diagrama ilustrando camadas de 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. (O PDO e o FDO do barramento raiz não são mostrados na figura.)

    O gerenciador PnP identifica o driver PCI como o driver de função do barramento PCI, carrega o driver (se ele 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 anexa o FDO à pilha do dispositivo (IoAttachDeviceToDeviceStack) para o barramento PCI. O driver PCI cria e anexa esse FDO como parte de suas responsabilidades como o driver de função do barramento PCI.

    Não há drivers de filtro para o barramento PCI neste exemplo.

  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 o tipo de relação BusRelations). Em resposta, o driver PCI enumera os dispositivos em seu barramento. Neste exemplo, o driver PCI localiza 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 filho como parte de suas responsabilidades como motorista de ônibus para o ônibus PCI.

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

    Não há drivers de filtro para o controlador de host USB neste exemplo.

  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.

    Não há drivers de filtro para o hub USB neste exemplo.

  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 foi configurado no registro para dispositivos joystick, portanto, 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 do dispositivo.

    O gerenciador PnP determina que o driver de função do dispositivo joystick é o par de driver de classe HID/miniclasse e carrega esses drivers. O par de driver consiste em um driver de miniclasse vinculado a uma DLL de driver de classe; juntos, eles atuam como um 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.

Observe que o PDO criado pelo driver de barramento pai está sempre na parte inferior da pilha do dispositivo para um dispositivo específico. Quando os drivers lidam com PnP ou IRPs de energia, eles devem passar cada IRP até a pilha do dispositivo para o PDO e seu driver de barramento associado.

A figura a seguir mostra as mesmas pilhas de dispositivo que a figura anterior, mas enfatiza quais objetos de dispositivo são criados e gerenciados por quais drivers.

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

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