Share via


Windows의 USB ContainerID

이 문서에서는 Windows 운영 체제용 USB ContainerID에 대한 정보를 제공합니다. 여기에는 디바이스 제조업체가 다기능 USB 디바이스를 프로그래밍하여 Windows에서 올바르게 검색할 수 있도록 하는 지침이 포함되어 있습니다.

Windows 7부터 사용자는 컴퓨터에 연결된 디바이스의 모든 기능을 활용할 수 있습니다. 여기에는 프린터, 스캐너 및 복사기 디바이스 조합과 같은 다기능 디바이스가 포함됩니다. Windows 7에는 단일 물리적 디바이스의 모든 기능을 디바이스 컨테이너에 통합하기 위한 지원이 포함되어 있습니다. 디바이스 컨테이너는 물리적 디바이스의 가상 표현입니다. 이 통합은 물리적 디바이스에 대해 열거된 각 디바이스 함수에 ContainerID 속성을 할당하여 수행됩니다. Windows 7은 각 디바이스 함수에 동일한 ContainerID 값을 할당하여 모든 디바이스 함수가 동일한 물리적 디바이스에 속한다는 것을 인식합니다.

다양한 버스 유형을 통해 컴퓨터에 연결하는 모든 유형의 디바이스는 디바이스 컨테이너를 지원할 수 있습니다. 그러나 모든 버스 유형이 ContainerID를 생성하기 위해 동일한 메커니즘을 사용하는 것은 아닙니다. USB 디바이스의 경우 디바이스 공급업체는 ContainerID 설명자를 사용하여 물리적 디바이스에 대한 ContainerID 를 설명할 수 있습니다. ContainerID 설명자는 USB 디바이스의 펌웨어에 저장할 수 있는 Microsoft OS 기능 설명자입니다. USB 디바이스 제조업체는 Windows 7에서 사용할 수 있는 새로운 디바이스 기능을 활용하려면 디바이스에서 이러한 ContainerID 설명자를 올바르게 구현해야 합니다. USB 디바이스 제조업체는 디바이스에서 지원하는 디바이스 기능 수에 관계없이 각 물리적 디바이스에 대해 단일 ContainerID 만 구현해야 합니다.

단일 디바이스의 모든 기능을 디바이스 컨테이너에 통합하는 방법에 대한 자세한 내용은 컨테이너 ID 생성 방법을 참조하세요.

USB 디바이스용 Microsoft OS 설명자에 대한 자세한 내용은 USB 디바이스 용 Microsoft OS 설명자를 참조하세요.

USB ContainerID가 생성되는 방법

다음은 USB 디바이스에 대한 ContainerID 를 생성하는 두 가지 방법입니다.

  • USB 디바이스 제조업체는 Microsoft OS ContainerID 설명자를 사용하여 디바이스의 펌웨어에 ContainerID 를 지정합니다.
  • Microsoft USB 허브 드라이버는 디바이스의 PID(제품 ID), 공급업체 ID(VID), 수정 번호 및 일련 번호의 조합으로 디바이스에 대한 ContainerID 를 자동으로 만듭니다. 이 경우 Microsoft USB 허브 드라이버는 최소한의 기능으로 ContainerID 를 만듭니다. 이 메서드는 고유한 일련 번호가 있는 디바이스에만 적용됩니다.

USB ContainerID 콘텐츠

USB ContainerID 는 UUID(범용 고유 식별자) 문자열 형식으로 운영 체제에 표시됩니다. ContainerID UUID는 ContainerID 설명자 내에 포함되어 있습니다. ContainerID 설명자는 디바이스 수준 Microsoft OS 기능 설명자입니다. 따라서 운영 체제에서 USB ContainerID를 요청할 때 설명자 요청의 wValue 필드는 항상 0으로 설정해야 합니다. Microsoft OS 기능 설명자 및 설명자 요청에 대한 자세한 내용은 Microsoft OS 1.0 설명자 사양을 참조하세요.

ContainerID 설명자는 헤더 섹션으로 구성됩니다.

