共用方式為


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
);