Special processing on the client is needed when processing TS_URB_OS_FEATURE_DESCRIPTOR_REQUEST.

The following describes how to get the OS-specific string descriptor.

To retrieve a device's OS string descriptor, send a standard GET_DESCRIPTOR control request to the device.

For details on how to construct GET_DESCRIPTOR control requests, see [USB-SPC2.0] section 9.4 "Standard Device Requests."

The request must have the format shown in the following table.

bmRequestType

bRequest

wValue

wIndex

wLength

Data

1000 0000B

GET_DESCRIPTOR

0x03EE

0x0000

0x12

Returned string

bmRequestType: IN. This 1-byte field is divided into three parts that indicate the data transfer direction, the descriptor type, and the recipient.

To retrieve a USB string descriptor, bmRequestType MUST be set to 10000000B (0x80).

bRequest: IN. This field specifies the request type. It should be set to the standard GET_DESCRIPTOR request code.

wValue: IN. This field is split into two parts for GET_DESCRIPTOR requests.

  • The high byte contains the descriptor type. To retrieve a string descriptor, set this byte to 0x03.

  • The low byte contains the descriptor's string index, which indicates where the descriptor is stored in firmware.
    To retrieve an OS string descriptor, set this byte to 0xEE.

wIndex: IN. This field specifies the descriptor's language ID. It must be set to 0 for OS string descriptors.

wLength: IN. This field specifies the length of the buffer, in bytes, that is to receive the string descriptor.
The device should respond to values ranging from 0x02-0xFF. wLength should be set to 0x12 for OS string descriptors.

Data: OUT. This field is a pointer to the buffer that will receive the requested descriptor. The format of the descriptor is described in the following table.

For more details on how to send control requests, see [USB-SPC2.0].

If a device does not have a valid string descriptor at 0xEE, it responds with a Stall or Request Error.<4>

If an OS string descriptor request is successful, the device returns the descriptor in the request's Data field.
Version 1.00 of the OS string descriptor has a fixed length of 18 bytes, with a structure as shown in the following table.
This format MUST be used by all OS string descriptors.

Length

Type

Signature

MS Vendor Code

Pad

0x14

0x03

MSFT100

unsigned byte

0x00

Length: An unsigned byte and MUST be set to 0x14.

Type: An unsigned byte and MUST be set to 0x03.

Signature: A Unicode string and MUST be set to "MSFT100".

MS Vendor Code: An unsigned byte, it will be used to retrieve associated feature descriptors.

Pad: An unsigned byte and MUST be set to 0x00.

When processing the Signature and MS VendorCode fields:

  • The Signature field contains a Unicode character array that identifies the descriptor as an OS string descriptor
    and includes the version number.
    For version 1.00, this array must be set to "MSFT100" (0x4D00 0x5300 0x4600 0x5400 0x3100 0x3000 0x3000).

  • The MS VendorCode field is used to retrieve the associated feature descriptors.
    This code is used as Requestfield in TS_URB_CONTROL_VENDOR_OR_CLASS_REQUEST section 2.2.9.12.

Because independent hardware vendors can store string descriptors at any index,
there is no guarantee that a string descriptor stored at 0xEE is an OS string descriptor.<5>

