Información general sobre los identificadores de contenedor

En la familia windows de sistemas operativos, los dispositivos son básicamente una colección de instancias de dispositivo funcionales, cada una de las cuales representa un punto de conexión funcional que permite alguna forma de comunicación con el dispositivo.

El término nodo de dispositivo (devnode) hace referencia a la pila de controladores para este punto de conexión funcional, además de las propiedades que describen el punto de conexión y su estado asociado. Por ejemplo, un dispositivo multifunción que admite la funcionalidad de impresora, escáner y fax puede tener varios devnodes, uno para cada punto de conexión funcional del dispositivo.

Antes de Windows 7, cada punto de conexión funcional tenía un devnode asociado. Los componentes de la plataforma Windows y las aplicaciones de terceros pueden consultar los nodos de desarrollo para el estado y la información del dispositivo, y pueden comunicarse con el hardware del dispositivo a través de interfaces que exponen los puntos de conexión funcionales.

Para un dispositivo de función única, un único devnode contiene toda la información relacionada con el punto de conexión funcional del dispositivo. Del mismo modo, un dispositivo multifunción tiene varios nodos de desarrollo asociados a cada uno de los puntos de conexión funcionales del dispositivo. Sin embargo, Windows no puede reconocer que un grupo de nodos de desarrollo se originó en el mismo dispositivo físico. Cada devnode que pertenece al mismo dispositivo multifunción no incluye ninguna información de identificación que permita al administrador de Plug and Play (PnP) agrupar varios devnodes como un único dispositivo. Por lo tanto, no es posible tener una vista holística del dispositivo y las funciones que proporciona un único dispositivo físico.

A partir de Windows 7, el sistema operativo usa un nuevo identificador (id. de contenedor) para agrupar uno o varios devnodes que se originaron y pertenecen a cada instancia de un dispositivo físico determinado. El identificador de contenedor es una propiedad de cada devnode y se especifica a través de un valor de identificador único global (GUID).

Cada instancia de un dispositivo físico instalado en el equipo tiene un identificador de contenedor único. Todos los devnodes que representan una función en esa instancia del dispositivo físico comparten el mismo identificador de contenedor. En la ilustración siguiente se muestra un ejemplo de esa relación.

diagrama que ilustra los identificadores de contenedor para los nodos de desarrollo de un dispositivo multifunción.

Hay un identificador de contenedor con un significado especial para los controladores de autobús: NULL_GUID que se define como: {00000000-0000-0000-0000-000000000000}.

En general, no devuelva NULL_GUID como caso predeterminado al notificar un identificador de contenedor. En su lugar, no controle IRP_MN_QUERY_ID para el caso busQueryContainerIDs y deje que PnP aplique su lógica predeterminada.

Al devolver NULL_GUID como identificador de contenedor, un controlador de autobús declara a PnP que el dispositivo no debe formar parte de ningún contenedor, por lo que devolver NULL_GUID solo es adecuado en casos muy especiales. Por ejemplo, un devnode como un dispositivo de volumen puede abarcar varios discos en varios contenedores, pero no pertenecen a ningún contenedor. Este dispositivo tendrá un DEVPKEY_Device_BaseContainerId igual a NULL_GUID y no tendrá un DEVPKEY_Device_ContainerId en absoluto.

Además de casos muy especiales, un controlador de autobús nunca debe devolver NULL_GUID cuando informe de un dispositivo de hardware y los controladores de autobús deben protegerse contra el hardware defectuoso que informa de un valor de NULL_GUID de su autobús. En estos casos, el controlador de autobús debe tratarlo como un error de dispositivo o tratarlo como si el dispositivo no informara de un valor.