다음을 통해 공유


컨테이너 ID 개요

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

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

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

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

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

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

다기능 디바이스의 devnodes에 대한 컨테이너 ID를 보여 주는 다이어그램

버스 드라이버에 대한 특별한 의미가 있는 컨테이너 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 값을 보고하는 결함이 있는 하드웨어로부터 보호해야 합니다. 이러한 경우 버스 드라이버는 이를 디바이스 오류로 처리하거나 디바이스가 값을 보고하지 않은 것처럼 처리해야 합니다.