Windows의 USB 컨테이너ID
이 문서에서는 Windows 운영 체제용 USB ContainerID에 대한 정보를 제공합니다. 여기에는 장치 제조업체가 Windows에서 올바르게 검색되도록 다기능 USB 디바이스를 프로그래밍하는 지침이 포함되어 있습니다.
사용자는 컴퓨터에 연결된 디바이스의 모든 기능을 활용할 수 있습니다. 여기에는 프린터, 스캐너 및 복사기 디바이스 조합과 같은 다기능 디바이스가 포함됩니다. Windows에는 단일 물리적 디바이스의 모든 기능을 디바이스 컨테이너에 통합하기 위한 지원이 포함되어 있습니다. 디바이스 컨테이너는 물리적 디바이스의 가상 표현입니다. 이 통합은 물리적 디바이스에 대해 열거된 각 디바이스 함수에 ContainerID 속성을 할당하여 수행됩니다. Windows는 각 디바이스 함수에 동일한 ContainerID 값을 할당하여 모든 디바이스 함수가 동일한 물리적 디바이스에 속한다는 것을 인식합니다.
다양한 버스 유형을 통해 컴퓨터에 연결하는 모든 유형의 디바이스는 디바이스 컨테이너를 지원할 수 있습니다. 그러나 모든 버스 유형이 ContainerID를 생성하는 데 동일한 메커니즘을 사용하는 것은 아닙니다. USB 디바이스의 경우 디바이스 공급업체는 ContainerID 설명자를 사용하여 실제 디바이스에 대한 ContainerID를 설명할 수 있습니다. ContainerID 설명자는 USB 디바이스의 펌웨어에 저장할 수 있는 Microsoft OS 기능 설명자입니다. USB 디바이스 제조업체는 Windows에서 사용할 수 있는 새로운 디바이스 기능을 활용하려면 디바이스에서 이러한 ContainerID 설명자를 올바르게 구현해야 합니다. USB 디바이스 제조업체는 디바이스에서 지원하는 디바이스 함수 수에 관계없이 각 물리적 디바이스에 대해 단일 ContainerID 만 구현해야 합니다.
단일 디바이스의 모든 기능을 디바이스 컨테이너에 통합하는 방법에 대한 자세한 내용은 컨테이너 ID 생성 방법을 참조하세요.
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(범용 고유 식별자) 문자열 형식으로 운영 체제에 표시됩니다. ContainerID UUID는 ContainerID 설명자 내에 포함되어 있습니다. ContainerID 설명자는 디바이스 수준 Microsoft OS 기능 설명자입니다. 따라서 운영 체제에서 USB ContainerID를 요청할 때 설명자 요청의 wValue 필드는 항상 0으로 설정해야 합니다. Microsoft OS 기능 설명자 및 설명자 요청에 대한 자세한 내용은 Microsoft OS 1.0 설명자 사양을 참조 하세요.
ContainerID 설명자는 헤더 섹션으로 구성됩니다.
Offset | 필드 | 크기 | Type | 설명 |
---|---|---|---|---|
0 | dwLength | 4 | 서명되지 않은 DWord | 전체 ContainerID 설명자의 길이(바이트)입니다. 이 필드는 항상 0x18 값으로 설정해야 합니다. |
4 | bcdVersion | 2 | BCD | 각 니블이 숫자에 해당하는 이진 코드된 10진수(BCD)의 ContainerID 설명자 버전 번호입니다. MSB(가장 중요한 바이트)는 소수점 앞의 두 숫자를 포함하고 LSB(최소 바이트)는 소수점 뒤의 두 숫자를 포함합니다. 예를 들어 버전 1.00은 0x0100 표시됩니다. 이 필드는 항상 0x0100 설정해야 합니다. |
6 | wIndex | 2 | Word | 이 필드는 USB ContainerID 설명자에 대해 항상 6으로 설정됩니다. |
ContainerID 설명자는 ContainerID 섹션으로 구성됩니다.
Offset | 필드 | 크기 | Type | 설명 |
---|---|---|---|---|
0 | bContainerID | 16 | 서명되지 않은 DWord | ContainerID 데이터입니다. |
디바이스 제조업체는 디바이스의 각 인스턴스에 ContainerID에 대한 보편적으로 고유한 16비트 값이 있는지 확인합니다. 또한 디바이스는 전원이 켜질 때마다 동일한 ContainerID 값을 보고해야 합니다. 중복 가능성이 거의 없는 UUID를 생성하기 위한 몇 가지 알고리즘이 있습니다. 디바이스 제조업체는 요구 사항에 가장 적합한 UUID 생성 알고리즘을 선택할 수 있습니다. 결과가 고유하기만 하면 어떤 UUID 생성 알고리즘이 사용되는지는 중요하지 않습니다.
USB ContainerID 구문
ContainerID는 {xxxxxxxx-xxxx-xx}의 표준 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 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 기능을 유지하기 위해 Microsoft OS 문자열 설명자에는 ContainerID 설명자에 대한 지원을 나타내는 데 사용할 수 있는 플래그 필드가 포함되어 있습니다.
Microsoft OS 문자열 설명자의 현재 정의에는 일반적으로 0으로 설정된 설명자 끝에 1바이트 패드 필드 bPad가 포함됩니다. 새 ContainerID를 지원하는 USB 디바이스의 경우 bPad 필드는 플래그 필드인 bFlags로 다시 정의됩니다. 이 필드의 비트 1은 ContainerID 설명자에 대한 지원을 나타내는 데 사용됩니다. 표 3에서는 USB 디바이스에 대한 Microsoft OS 문자열 설명자의 필드를 설명합니다.
필드 | 길이(바이트) | 값 | 설명 |
---|---|---|---|
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 ContainerID HCK 요구 사항
디바이스 제조업체는 Windows가 각 USB 다기능 디바이스의 기능을 성공적으로 통합할 수 있도록 생성하는 디바이스의 각 인스턴스에 전역적으로 고유한 ContainerID 값이 있는지 확인해야 합니다. Windows 하드웨어 CertificationWindows 하드웨어 인증 키트에는 디바이스에 구현된 경우 USB ContainerID 에 대한 DEVFUND-0034 요구 사항이 포함되어 있습니다. 디바이스가 USB ContainerID를 구현하는 경우 Windows 하드웨어 인증은 Microsoft OS 설명자 테스트의 일부로 ContainerID를 테스트하고 ContainerID 값이 전역적으로 고유한지 확인합니다. 이러한 Windows 하드웨어 인증 요구 사항에 대한 자세한 내용은 Windows 하드웨어 인증 웹 사이트를 참조하세요.
USB ContainerID 구현에 대한 권장 사항 다음은 USB 디바이스를 설계, 제조 및 배송하는 디바이스 공급업체에 대한 권장 사항입니다.
Windows에서 ContainerID를 사용하여 다기능 및 다중 전송 USB 디바이스에 대한 지원을 개선하는 방법을 알아봅니다. 먼저 "Windows의 다기능 디바이스 지원 및 디바이스 컨테이너 그룹화"를 읽어보는 것이 좋습니다.
각 USB 디바이스의 일련 번호가 고유한지 확인합니다. Windows 하드웨어 인증 요구 사항에 따르면 디바이스에 일련 번호가 포함된 경우 일련 번호는 디바이스의 각 인스턴스에 대해 고유해야 합니다.
시스템에 포함된 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 를 쿼리하지 않습니다.