USB 문자열 설명자

장치, 구성 및 인터페이스 설명자에는 문자열 설명자에 대한 참조가 들어 있습니다. 이 항목에서는 장치에서 특정 문자열 설명자를 가져오는 방법에 대해 설명합니다.

문자열 설명자는 1부터 시작하는 인덱스 번호로 참조됩니다. 문자열 설명자에는 하나 이상의 유니코드 문자열이 들어 있으며, 각 문자열은 다른 문자열이 다른 언어로 번역된 것입니다.

클라이언트 드라이버는 DescriptorType = USB_STRING_DESCRIPTOR_TYPE과 함께 UsbBuildGetDescriptorRequest를 사용하여 문자열 설명자를 획득하는 요청을 빌드합니다. Index 매개 변수는 인덱스 번호를 지정하며, LanguageID 매개 변수는 언어 ID(Microsoft Win32 LANGID 값에서와 동일한 값이 사용됨)를 지정합니다. 드라이버는 특별한 인덱스 번호 0을 요청하여 장치가 지원하는 언어 ID를 알 수 있습니다. 이 특별한 값에 대해, 장치는 유니코드 문자열이 아니라 언어 ID 배열을 반환합니다.

문자열 설명자는 가변 길이 데이터로 구성되므로 드라이버는 두 개의 단계를 통해 값을 얻어야 합니다. 우선, 드라이버는 요청을 발행하여 문자열 설명자(USB_STRING_DESCRIPTOR 구조)의 헤더를 보관할 수 있을 만큼 충분히 큰 데이터 버퍼를 전달해야 합니다. USB_STRING_DESCRIPTOR의 bLength 멤버는 전체 설명자의 바이트 크기를 지정합니다. 그러면 드라이버가 크기 bLength의 데이터 버퍼로 동일한 요청을 합니다.

다음 코드는 언어 ID langIDi-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
);

관련 항목

USB 설명자

 

 

표시:
© 2014 Microsoft