Quando os objetos de dispositivo WDM são criados?
Esta seção descreve cada tipo de objeto de dispositivo e menciona quando cada um é criado.
A figura a seguir mostra os possíveis tipos de objetos de dispositivo que podem ser anexados em uma pilha de dispositivos, representando os drivers que lidam com solicitações de E/S para um dispositivo.
Começando na parte inferior desta figura:
Um motorista de ônibus cria um PDO para cada dispositivo que ele enumera em seu barramento.
Um driver de barramento cria um PDO para um dispositivo filho quando ele enumera o dispositivo. Um driver de ônibus enumera um dispositivo em resposta a uma solicitação de IRP_MN_QUERY_DEVICE_RELATIONS para BusRelations do gerenciador PnP. O motorista do ônibus criará um PDO para um dispositivo filho se o dispositivo tiver sido adicionado ao ônibus desde a última vez que o motorista do ônibus respondeu a uma solicitação de relações de consulta para BusRelations (ou se esta for a primeira solicitação de relações de consulta desde que o computador foi inicializado).
Um PDO representa o dispositivo para o driver de barramento, bem como para outros componentes do sistema no modo kernel, como o power manager, o gerenciador de PnP e o gerenciador de E/S.
Outros drivers para um dispositivo anexam objetos de dispositivo na parte superior do PDO, mas o PDO está sempre na parte inferior da pilha do dispositivo.
Os drivers de filtro de barramento opcionais criam DOs de filtro para cada dispositivo que filtram.
Quando o gerenciador PnP detecta um novo dispositivo em uma lista BusRelations , ele determina se há drivers de filtro de barramento para o dispositivo. Nesse caso, para cada driver desse tipo, o gerenciador PnP garante que ele seja carregado (chama DriverEntry , se necessário) e chama a rotina AddDevice do driver. Se o driver de filtro de barramento filtrar operações para esse dispositivo, o driver de filtro criará um objeto de dispositivo e o anexará à pilha de dispositivos em sua rotina AddDevice . Se houver mais de um driver de filtro de barramento e for relevante para esse dispositivo, cada driver de filtro criará e anexará seu próprio objeto de dispositivo.
Drivers de filtro opcionais e de nível inferior criam DOs de filtro para cada dispositivo que filtram.
Se existir um driver de filtro opcional de nível inferior para esse dispositivo, o gerenciador PnP garantirá que esse driver seja carregado após o motorista do ônibus e os drivers de filtro de barramento. O gerenciador PnP chama a rotina AddDevice do driver de filtro. Em sua rotina AddDevice , o driver de filtro de nível inferior cria um filtro DO para o dispositivo e o anexa à pilha do dispositivo. Se houver mais de um driver de filtro de nível inferior, cada driver desse tipo criaria e anexaria seu próprio filtro DO.
O driver de função cria um FDO para o dispositivo.
O gerenciador PnP garante que o driver de funções do dispositivo seja carregado e chame a rotina AddDevice do driver de função. O driver de função cria um FDO e o anexa à pilha do dispositivo.
Os drivers de filtro opcionais de nível superior criam um filtro DO para cada dispositivo que filtram.
Se houver drivers de filtro opcionais de nível superior para o dispositivo, o gerenciador PnP garantirá que eles sejam carregados após o driver de função e chamará suas rotinas de AddDevice . Cada driver de filtro anexa seu objeto de dispositivo à pilha do dispositivo.
Em resumo, a pilha de dispositivos contém um objeto de dispositivo para cada driver envolvido no tratamento de E/S para um dispositivo específico. O driver de barramento pai tem um PDO, o driver de função tem um FDO e cada driver de filtro opcional tem um filtro DO.
Observe que todos os dispositivos, dispositivos de adaptador/controlador de barramento e dispositivos nãobus têm um PDO e um FDO em sua pilha de dispositivos. O PDO para um adaptador/controlador de barramento é criado pelo motorista do ônibus para o barramento pai. Por exemplo, se um adaptador SCSI se conectar a um barramento PCI, o driver de barramento PCI criará um PDO para o adaptador SCSI.
Se um dispositivo estiver sendo usado no modo bruto, não haverá drivers de função ou filtro (nenhum FDO ou DOs de filtro). Há apenas um PDO para o motorista do ônibus pai e zero ou mais DOs de filtro de barramento.
Consulte Criando um objeto de dispositivo para obter informações sobre quais rotinas de driver são responsáveis por criar e anexar objetos de dispositivo.
A pilha de dispositivos mais algumas informações adicionais constituem o devnode para um dispositivo. O gerenciador PnP mantém informações no devnode de um dispositivo, como se o dispositivo foi iniciado e quais drivers, se houver, foram registrados para notificação de alterações no dispositivo. O comando de depurador de kernel !devnode exibe informações sobre um devnode.