과거에 USB UVC(비디오 클래스) 카메라 제조업체는 디바이스 속성 키와 같은 기능을 제공하기 위해 사용자 지정 INF 파일을 작성해야 했습니다. 간단한 레지스트리 키의 경우 USBVideo 드라이버에는 문제의 키 이름이 앞에 있는 UVC-
경우 MS OS 설명자에서 레지스트리 키를 만드는 메커니즘이 있습니다. 이 기능은 USBVideo 드라이버에서 확장되어, 특정 형식을 따르는 MS OS 설명자로부터 디바이스 속성 키를 생성할 수 있습니다. 이렇게 하면 USBVideo 카메라 펌웨어가 해당 카메라에 대한 사용자 지정 INF를 작성하지 않고 MIPI 카메라 드라이버로 기능 패리티에 도달할 수 있습니다.
비고
동일한 디바이스 속성 키가 사용자 지정 INF에 정의된 경우 MS OS 설명자가 제공하는 값을 재정의합니다.
적용 대상
- Windows 11 이상 운영 체제
MS OS 2.0 레지스트리 속성 설명자
현재 MS OS 2.0 레지스트리 속성 설명자는 다음과 같이 정의됩니다.
상쇄 | 분야 | 크기 | 설명 |
---|---|---|---|
0 | w길이 | 2 | 이 설명자의 길이(바이트)입니다. |
2 | wDescriptorType | 2 | MS_OS_20_FEATURE_REG_PROPERTY |
4 | wPropertyDataType | 2 | 레지스트리 속성의 유형 |
6 | wPropertyNameLength | 2 | 속성 이름의 길이입니다. |
여덟 | 속성명 | 변수 | 레지스트리 속성의 이름입니다. |
8+M | wPropertyDataLength | 2 | 속성 데이터의 길이 |
천만 이상 | 속성 데이터 | 변수 | 속성 데이터 |
MS OS 2.0 레지스트리 속성 설명자에 대한 wPropertyDataType 값
다음 표에서는 MS OS 2.0 레지스트리 속성 설명자에 대한 wPropertyDataType 값을 설명합니다.
가치 | 설명 |
---|---|
0 | 지정됨 |
1 | NULL로 종료된 유니코드 문자열(REG_SZ) |
2 | 환경 변수를 포함하는 NULL로 종료된 유니코드 문자열(REG_EXPAND_SZ) |
3 | 자유 형식 이진(REG_BINARY) |
4 | 리틀 엔디언 32비트 정수 (REG_DWORD_LITTLE_ENDIAN) |
5 | 빅엔디언 32비트 정수 (REG_DWORD_BIG_ENDIAN) |
6 | 기호 링크가 포함된 NULL로 종료된 유니코드 문자열(REG_LINK) |
7 | 여러 NULL로 끝나는 유니코드 문자열(REG_MULTI_SZ) |
8 이상 | 지정됨 |
USBVideo 드라이버는 현재 레지스트리 변수 이름의 접두 UVC-
사가 있는 모든 MS OS 설명자를 각 디바이스 인터페이스 노드에 복사합니다. 이 복사본은 하나의 레지스트리 키를 다른 키로 일대일로 바로 복사하는 것이며, UVC-
접두사를 제거합니다. 디바이스 속성 키의 경우 추가 정보가 필요합니다. 디바이스 속성 키를 정의하려면 정의된 GUID 및 ID가 있어야 합니다. 또한 각 키에는 해당 데이터에 해당하는 데이터 형식과 값이 필요합니다. 이 기능의 경우 USBVideo 드라이버는 레지스트리 값과 형식을 DEVPROPTYPE에 매핑합니다.
가능한 레지스트리 유형
레지스트리 값 | 설명 | DEVPROPTYPE 값 | 설명 |
---|---|---|---|
1 | REG_SZ | DEVPROP_TYPE_STRING | Null로 끝나는 문자열 |
2 | REG_EXPAND_SZ | NA | 지원되지 않음 |
3 | REG_BINARY | DEVPROP_TYPE_BINARY | 사용자 지정 이진 데이터 |
4 | REG_DWORD_LITTLE_ENDIAN | DEVPROP_TYPE_UINT32 (데이터 속성 유형 - 32비트 부호 없는 정수) | 32비트 부호 없는 int(ULONG32) |
5 | REG_DWORD_BIG_ENDIAN | NA | 지원되지 않음 |
6 | REG_LINK | NA | 지원되지 않음 |
7 | REG_MULTI_SZ | DEVPROP_TYPE_STRING_LIST | 다중 sz 문자열 목록 |
이 디바이스 속성 키를 만들어야 하는지 확인하려면 새 접두사를 정의합니다. MS OS 설명자가 DKEY-GUID<>,< ID> 형식으로 발견되면 USBVideo 드라이버가 이 생성을 시도합니다. 레지스트리 값은 위에 정의된 형식 중 하나여야 합니다(REG_LINK, REG_EXPAND_SZ 및 REG_DWORD_BIG_ENDIAN 삭제 및 무시). GUID 형식은 {XXXXXXXX-XXXX-XXXX-XXXX-XXXX-XXXXXXXXXX}여야 하며 ID 형식은 2보다 큰 숫자 값이어야 합니다.
MS OS 설명자 예제
다음 예제에서는 MS OS 설명자를 정의합니다.
UCHAR Example2_MSOS20DescriptorSet_UVCDevicePropertyKeyForFutureWindows\[0x3C\] =
{
//
// MS OS 2.0 Descriptor Set Header
//
0x0A, 0x00, // wLength - 10 bytes
0x00, 0x00, // MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, 0x0?, 0x06, // dwWindowsVersion – 0x060?0000 for future Windows version
0x76, 0x00, // wTotalLength – 118 bytes
//
// MS OS 2.0 Registry Value Feature Descriptor
//
0x6c, 0x00, // wLength - 108 bytes
0x04, 0x00, // wDescriptorType – 4 for Registry Property
0x04, 0x00, // wPropertyDataType - 4 for REG_DWORD_LITTLE_ENDIAN
0x5E, 0x00, // wPropertyNameLength – 94 bytes
'D', 0x00, 'K', 0x00, // Property Name – **DKEY-{4023440c-a74e-46e0-82df-e486fa545f40},3**
'E', 0x00, 'Y', 0x00,
'-', 0x00, '{', 0x00,
'4', 0x00, '0', 0x00,
'2', 0x00, '3', 0x00,
'4', 0x00, '4', 0x00,
'0', 0x00, 'C', 0x00,
'-', 0x00, 'A', 0x00,
'7', 0x00, '4', 0x00,
'E', 0x00, '-', 0x00,
'4', 0x00, '6', 0x00,
'E', 0x00, '0', 0x00,
'-', 0x00, '8', 0x00,
'2', 0x00, 'D', 0x00,
'F', 0x00, '-', 0x00,
'E', 0x00, '4', 0x00,
'8', 0x00, '6', 0x00,
'F', 0x00, 'A', 0x00,
'5', 0x00, '4', 0x00,
'5', 0x00, 'F', 0x00,
'4', 0x00, '0', 0x00,
'}', 0x00, ',', 0x00,
'3', 0x00, 0x00, 0x00,
0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0xAC, 0x03, 0x00, 0x00 // PropertyData – 0x000003AC (940)
};
이렇게 하면 다음 매개 변수와 함께 IoSetDevicePropertyData 를 사용하여 다음 디바이스 속성 키로 변환됩니다.
DEVPROPKEY
DEVPROPGUID = {4023440c-a74e-46e0-82df-e486fa545f40}
DEVPROPID = 3
DEVPROPTYPE = DEVPROP_TYPE_UINT32
PropertyBuffer containing UINT32 value = 940