Visão geral das IDs de contêiner

Na família Windows de sistemas operacionais, os dispositivos são basicamente uma coleção de instâncias de dispositivo funcionais, cada uma das quais representa um ponto de extremidade funcional que permite alguma forma de comunicação com o dispositivo.

O termo nó do dispositivo (devnode) refere-se à pilha de driver para esse ponto de extremidade funcional, além das propriedades que descrevem o ponto de extremidade e seu estado associado. Por exemplo, um dispositivo multifuncional que dá suporte à funcionalidade de impressora, scanner e fax pode ter vários devnodes, um para cada ponto de extremidade funcional no dispositivo.

Antes do Windows 7, cada ponto de extremidade funcional tinha um devnode associado a ele. Componentes da plataforma Windows e aplicativos de terceiros podem consultar devnodes para status e informações do dispositivo e podem se comunicar com o hardware do dispositivo por meio de interfaces que os pontos de extremidade funcionais expõem.

Para um dispositivo de função única, um único devnode contém todas as informações relacionadas ao ponto de extremidade funcional do dispositivo. Da mesma forma, um dispositivo multifuncional tem vários devnodes associados a cada um dos pontos de extremidade funcionais do dispositivo. No entanto, o Windows não pode reconhecer que um grupo de devnodes se originou do mesmo dispositivo físico. Cada devnode que pertence ao mesmo dispositivo multifuncional não inclui nenhuma informação de identificação que permita que o gerenciador de Plug and Play (PnP) agrupe vários devnodes como um único dispositivo. Portanto, não é possível ter uma visão holística do dispositivo e das funções que um único dispositivo físico fornece.

A partir do Windows 7, o sistema operacional usa uma nova ID (ID de contêiner) para agrupar um ou mais devnodes originados e pertencem a cada instância de um determinado dispositivo físico. A ID do contêiner é uma propriedade de cada devnode e é especificada por meio de um valor guid (identificador global exclusivo).

Cada instância de um dispositivo físico instalado no computador tem uma ID de contêiner exclusiva. Todos os devnodes que representam uma função nessa instância do dispositivo físico compartilham a mesma ID de contêiner. A figura a seguir mostra um exemplo dessa relação.

diagrama ilustrando IDs de contêiner para devnódes de um dispositivo multifuncional.

Há uma ID de contêiner com um significado especial para os motoristas de ônibus: NULL_GUID que é definido como: {00000000-0000-0000-0000-000000000000}.

Em geral, não retorne NULL_GUID como o caso padrão ao relatar uma ID de contêiner. Em vez disso, não manipule IRP_MN_QUERY_ID para o caso BusQueryContainerIDs e deixe que o PnP aplique sua lógica padrão.

Ao retornar NULL_GUID como uma ID de contêiner, um motorista de ônibus declara ao PnP que o dispositivo não deve fazer parte de nenhum contêiner, retornando NULL_GUID é apropriado apenas em casos muito especiais. Por exemplo, um devnode , como um dispositivo de volume, pode abranger vários discos em vários contêineres, mas não pertence a nenhum contêiner. Esse dispositivo terá um DEVPKEY_Device_BaseContainerId igual a NULL_GUID e não terá um DEVPKEY_Device_ContainerId .

Além de casos muito especiais, um motorista de ônibus nunca deve retornar NULL_GUID ao relatar um dispositivo de hardware e os motoristas de ônibus devem se proteger contra hardware defeituoso que relata um valor NULL_GUID de seu ônibus. Nesses casos, o motorista do ônibus deve tratar isso como um erro de dispositivo ou tratá-lo como se o dispositivo não relatasse um valor.