다음을 통해 공유


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

과거에 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