Offset 필드 크기 유형 Description
0 dwLength 4 서명되지 않은 DWord 전체 ContainerID 설명자의 길이(바이트)입니다. 이 필드는 항상 0x18 값으로 설정해야 합니다.
4 bcdVersion 2 BCD 각 니블이 숫자에 해당하는 이진 코드된 10진수(BCD)의 ContainerID 설명자 버전 번호입니다. MSB(가장 중요한 바이트)는 소수점 앞의 두 숫자를 포함하고 LSB(최적 바이트)는 소수점 뒤의 두 숫자를 포함합니다. 예를 들어 버전 1.00은 0x0100 표시됩니다. 이 필드는 항상 0x0100 설정해야 합니다.
6 wIndex 2 단어 이 필드는 USB ContainerID 설명자의 경우 항상 6으로 설정됩니다.

ContainerID 설명자는 ContainerID 섹션으로 구성됩니다.

Offset 필드 크기 유형 Description
0 bContainerID 16 서명되지 않은 DWord ContainerID 데이터.

디바이스 제조업체는 디바이스의 각 instance ContainerID에 대해 보편적으로 고유한 16비트 값을 갖도록 할 책임이 있습니다. 또한 디바이스는 전원이 켜질 때마다 동일한 ContainerID 값을 보고해야 합니다. 중복 가능성이 거의 없는 UUID를 생성하기 위한 몇 가지 알고리즘이 있습니다. 디바이스 제조업체는 요구 사항에 가장 적합한 UUID 생성 알고리즘을 선택할 수 있습니다. 결과가 고유한 경우 어떤 UUID 생성 알고리즘이 사용되는지는 중요하지 않습니다.

USB ContainerID 구문

ContainerID는 {xxxxxxxx-xxxx-xx}의 표준 UUID 문자열 형식으로 보고됩니다. 다음은 {2CA7B40C-7BD1-4F25-B573-A13A97DDC07} UUID 문자열로 형식이 지정된 0C B4 A7 2C D1 7B 25 4F B5 73 A1 3A 97 5D DC 07 USB ContainerID에 대한 펌웨어의 예제 표현입니다.

UCHAR ExampleContainerIDDescriptor[24] =
{
    0x18, 0x00, 0x00, 0x00,     // dwLength - 24 bytes
    0x00, 0x01,                 // bcdVersion - 1.00
    0x06, 0x00,                 // wIndex – 6 for a ContainerID
    0x0C, 0xB4, 0xA7, 0x2C,     // bContainerID -
    0xD1, 0x7B, 0x25, 0x4F,     // {2CA7B40C-7BD1-4F25-B573-A13A975DDC07}
    0xB5, 0x73, 0xA1, 0x3A,     // 0C B4 A7 2C D1 7B 25 4F B5 73 A1 3A 97 5D DC 07
    0x97, 0x5D, 0xDC, 0x07      //
}

UUID 문자열로 서식을 지정할 때 처음 8바이트 바이트의 바이트 순서가 변경됩니다.

Microsoft OS 설명자 변경 내용

레거시 ContainerID 기능을 유지하기 위해 ContainerID 설명자에 대한 지원을 나타내는 데 사용할 수 있는 새 플래그 필드가 Microsoft OS 문자열 설명자에 추가되었습니다.

Microsoft OS 문자열 설명자의 현재 정의에는 일반적으로 0으로 설정된 설명자의 끝에 1바이트 패드 필드 인 bPad가 포함되어 있습니다. 새 ContainerID를 지원하는 USB 디바이스의 경우 bPad 필드는 플래그 필드인 bFlags로 다시 정의됩니다. 이 필드의 비트 1은 ContainerID 설명자에 대한 지원을 나타내는 데 사용됩니다. 표 3에서는 USB 디바이스에 대한 Microsoft OS 문자열 설명자의 필드를 설명합니다.

필드 길이(바이트) Description
bLength 1 0x12 설명자의 길이입니다.
bDescriptorType 1 0x03 설명자 형식입니다. 0x03 값은 Microsoft OS 문자열 설명자를 나타냅니다.
qwSignature 14 'MSFT100' 서명 필드입니다.
bMS_VendorCode 1 공급업체 코드 공급업체 코드.
bFlags 1 0x02 비트 0: 예약됨
비트 1: ContainerID 지원
 0: ContainerID를 지원하지 않음
 1: ContainerID 지원
비트 2-7: 예약됨

