USB 字串描述元
裝置、組態和介面描述元可能包含字串描述元的參考。 本主題描述如何從裝置取得特定字串描述元。
字串描述元是由其單一索引編號所參考。 字串描述元包含一或多個 Unicode 字串;每個字串都是另一種語言的其他人翻譯。
用戶端驅動程式使用 UsbBuildGetDescriptorRequest 搭配 DescriptorType = USB_STRING_DESCRIPTOR_TYPE,以建置要求以取得字元串描述元。 Index 參數會指定索引編號,而 LanguageID 參數會指定語言標識碼, (相同的值與 Microsoft Win32 LANGID 值) 相同。 驅動程式可以要求零的特殊索引編號,以判斷裝置支援的語言標識碼。 針對這個特殊值,裝置會傳回語言標識子陣列,而不是 Unicode 字串。
因為字串描述元是由可變長度的數據所組成,所以驅動程序必須在兩個步驟中取得它。 首先,驅動程式必須發出要求,傳遞夠大的數據緩衝區,以保存字串描述元的標頭,USB_STRING_DESCRIPTOR 結構。 USB_STRING_DESCRIPTOR的 bLength 成員會以位元組為單位指定整個描述元的大小。 然後,驅動程式會使用 大小為 bLength 的數據緩衝區提出相同的要求。
下列程式代碼示範如何使用語言識別碼 langID 來要求 i-th 字串描述元:
USB_STRING_DESCRIPTOR USD, *pFullUSD;
UsbBuildGetDescriptorRequest(
pURB, // points to the URB to be filled in
sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST),
USB_STRING_DESCRIPTOR_TYPE,
i, // index of string descriptor
langID, // language ID of string.
&USD, // points to a USB_STRING_DESCRIPTOR.
NULL,
sizeof(USB_STRING_DESCRIPTOR),
NULL
);
pFullUSD = ExAllocatePool(NonPagedPool, USD.bLength);
UsbBuildGetDescriptorRequest(
pURB, // points to the URB to be filled in
sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST),
USB_STRING_DESCRIPTOR_TYPE,
i, // index of string descriptor
langID, // language ID of string
pFullUSD,
NULL,
USD.bLength,
NULL
);