Exemplo de objeto de dispositivo para um HBA SCSI
A figura a seguir mostra os objetos de dispositivo criados para o sistema com um controlador PCI IEEE 1394 e um adaptador PCI SCSI com um CD-ROM e um dispositivo de disco particionável anexados. Objetos para dispositivos anexados ao controlador IEEE 1394 são mostrados e descritos em Exemplo de objeto de dispositivo para um controlador IEEE 1394.
Árvore de objetos do dispositivo para CD-ROM e dispositivos de disco em um HBA SCSI
A partir da parte inferior da figura, o seguinte descreve cada objeto de dispositivo e seu driver associado:
O driver do barramento de armazenamento cria o FDO para o barramento de armazenamento e o anexa ao PDO do barramento de armazenamento criado pelo gerenciador PnP (não mostrado nesta figura). A estrutura da árvore de objetos do dispositivo abaixo do FDO do barramento de armazenamento depende do barramento de armazenamento e de como ele é integrado ao sistema. Os drivers de armazenamento acima do nível do driver de porta não interagem com nenhum desses objetos inferiores.
Essa figura mostra o FDO do barramento de armazenamento criado pelo driver de barramento PCI para um sistema com um barramento PCI.
O driver de barramento PCI enumera e cria um PDO para cada adaptador de armazenamento em seu barramento. O driver de porta de armazenamento correspondente cria um FDO e o anexa ao PDO para seu adaptador.
Esta figura mostra dois PDOs de adaptador: um para um controlador IEEE 1394 (descrito em Exemplo de objeto de dispositivo para um controlador IEEE 1394) e outro para um SCSI HBA. O driver de porta SCSI e um driver de miniporta associado criam um FDO e o anexam ao PDO do adaptador SCSI.
O driver da porta de armazenamento virtualiza os dispositivos de destino criando um PDO para cada dispositivo de destino anexado ao adaptador. Essa figura mostra dois desses PDOs criados pelos drivers de porta/miniport scsi: um para uma unidade de disco rígido e outro para um CD-ROM.
Um ou mais drivers de filtro podem anexar um objeto de dispositivo de filtro (filter DO) a um dispositivo de destino PDO exportado por um driver de porta de armazenamento. Esse driver de filtro pode interceptar e alterar solicitações enviadas pelo driver de classe para o dispositivo de destino, por exemplo, para contornar problemas específicos do dispositivo sem exigir alterações específicas de hardware para a classe genérica ou drivers de porta.
Essa figura mostra um filtro DO anexado por um driver de filtro de áudio de CD ao PDO do CD-ROM.
Um driver de classe de armazenamento cria um FDO e o anexa ao objeto de dispositivo mais baixo, que é um dispositivo de destino PDO exportado por um driver de porta de armazenamento ou um filtro DO anexado à pilha por um driver de filtro intermediário. O driver de classe emite todas as solicitações subsequentes para o dispositivo de armazenamento por meio do objeto de dispositivo do driver inferior.
Essa figura mostra dois desses FDOs: um que representa um dispositivo CD-ROM e outro que representa a Partição 0 de uma unidade de disco rígido. A partição 0 representa todo o disco bruto e sempre existe se a unidade é particionada ou não.
Um driver de classe também pode atuar como um motorista de ônibus, retornando uma lista de PDOs quando o gerenciador PnP consulta seus dispositivos filho (IRP_MN_QUERY_DEVICE_RELATIONS com BusRelations). Por exemplo, um driver de um dispositivo de mídia particionado, como um disco removível, pode retornar uma lista de PDOs que representam suas partições. Drivers de nível superior anexam FDOs a esses PDOs.
Essa figura mostra três desses PDOs, cada um representando uma partição de disco que pode ser tratada como um dispositivo de destino.
No caso de um disco fixo, o gerenciador de partições é anexado ao FDO que representa a Partição 0 e manipula operações PnP em nome de todas as partições. As atividades do gerenciador de partição são transparentes para o driver de classe de disco e quaisquer drivers de filtro de nível superior.
Um ou mais drivers de filtro podem ser anexados acima de um driver de classe. Ao contrário de um driver de filtro de nível inferior, um driver de filtro de nível superior intercepta IRPs enviados para o driver de classe e pode alterá-los antes de encaminhá-los para o objeto de dispositivo mais baixo. O driver de filtro pode interceptar quaisquer solicitações de leitura/gravação e transformar os dados conforme necessário, bem como definir códigos de controle de E/S adicionais (IOCTLs), por exemplo, para permitir que um aplicativo de usuário forneça senhas ou outras informações relacionadas.
Essa figura mostra um filtro DO criado por um driver de filtro de criptografia de disco e anexado ao disco PDO para a partição 1.