컨테이너 ID 개요

운영 체제의 Windows 제품군에서 디바이스는 기본적으로 기능 디바이스 인스턴스의 컬렉션이며, 각 인스턴스는 디바이스에 대한 일종의 통신을 가능하게 하는 기능 엔드포인트를 나타냅니다.

디바이스 노드(devnode)라는 용어는 엔드포인트 및 관련 상태를 설명하는 속성 외에도 이러한 기능 엔드포인트에 대한 드라이버 스택을 나타냅니다. 예를 들어 프린터, 스캐너 및 팩스 기능을 지원하는 다기능 디바이스에는 디바이스의 각 기능 엔드포인트에 대해 하나씩 여러 개의 devnode가 있을 수 있습니다.

Windows 7 이전에는 각 기능 엔드포인트에 연결된 devnode가 있었습니다. Windows 플랫폼 구성 요소 및 타사 애플리케이션은 디바이스 상태 및 정보에 대한 개발 노드를 쿼리할 수 있으며 기능 엔드포인트가 노출하는 인터페이스를 통해 디바이스 하드웨어와 통신할 수 있습니다.

단일 함수 디바이스의 경우 단일 devnode에는 디바이스의 기능 엔드포인트와 관련된 모든 정보가 포함됩니다. 마찬가지로, 다기능 디바이스에는 각 디바이스의 기능 엔드포인트와 연결된 여러 devnode가 있습니다. 그러나 Windows devnode 그룹이 동일한 물리적 디바이스에서 시작되었음을 인식할 수 없습니다. 동일한 다기능 디바이스에 속하는 각 devnode에는 PnP(플러그 앤 플레이) 관리자가 여러 devnode를 단일 디바이스로 그룹화할 수 있는 식별 정보가 포함되지 않습니다. 따라서 단일 물리적 디바이스에서 제공하는 디바이스 및 기능에 대한 전체적인 보기를 가질 수 없습니다.

Windows 7부터 운영 체제는 새 ID(컨테이너 ID)를 사용하여 특정 물리적 디바이스의 각 인스턴스에서 시작되고 속한 하나 이상의 devnode를 그룹화합니다. 컨테이너 ID는 모든 devnode의 속성이며 GUID(Globally Unique Identifier) 값을 통해 지정됩니다.

컴퓨터에 설치된 물리적 디바이스의 각 인스턴스에는 고유한 컨테이너 ID가 있습니다. 물리적 디바이스 인스턴스의 함수를 나타내는 모든 devnode는 동일한 컨테이너 ID를 공유합니다. 다음 그림에서는 해당 관계의 예를 보여 줍니다.

diagram illustrating container ids for a multifunction device's devnodes.

버스 드라이버에 대한 특별한 의미가 있는 컨테이너 ID가 하나 있습니다. NULL_GUID 다음과 같이 {00000000-0000-0000-0000-000000000000}정의됩니다.

일반적으로 컨테이너 ID를 보고할 때 NULL_GUID 기본 사례로 반환하지 마세요. 대신 BusQueryContainerIDs 사례에 대한 IRP_MN_QUERY_ID 처리하지 않고 PnP가 기본 논리를 적용하도록 합니다.

NULL_GUID 컨테이너 ID로 반환하는 경우 버스 드라이버는 디바이스가 컨테이너의 일부가 아니어야 한다고 PnP에 선언하므로 매우 특별한 경우에만 NULL_GUID 반환하는 것이 적절합니다. 예를 들어 볼륨 디바이스와 같은 devnode 는 여러 컨테이너의 여러 디스크에 걸쳐 있을 수 있지만 컨테이너에 속하지는 않습니다. 이러한 디바이스는 NULL_GUID 동일한 DEVPKEY_Device_BaseContainerId 가지며 DEVPKEY_Device_ContainerId 전혀 없습니다.

매우 특별한 경우를 제외하고, 버스 드라이버는 하드웨어 장치를보고 할 때 NULL_GUID 반환해서는 안되며 버스 드라이버는 버스에서 NULL_GUID 값을보고하는 결함이있는 하드웨어로부터 보호해야합니다. 이러한 경우 버스 드라이버는 이를 디바이스 오류로 처리하거나 디바이스가 값을 보고하지 않은 것처럼 처리해야 합니다.