HID开发笔记
+ -

Windows系统USB键盘KEYBOARD_INPUT_DATA12字节解析(BUSHOUND可抓包)

2022-06-07 12 0

和鼠标的MOUSE_INPUT_DATA结构一样,键盘使用的是KEYBOARD_INPUT_DATA,并且这个不是HID键盘报告描述符定义的数据,而是系统转换后的数据。
该结构体定义如下:

typedef struct _KEYBOARD_INPUT_DATA {
  USHORT UnitId;
  USHORT MakeCode;
  USHORT Flags;
  USHORT Reserved;
  ULONG  ExtraInformation;
} KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA;

各字段定义详见:https://docs.microsoft.com/zh-cn/windows/win32/api/ntddkbd/ns-ntddkbd-keyboard_input_data

bushound定义KEYBOARD_INPUT_DATA如下:

Offset Length Content
0 2 Not used
2 2 Scan code of key
4 2 Flags:
0000h = key pressed
0001h = key released
0002h = extended scan code E0
0004h = extended scan code E1
6 2 Not used
8 4 Device specific information

我们通过BUSHOUND抓内容如下:
BUSHOUND抓键盘

注意,这里抓的是12设备的数据,而不是10的数据,10设备的是HID报告描述符定义的HID键盘数据,而12设备才是转化后的数据。

Device  Length    Phase  Data                                        
------  --------  -----  --------------------------------------------
  10.1         8  IN     00 00 04 00  00 00 00 00                    
  12          12  IN     01 00 1e 00  00 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 00 00  00 00 00 00                    
  12          12  IN     01 00 1e 00  01 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 05 00  00 00 00 00                    
  12          12  IN     01 00 30 00  00 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 00 00  00 00 00 00                    
  12          12  IN     01 00 30 00  01 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 06 00  00 00 00 00                    
  12          12  IN     01 00 2e 00  00 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 00 00  00 00 00 00                    
  12          12  IN     01 00 2e 00  01 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 07 00  00 00 00 00                    
  12          12  IN     01 00 20 00  00 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 00 00  00 00 00 00                    
  12          12  IN     01 00 20 00  01 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 08 00  00 00 00 00                    
  12          12  IN     01 00 12 00  00 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 00 00  00 00 00 00                    
  12          12  IN     01 00 12 00  01 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 09 00  00 00 00 00                    
  12          12  IN     01 00 21 00  00 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 00 00  00 00 00 00                    
  12          12  IN     01 00 21 00  01 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 0a 00  00 00 00 00                    
  12          12  IN     01 00 22 00  00 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 00 00  00 00 00 00                    
  12          12  IN     01 00 22 00  01 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 0b 00  00 00 00 00                    
  12          12  IN     01 00 23 00  00 00 00 00  00 00 00 00       
  10.1         8  IN     00 00 00 00  00 00 00 00                    
  12          12  IN     01 00 23 00  01 00 00 00  00 00 00 00

0 篇笔记 写笔记

