USB ビデオ クラス (UVC) カメラ ファームウェアで MS OS 記述子からデバイス プロパティ キーを作成する
以前は、USB ビデオ クラス (UVC) カメラのメーカーは、デバイス プロパティ キーなどの機能を提供するために、カスタム INF ファイルを作成する必要がありました。 単純なレジストリ キーの場合、USBVideo ドライバーには、問題のキー名の先頭にUVC-
が付いている場合、MS OS 記述子からレジストリ キーを作成するためのメカニズムがあります。 これにより、USBVideo ドライバーでその機能が拡張され、特定の形式に従っている場合は、MS OS 記述子からデバイス プロパティ キーも作成されます。 これにより、USBVideo カメラ ファームウェアは、これらのカメラのカスタム INF を作成することなく、MIPI カメラ ドライバーとの機能パリティを実現できます。
Note
カスタム INF で同じデバイス プロパティ キーが定義されている場合は、MS OS 記述子によって提供される値がオーバーライドされます。
適用対象
- Windows 11 およびそれ以降のオペレーティング システム
MS OS 2.0 レジストリ プロパティ記述子
現在の MS OS 2.0 レジストリ プロパティ記述子は、次のように定義されています。
オフセット | フィールド | サイズ | 説明 |
---|---|---|---|
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 値について説明します。
Value | アクリルアミド |
---|---|
0 | RESERVED |
1 | ヌル終端 Unicode 文字列 (REG_SZ) |
2 | 環境変数を含むヌル終端 Unicode 文字列 (REG_EXPAND_SZ) |
3 | 自由形式バイナリ (REG_BINARY) |
4 | リトルエンディアン 32 ビット整数 (REG_DWORD_LITTLE_ENDIAN) |
5 | ビッグエンディアン 32 ビット整数 (REG_DWORD_BIG_ENDIAN) |
6 | シンボリック リンクを含むヌル終端 Unicode 文字列 (REG_LINK) |
7 | 複数のヌル終端 Unicode 文字列 (REG_MULTI_SZ) |
8 以上 | RESERVED |
USBVideo ドライバーは現在、レジストリ変数名としてUVC-
のプレフィックスを持つすべての MS OS 記述子を各デバイス インターフェイス ノードにコピーします。 あるレジストリ キーから別のレジストリ キーへの 1 対 1 の直接コピーがあり、UVC-
プレフィックスが削除されます。 デバイス プロパティ キーの場合は、追加情報が必要です。 デバイス プロパティ キーを定義するには、GUID と ID が定義されている必要があります。 さらに、各キーには、対応するデータ型とそのデータの値が必要です。 この機能の場合、USBVideo ドライバーはレジストリ値とタイプをDEVPROPTYPEにマップします。
可能なレジストリ タイプ
レジストリ値 | 説明 | DEVPROPTYPE 値 | 説明 |
---|---|---|---|
1 | REG_SZ | DEVPROP_TYPE_STRING | ヌル終端文字列 |
2 | REG_EXPAND_SZ | NA | サポートされていません |
3 | REG_BINARY | DEVPROP_TYPE_BINARY | カスタム バイナリ データ |
4 | REG_DWORD_LITTLE_ENDIAN | DEVPROP_TYPE_UINT32 | 32 ビット符号なし整数 (ULONG32) |
5 | REG_DWORD_BIG_ENDIAN | NA | サポートされていません |
6 | REG_LINK | NA | サポートされていません |
7 | REG_MULTI_SZ | DEVPROP_TYPE_STRING_LIST | Multi-sz の文字列リスト |
このデバイス プロパティ キーを作成さらる必要があることを判断するために、新しいプレフィックスが定義されます。 MS OS 記述子がDKEY-<GUID>、<ID>の形式で見つかった場合、USBVideo ドライバーはこの作成を試みます。 レジストリ値は、上記で定義された形式のいずれかである必要があります (REG_LINK、REG_EXPAND_SZ、REG_DWORD_BIG_ENDIAN を破棄して無視ます)。 GUID の形式は {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} で、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