Windows의 USB ContainerID

이 문서에서는 Windows 운영 체제용 USB ContainerID에 대한 정보를 제공합니다. 이 문서에는 장치 제조업체가 Windows에서 다기능 USB 장치를 제대로 검색할 수 있도록 해당 장치를 프로그래밍하기 위한 지침이 포함됩니다.

Windows 7부터 사용자는 컴퓨터에 연결된 장치의 모든 기능을 이용할 수 있습니다. 여기에는 복합 프린터, 스캐너 및 복사기 장치 같은 다기능 장치가 포함됩니다. Windows 7에서는 단일 실제 장치의 모든 기능을 장치 컨테이너에 통합할 수 있습니다. 장치 컨테이너는 실제 장치의 가상 표현입니다. 이 통합을 수행하려면 실제 장치에 대해 열거된 각 장치 기능에 ContainerID 속성을 할당합니다. Windows 7은 각 장치 기능에 동일한 ContainerID 값으로 할당하여 모든 장치 기능이 동일한 실제 장치에 속해 있는 것으로 인식합니다.

서로 다른 버스 유형을 통해 컴퓨터에 연결되는 모든 장치 유형이 장치 컨테이너를 지원할 수 있습니다. 그러나 일부 버스 유형은 ContainerID를 생성하는 데 동일한 메커니즘을 사용하지 않습니다. USB 장치의 경우 장치 공급업체가 ContainerID 설명자를 사용하여 실제 장치에 대한 ContainerID를 설명할 수 있습니다. ContainerID 설명자는 USB 장치의 펌웨어에 저장될 수 있는 Microsoft OS 기능 설명자입니다. USB 장치 제조업체는 Windows 7에서 제공되는 새로운 장치 기능을 사용하기 위해 해당 장치에서 이러한 ContainerID 설명자를 제대로 구현해야 합니다. USB 장치 제조업체는 장치에서 지원되는 장치 기능 수에 관계없이 각 실제 장치에 대해 단일 ContainerID만 구현해야 합니다.

단일 장치의 모든 기능을 장치 컨테이너에 통합하는 방법에 대한 자세한 내용은 다기능 장치 지원 및 장치 컨테이너 그룹을 참조하세요.

USB 장치용 Microsoft OS 설명자에 대한 자세한 내용은 USB 장치용 Microsoft OS 설명자를 참조하세요.

USB ContainerID를 생성하는 방법

다음과 같은 두 가지 방법으로 USB 장치용 ContainerID를 생성할 수 있습니다.

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

USB ContainerID 내용

USB ContainerID는 UUID(Universally Unique IDentifier) 문자열 형식으로 운영 체제에 제공됩니다. ContainerID UUID는 ContainerID 설명자 내에 포함됩니다. ContainerID 설명자는 장치 수준 Microsoft OS 기능 설명자입니다. 운영 체제가 USB ContainerID를 요청할 경우 설명자 요청의 wValue 필드가 항상 0으로 설정되어야 합니다. Microsoft OS 기능 설명자 및 설명자 요청에 대한 자세한 내용은 Microsoft OS 1.0 설명자 사양을 참조하세요.

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

오프셋필드크기형식설명
0dwLength4부호 없는 DWord전체 ContainerID 설명자의 길이(바이트)입니다. 이 필드는 항상 0x18 값으로 설정되어야 합니다.
4bcdVersion2BCD각 니블이 숫자에 해당하는 BCD(Binary Coded Decimal) 형식의 ContainerID 설명자 버전 번호입니다. MSB(최상위 바이트)는 소수점 앞에 숫자 2개를 포함하고 LSB(최하위 바이트)는 소수점 뒤에 숫자 2개를 포함합니다. 예를 들어 버전 1.00은 0x0100으로 표시됩니다. 이 필드는 항상 0x0100으로 설정되어야 합니다.
6wIndex2WordUSB ContainerID 설명자의 경우 이 필드는 항상 6으로 설정됩니다.

 

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

오프셋필드크기형식설명
0bContainerID16부호 없는 DWordContainerID 데이터입니다.

 

장치 제조업체에서는 장치의 각 인스턴스에 ContainerID에 대한 전체적으로 고유한 16바이트 값이 있는지 확인합니다. 또한 장치는 전원이 켜질 때마다 동일한 ContainerID 값을 보고해야 합니다.

복제 가능성이 거의 0이 UUID를 생성하도록 설정된 여러 가지 알고리즘이 있습니다. 장치 제조업체는 요구 사항에 가장 적합한 UUID 생성 알고리즘을 선택할 수 있습니다. 결과가 고유한 경우 어떤 UUID 생성 알고리즘이 사용되는지는 중요하지 않습니다.

USB ContainerID 구문

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


UCHAR Example<mark type="member">ContainerID</mark>Descriptor[24] =
{
    0x18, 0x00, 0x00, 0x00,     // dwLength - 24 bytes
    0x00, 0x01,                 // bcdVersion - 1.00
    0x06, 0x00,                 // wIndex – 6 for a <mark type="member">ContainerID</mark>

    0x0C, 0xB4, 0xA7, 0x2C,     // b<mark type="member">ContainerID</mark> -
    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 문자열 설명자의 필드에 대해 설명합니다.

필드길이(바이트)설명
bLength10x12설명자 길이입니다.
bDescriptorType10x03설명자 유형입니다. 0x03 값은 Microsoft OS 문자열 설명자를 나타냅니다.
qwSignature14 ‘MSFT100’서명 필드입니다.
bMS_VendorCode1공급업체 코드공급업체 코드입니다.
bFlags10x02

비트 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 다기능 장치의 기능을 성공적으로 통합할 수 있도록 제조업체에서 생성한 장치의 각 인스턴스에 전체적으로 고유한 ContainerID 값이 있는지 확인해야 합니다. 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 하드웨어 인증 요구 사항에 따르면 장치에 일련 번호가 있는 경우 일련 번호는 장치의 각 인스턴스에 대해 고유해야 합니다. USB 일련 번호의 WLK 테스트에 대한 자세한 내용은 MSDN®에서 "USB 일련 번호"를 참조하세요.
  • 시스템에 포함된 USB 장치에 대한 ContainerID를 제공하지 마세요. 통합 USB 장치는 포트에 대한 ACPI BIOS 설정 또는 USB 허브 설명자 DeviceRemovable 비트에 의존해야 합니다.
  • 시스템에 연결된 모든 USB 장치에 고유한 ContainerID 값이 있는지 확인합니다. 제품군 간에 ContainerID 값 또는 USB 일련 번호를 공유하지 마세요.
  • 장치에 대한 이동식 장치 기능을 제대로 설정해야 합니다.
    참고  이전에 제공한 USB 장치에 USB ContainerID 설명자를 추가하는 장치 공급업체는 장치의 장치 설명자에서 장치 릴리스 번호(bcdDevice)를 증가시켜야 합니다. USB 허브 드라이버는 장치의 공급업체 ID, 제품 ID 및 장치 릴리스 번호에 따라 Microsoft OS 문자열 설명자(또는 설명자 누락)를 캐시하기 때문에 이 작업이 필요합니다. 장치 릴리스 번호를 증가시키지 않으면, 허브 드라이버가 이전에 USB ContainerID 설명자를 지원하지 않는 동일한 공급업체 ID, 제품 ID 및 장치 릴리스 번호를 사용하여 장치 인스턴스를 열거했던 경우 허브 드라이브는 새 장치의 USB ContainerID를 쿼리하지 않습니다.

관련 항목

Windows용 USB 장치 빌드
USB 장치용 컨테이너 ID

 

 

표시:
© 2015 Microsoft