현재 Microsoft OS 설명자를 지원하지만 ContainerID 설명자를 지원하지 않는 USB 디바이스에는 bPad 필드가 0x00 설정되어 있습니다. USB 허브 드라이버는 USB ContainerID 설명자에 대해 이러한 디바이스를 쿼리하지 않습니다.

USB 다기능 디바이스의 컨테이너 보기

ContainerID는 다기능 USB 디바이스에 대한 디바이스를 통합하는 정보를 제공합니다. 그림 1은 제품 내의 모든 개별 디바이스가 동일한 ContainerID를 사용하는 경우 다기능 프린터의 모든 디바이스를 단일 디바이스 컨테이너로 통합하는 방법의 예를 보여줍니다.

다기능 프린터의 모든 디바이스 통합

다기능 USB 디바이스에 대한 모든 디바이스를 통합하면 실제 제품을 Windows 7의 디바이스 및 프린터에 단일 디바이스로 표시할 수 있습니다. 그림 2에서는 디바이스 및 프린터에서 단일 디바이스로 표시되는 USB 다기능 키보드 및 마우스 디바이스의 예를 보여 줍니다.

디바이스 및 프린터의 다기능 디바이스입니다.

USB ContainerID HCK 요구 사항

디바이스 제조업체는 Windows가 각 USB 다기능 디바이스의 기능을 성공적으로 통합할 수 있도록 생성하는 디바이스의 각 instance 전역적으로 고유한 ContainerID 값을 갖도록 해야 합니다. Windows 하드웨어 인증Windows 하드웨어 인증 키트에는 디바이스에서 구현되는 경우 USB ContainerID 에 대한 DEVFUND-0034 요구 사항이 포함되어 있습니다. 디바이스가 USB ContainerID를 구현하는 경우 Windows 하드웨어 인증은 Microsoft OS 설명자 테스트의 일부로 ContainerID 를 테스트하고 ContainerID 값이 전역적으로 고유한지 확인합니다. 이러한 Windows 하드웨어 인증 요구 사항에 대한 자세한 내용은 Windows 하드웨어 인증 웹 사이트를 참조하세요.

USB ContainerID 구현에 대한 권장 사항은 USB 디바이스를 설계, 제조 및 배송하는 디바이스 공급업체에 대한 권장 사항입니다.

  • Windows 7이 ContainerID를 사용하여 다기능 및 다중 전송 USB 디바이스에 대한 지원을 개선하는 방법을 알아봅니다. 먼저 "Windows 7의 다기능 디바이스 지원 및 디바이스 컨테이너 그룹화"를 읽는 것이 좋습니다.
  • 각 USB 디바이스의 일련 번호가 고유한지 확인합니다. Windows 하드웨어 인증 요구 사항에 따르면 디바이스에 일련 번호가 포함된 경우 일련 번호는 디바이스의 각 instance 고유해야 합니다.
  • 시스템에 포함된 USB 디바이스에 대해 ContainerID 를 제공하지 마세요. 통합 USB 디바이스는 포트에 대한 ACPI BIOS 설정 또는 USB 허브 설명자 DeviceRemovable 비트를 사용해야 합니다.
  • 시스템에 연결된 모든 USB 디바이스에 고유한 ContainerID 값이 있는지 확인합니다. 제품 라인에서 ContainerID 값 또는 USB 일련 번호를 공유하지 마세요.
  • 디바이스에 대해 이동식 디바이스 기능을 올바르게 설정해야 합니다. 참고 이전에 배송된 USB 디바이스에 USB ContainerID 설명자를 추가하는 디바이스 공급업체는 디바이스의 디바이스 설명자에서 디바이스 릴리스 번호(bcdDevice)를 증가시켜야 합니다. USB 허브 드라이버가 디바이스의 공급업체 ID, 제품 ID 및 디바이스 릴리스 번호를 기반으로 Microsoft OS 문자열 설명자(또는 설명자가 없음)를 캐시하기 때문에 이 작업이 필요합니다. 디바이스 릴리스 번호를 증가시키지 않으면 이전에 USB ContainerID 설명자를 지원하지 않는 공급업체 ID, 제품 ID 및 디바이스 릴리스 번호가 동일한 디바이스의 instance 열거한 경우 허브 드라이버는 새 디바이스의 USB ContainerID를 쿼리하지 않습니다.

Windows용 USB 디바이스 빌드
USB 디바이스용 컨테이너 ID