Processing an OS Descriptor request -- Remote Desktop Protocol的更多相关文章

  1. Connect to a Windows PC from Ubuntu via Remote Desktop Connection

    http://www.7tutorials.com/connecting-windows-remote-desktop-ubuntu A useful feature of Windows is be ...

  2. Running a Remote Desktop on a Windows Azure Linux VM (远程桌面到Windows Azure Linux )-摘自网络(试了,没成功 - -!)

                              A complete click-by-click, step-by-step video of this article is available ...

  3. 使用ubuntu远程连接windows, Connect to a Windows PC from Ubuntu via Remote Desktop Connection

    from: https://www.digitalcitizen.life/connecting-windows-remote-desktop-ubuntu NOTE: This tutorial w ...

  4. [官网]Prevent a worm by updating Remote Desktop Services (CVE-2019-0708)

    Prevent a worm by updating Remote Desktop Services (CVE-2019-0708) ★★★★★ https://blogs.technet.micro ...

  5. [OS] 修改屏幕分辨率(用Remote Desktop Connection 或者 用工具:Remote Desktop Connection Manager)

    用Remote Desktop Connection Remote Desktop Connection Manager

  6. remote desktop connect btw Mac, Windows, Linux(Ubuntu) Mac,Windows,Linux之间的远程桌面连接

    目录 I. 预备 II. Mac连接Windows III. Windows连接Mac IV. Windows连接Ubuntu V. Mac连接Ubuntu VI. Ubuntu连接Mac VII, ...

  7. Windows组件:打开MSDTC,恢复Windows TaskBar,查看windows日志,打开Remote Desktop,打开Services,资源监控

    一,Win10 打开 MSDTC 1,Win+R 打开运行窗口,输入 dcomcnfg,打开组件服务窗口 2,在组件服务 catalog下找到 Distributed Transaction Coor ...

  8. Configure Security Settings for Remote Desktop(RDP) Services Connections

    catalogue . Configure Server Authentication and Encryption Levels . Configure Network Level Authenti ...

  9. Remote Desktop File Format

    转自:http://engrmosaic.uncc.edu/mosaic-anywhere/remote-desktop-file-format The new Terminal Services c ...

随机推荐

  1. Java练习之使用StringBuilder

    package string.demo; /* * 将数组变为字符串输出 */ public class StringBuilderTest { /** * @param args */ public ...

  2. 【算法】Huffman编码(数据结构+算法)

    1.描述 Huffman编码,将字符串利用C++编码输出该字符串的Huffman编码. Huffman树是一种特殊结构的二叉树,由Huffman树设计的二进制前缀编码,也称为Huffman编码在通信领 ...

  3. Wireshark按照域名过滤

    HTTP协议 http.host == "http://baidu.net" DNS协议 dns.qry.name=="www.baidu.com"

  4. Linux驱动技术(五) _设备阻塞/非阻塞读写【转】

    转自:http://www.cnblogs.com/xiaojiang1025/p/6377925.html 等待队列是内核中实现进程调度的一个十分重要的数据结构,其任务是维护一个链表,链表中每一个节 ...

  5. 八、mini2440裸机程序之UART(1)简单介绍【转】

    转自:http://blog.csdn.net/shengnan_wu/article/details/8298869 一.概述          S3C2440通用异步接收和发送(UART)提供了三 ...

  6. linux C守护进程编写

    linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件.守护进程是一种很有用的进程. Linux的大多数服 ...

  7. centos6.5环境Redis下载及编译安装

    centos6.5环境Redis下载及编译安装 1:官方站点: http://redis.io/download 下载最新版或者最新stable版 2:解压源码并进入目录 tar -zxvf redi ...

  8. js和css实现内容超过边框,就自动省略,自动添加title

    在项目汇总,我们有这样的需求,如果内容多了,就自动省略,自动添加title 这个需要判断判断俩个值,一个是width(),一个是scrollWidth, 在div中,如果内容没有超过边框,这俩个值是一 ...

  9. 德卡Z90读卡器读取社保卡,德卡Z90读卡器CSharp示例程序源码

    前言,最近学习调用 医保卡业务,使用德卡读卡器,主要就是调用一个DLL,动态库文件. 借着自学的机会把心得体会都记录下来,方便感兴趣的小伙伴学习与讨论. 内容均系原创,欢迎大家转载分享,但转载的同时别 ...

  10. [转] offsetParent 到底是哪一个?

    正文 不同情况 没有已定位的父节点,且自身position:relative的DIV元素的offsetParent为BODY 没有已定位的父节点,且自身position: absolute的DIV元素 ...