BusHound的使用方法详解
在开始菜单日运行Bus Hound软件,将USB设备插入电脑U口。如图所示,进入”Devices”目录,在”Devices”内选择要监听的设备。例如:我的设备置是一个U盘,则装置为USB大容量储存设备,点选”USB大容量储存设备”图示,可以在下面的”Properties”图框内看到设备的设备树及设备......
HID键盘设备数据抓包分析实践
本文使用 Bus Hound 工具对 USB HID 设备数据包进行分析,并结合官方手册及网上文章进行整理。在进行数据分析前,我们先回顾一下USB相关的基础知识。USB描述符USB 主机是通过各种描述符来识别设备的,有设备描述符,接口描述符,端点描述符,字符描述符,报告描述符(HID)等。和普通的U......
关于UVC摄像头指示灯的调试过程总结
最近遇到了一个很是奇怪的UVC摄像头指示灯问题,现象如下:上层应用是一个会议系统软件,当需要进行会议时,点击会议按钮添加会议。这时应用软件打开摄像头,并开始与服务器进行网络连接。当然由于摄像头的打开,摄像头指示灯点亮。上层应用软件与服务器连接后,进行会议界面。这时突然摄像头指示灯熄灭,但会议正常,摄......
USB键盘报告描述符数据格式分析
USB键盘的HID报表描述符的内容参见下表。数据的输入端点为中断方式,当有键盘敲击事件时,会上报数据长度为8字节的数据报告。0x05,0x01,// Global Generic Desktop0x09,0x06,// Local KeyBoard 0xA1,0x01,// Main app col......
HID 报表描述符键盘实例
通过下面的报告描述符的定义,我们根据上面的注释可知,包含一个中断输入报表描述符和一个中断输出报告描述符。其中断输入报告描述符用于USB HID键盘中断输入端点,输出报表描述符用于USB HID键盘中断输出端点。USB HID键盘的中断输入报告对于中断输入端点,数据格式定义如下:BYTE0:该字......
BusHound简介及安装
BusHound简介BusHound软件是由美国perisoft公司研制的一种专用于PC机各种总线数据包监视和控制的开发工具软件,其名“hound”的中文意思为“猎犬”,即指其能敏锐地感知到总线的丝毫变化。Bus Hound是一个超级软件总线协议分析器,用于捕捉来自设备的协议包和输入输出操作,其优......
BIOS下识别USB键盘
在BIOS下要识别一个USB键盘和在操作系统下识别一个USB键盘其实是有一些区别的:首先接口描述符中bInterfaceClass的值必须为0x03,bInterfaceSubClass的值为0或1,为1表示HID设备符是一个启动设备(Boot Device,一般对PC机而言才有意义,意思是BIO......
BusHound设备窗口
使用BusHound进行数据抓包,抓包的目标为设备。BusHound提供了一个类似设备管理器的窗口,以树形的方式显示。设备树主要包括SCSI设备树和Usb设备树。设备IDBusHound为每个显示在设备窗口中的设备树分配一个ID,这个ID在设备窗口树列表中,设备名前中括号中的数字为设备ID.点击设备......
为什么Windows7重新安装系统后插在USB3.0端口的鼠标不能使用?
在 Windows 7 及更早版本的操作系统中,USB 3.0 驱动程序堆栈由第三方提供,操作系统不提供USB3.0驱动栈。 因此,Windows7重新安装系统后插在USB3.0端口上的所有设备都无法工作,需要安装第三方提供的USB控制器和集线器驱动,这样才能识别出挂接在该USB总线下的设备。从Wi......
UVC 描述符实例
通过BUSBOUND抓取USB摄像头插入电脑时的数据信息,这里只是选报设备描述符和接口描述符信息Device Phase Data Description Cmd.Phase.Ofs(rep)------ ----- ----------......
USB键盘与HID报表描述符关系
报告描述符确实非常复杂,要看懂协议真得比较难(因为只有英文的),我见到的国内教材也没有对这部分写得很详细的,有的也只是部分内容的翻译而已。一般建议用示例报告描述符修改一下就可以了,《Hid Usage Table》里给出了一些常见应用的报告描述符。对于键盘类应用,通常用已有的示例已经够用了。“如果是......
HID复合设备(键盘、鼠标)的实现
在使用一些USB键盘或鼠标的时候,特别是一些电竟高档HID设备时,经常发现这些设备会额外定义一些特别的快捷键,使得这些设备不仅有基础设备(如键盘,鼠标)的功能,也有一些特别的快捷功能(如系统声音的放大放小)。甚至更有一些复杂的设备,只需要一个USB接口,就同时支持鼠标键盘功能或在键盘的额外区域支持触......
USB HID键盘设备树及设备枚举过程分析
今天在本站USB中文网微信技术交流群有一个同学在问关于HID设备的报表描述符的东东。但是在问的过程中发现一个很严重的问题,那就是它的它设备是一个复合设备,导致设备树比较复杂,关于报表描述符与接口描述符等之间的相关对应关系不是很清楚。为此,本人手中刚好有一个本人认为USB HID设备中相对比较复杂的设......
Windows下通过USB虚拟的键盘鼠标总结
哐哐铛铛的,终于把以前搞的虚拟键盘、鼠标的驱动代码重新整理完成,并且在此基础上将USB虚拟的键盘和鼠标整合到一个驱动中。将键盘和鼠标的代码合并在一起的原因很简单:第一是为了验证自己写的这个虚拟的总线的功能第二就是键盘一般和鼠标是联系在一起的,用键盘的地方大部也要用到鼠标。所以干脆将这两个设备合并......
BUSHOUND抓包stall pid的USTS c0000004错误
对USB设备进行数据分析,使用最多的也就是BUSHOUND了,不过经常遇到一个问题就是 USTS c0000004 stall pid 错误。USTS c0000004 stall pid在本站中搜......
作者信息
USB中文网
B站搜索 站长漫谈 看视频。
pnpon内核开网,USB中文网,
busrom硬核技术网站长
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!