Share via


UVC(USB 비디오 클래스) 카메라 펌웨어의 MS OS 설명자에서 디바이스 속성 키 만들기

과거에 USB UVC(비디오 클래스) 카메라 제조업체는 디바이스 속성 키와 같은 기능을 제공하기 위해 사용자 지정 INF 파일을 작성해야 했습니다. 간단한 레지스트리 키의 경우 USBVideo 드라이버에는 문제의 키 이름이 앞에 있는 경우 MS OS 설명자에서 레지스트리 키를 만드는 메커니즘이 UVC-있습니다. 이렇게 하면 USBVideo 드라이버에서 해당 기능이 확장되어 특정 형식을 따르는 경우 MS OS 설명자에서 디바이스 속성 키를 만듭니다. 이를 통해 USBVideo 카메라 펌웨어는 해당 카메라에 대한 사용자 지정 INF를 작성하지 않고도 MIPI 카메라 드라이버로 기능 패리티에 도달할 수 있습니다.

참고

동일한 디바이스 속성 키가 사용자 지정 INF에 정의된 경우 MS OS 설명자가 제공하는 값을 재정의합니다.

적용 대상

  • Windows 11 이상 운영 체제

MS OS 2.0 레지스트리 속성 설명자

현재 MS OS 2.0 레지스트리 속성 설명자는 다음과 같이 정의됩니다.

Offset 필드 크기 설명
0 wLength 2 이 설명자의 길이(바이트)입니다.
2 wDescriptorType 2 MS_OS_20_FEATURE_REG_PROPERTY
4 wPropertyDataType 2 레지스트리 속성의 유형
6 wPropertyNameLength 2 속성 이름의 길이입니다.
8 PropertyName 변수 레지스트리 속성의 이름입니다.
8+M wPropertyDataLength 2 속성 데이터의 길이
10+M PropertyData 변수 속성 데이터

MS OS 2.0 레지스트리 속성 설명자에 대한 wPropertyDataType 값

다음 표에서는 MS OS 2.0 레지스트리 속성 설명자에 대한 wPropertyDataType 값에 대해 설명합니다.

Description
0 RESERVED
1 NULL로 종료된 유니코드 문자열(REG_SZ)
2 환경 변수를 포함하는 NULL로 종료된 유니코드 문자열(REG_EXPAND_SZ)
3 자유 형식 이진(REG_BINARY)
4 Little-endian 32비트 정수(REG_DWORD_LITTLE_ENDIAN)
5 Big-endian 32비트 정수(REG_DWORD_BIG_ENDIAN)
6 기호 링크가 포함된 NULL로 끝나는 유니코드 문자열(REG_LINK)
7 여러 NULL로 끝나는 유니코드 문자열(REG_MULTI_SZ)
8 이상 RESERVED

USBVideo 드라이버는 현재 의 접두 UVC- 사가 있는 모든 MS OS 설명자를 레지스트리 변수 이름으로 각 디바이스 인터페이스 노드에 복사합니다. 이러한 복사본은 한 레지스트리 키를 다른 레지스트리 키에 대한 일대일로 직접 복사하여 접두사를 UVC- 제거합니다. 디바이스 속성 키의 경우 추가 정보가 필요합니다. 디바이스 속성 키를 정의하려면 정의된 GUID 및 ID가 있어야 합니다. 또한 각 키에는 해당 데이터에 해당하는 데이터 형식과 값이 필요합니다. 이 기능의 경우 USBVideo 드라이버는 레지스트리 값과 형식을 DEVPROPTYPE에 매핑합니다.

가능한 레지스트리 유형

레지스트리 값 Description DEVPROPTYPE 값 Description
1 REG_SZ DEVPROP_TYPE_STRING Null로 끝나는 문자열
2 REG_EXPAND_SZ 해당 없음 지원되지 않음
3 REG_BINARY DEVPROP_TYPE_BINARY 사용자 지정 이진 데이터
4 REG_DWORD_LITTLE_ENDIAN DEVPROP_TYPE_UINT32 32비트 부호 없는 int(ULONG32)
5 REG_DWORD_BIG_ENDIAN 해당 없음 지원되지 않음
6 REG_LINK 해당 없음 지원되지 않음
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-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