本文目录一览:
如何使用winusb 访问 hid 设备
这个项目为开源的USB库 libusb 添加了对Windows 操作系统的支持, libusb 帮助开发者很容易的在Windows操作系统访问USB设备。现在支持使用WinUSB 和HID 驱动程序的通过USB设备,也支持使用libusb-win32 和 libusbK 驱动程序的USB设备。
请注意 libusb-win32 和 libusbK 是不同的项目. libusb-win32 仅支持Windows,提供了和libusb-0.1 API 兼容的库和内核驱动libusb0.sys。libusbK 是一个Windows 项目,为Windows和内核驱动程序libusbK.sys提供了一套新的API 。
二进制文件
在 Sourceforge files 提供了预编译的二进制文件和相关的源代码. 对于新的版本1.0.21 release, 也可以从 github 下载。
Windows版本的预编译的二进制文件是使用下面的工具生成的:
电脑在关机的时候跳出提示框"有用户正在与你的电脑联接,如果继续将断开与其的联接"
复制过来的,希望对楼主有所帮助!
【一、禁止默认共享 】 1.先察看本地共享资源 运行-cmd-输入net share 2.删除共享(每次输入一个) net share admin$ /delete net share c$ /delete net share d$ /delete(如果有e,f,……可以继续删除) 3.删除ipc$空连接 在运行内输入regedit 在注册表中找到 HKEY-LOCAL_MACHINESYSTEMCurrentControSetControlLSA 项里数值名称RestrictAnonymous的数值数据由0改为1. 4.关闭自己的139端口,ipc和RPC漏洞存在于此. 关闭139端口的方法是在“网络和拨号连接”中“本地连接”中选取“Internet协议(TCP/IP)” 属性,进入“高级TCP/IP设置”“WINS设置”里面有一项“禁用TCP/IP的NETBIOS”,打勾就关 闭了139端口,禁止RPC漏洞. ---------------------------------------- 【二、设置服务项,做好内部防御】 ------------------- A计划.服务策略: 控制面板→管理工具→服务 关闭以下服务: 1.Alerter[通知选定的用户和计算机管理警报] 2.ClipBook[启用“剪贴簿查看器”储存信息并与远程计算机共享] 3.Distributed File System[将分散的文件共享合并成一个逻辑名称,共享出去,关闭后远程计算机无法访问共享 4.Distributed Link Tracking Server[适用局域网分布式链接跟踪客户端服务] 5.Human Interface Device Access[启用对人体学接口设备(HID)的通用输入访问] 6.IMAPI CD-Burning COM Service[管理 CD 录制] 7.Indexing Service[提供本地或远程计算机上文件的索引内容和属性,泄露信息] 8.Kerberos Key Distribution Center[授权协议登录网络] 9.License Logging[监视IIS和SQL如果你没安装IIS和SQL的话就停止] 10.Messenger[警报] 11.NetMeeting Remote Desktop Sharing[netmeeting公司留下的客户信息收集] 12.Network DDE[为在同一台计算机或不同计算机上运行的程序提供动态数据交换] 13.Network DDE DSDM[管理动态数据交换 (DDE) 网络共享] 14.Print Spooler[打印机服务,没有打印机就禁止吧] 15.Remote Desktop Help Session Manager[管理并控制远程协助] 16.Remote Registry[使远程计算机用户修改本地注册表] 17.Routing and Remote Access[在局域网和广域往提供路由服务.黑客理由路由服务刺探注册信息] 18.Server[支持此计算机通过网络的文件、打印、和命名管道共享] 19.Special Administration Console Helper[允许管理员使用紧急管理服务远程访问命令行提示符] 20.TCP/IPNetBIOS Helper[提供 TCP/IP 服务上的 NetBIOS 和网络上客户端的 NetBIOS 名称解析的支持 而使用户能够共享文件、打印和登录到网络] 21.Telnet[允许远程用户登录到此计算机并运行程序] 22.Terminal Services[允许用户以交互方式连接到远程计算机] 23.Windows Image Acquisition (WIA)[照相服务,应用与数码摄象机] ------------------- B计划.帐号策略: 一.打开管理工具.本地安全设置.密码策略 1.密码必须符合复杂要求性.启用 2.密码最小值.我设置的是10 3.密码最长使用期限.我是默认设置42天 4.密码最短使用期限0天 5.强制密码历史 记住0个密码 6.用可还原的加密来存储密码 禁用 ------------------- C计划.本地策略: 打开管理工具 找到本地安全设置.本地策略.审核策略 1.审核策略更改 成功失败 2.审核登陆事件 成功失败 3.审核对象访问 失败 4.审核跟踪过程 无审核 5.审核目录服务访问 失败 6.审核特权使用 失败 7.审核系统事件 成功失败 8.审核帐户登陆时间 成功失败 9.审核帐户管理 成功失败 然后再到管理工具找到 事件查看器 应用程序 右键 属性 设置日志大小上限 我设置了512000KB 选择不覆盖事件 安全性 右键 属性 设置日志大小上限 我也是设置了512000KB 选择不覆盖事件 系统 右键 属性 设置日志大小上限 我都是设置了512000KB 选择不覆盖事件 ------------------- D计划.安全策略: 打开管理工具 找到本地安全设置.本地策略.安全选项 1.交互式登陆.不需要按 Ctrl+Alt+Del 启用 [根据个人需要,启用比较好,但是我个人是不需要直接输入密码登陆的] 2.网络访问.不允许SAM帐户的匿名枚举 启用 3.网络访问.可匿名的共享 将后面的值删除 4.网络访问.可匿名的命名管道 将后面的值删除 5.网络访问.可远程访问的注册表路径 将后面的值删除 6.网络访问.可远程访问的注册表的子路径 将后面的值删除 7.网络访问.限制匿名访问命名管道和共享 8.帐户.重命名来宾帐户guest [最好写一个自己能记住中文名]让黑客去猜解guest吧,而且还得删除这个帐户,后面有详细解释] 9.帐户.重命名系统管理员帐户[建议取中文名] ------------------- E计划.用户权限分配策略: 打开管理工具 找到本地安全设置.本地策略.用户权限分配 1.从网络访问计算机 里面一般默认有5个用户,除Admin外我们删除4个,当然,等下我们还得建一个属于自己的ID 2.从远程系统强制关机,Admin帐户也删除,一个都不留 3.拒绝从网络访问这台计算机 将ID删除 4.从网络访问此计算机,Admin也可删除,如果你不使用类似3389服务 5.通过终端允许登陆 删除Remote Desktop Users --------------------- F计划.终端服务配置 打开管理工具 终端服务配置 1.打开后,点连接,右键,属性,远程控制,点不允许远程控制 2.常规,加密级别,高,在使用标准windows验证上点√! 3.网卡,将最多连接数上设置为0 4.高级,将里面的权限也删除.[我没设置] 再点服务器设置,在Active Desktop上,设置禁用,且限制每个使用一个会话 --------------------- G计划.用户和组策略 打开管理工具 计算机管理.本地用户和组.用户 删除Support_388945a0用户等等 只留下你更改好名字的adminisrator权限 计算机管理.本地用户和组.组 组.我们就不组了.分经验的(不管他.默认设置) --------------------- X计划.DIY策略[根据个人需要] 1.当登陆时间用完时自动注销用户(本地) 防止黑客密码渗透. 2.登陆屏幕上不显示上次登陆名(远程)如果开放3389服务,别人登陆时,就不会残留有你登陆的用户名.让他去猜你的用户名去吧. 3.对匿名连接的额外限制 4.禁止按 alt+crtl+del 5.允许在未登陆前关机[防止远程关机/启动、强制关机/启动] 6.只有本地登陆用户才能访问cd-rom 7.只有本地登陆用户才能访问软驱 8.取消关机原因的提示 1、打开控制面板窗口,双击“电源选项”图标,在随后出现的电源属性窗口中,进入到“高级”标签页面; 2、在该页面的“电源按钮”设置项处,将“在按下计算机电源按钮时”设置为“关机”,单击“确定”按钮,来退出设置框; 3、以后需要关机时,可以直接按下电源按键,就能直接关闭计算机了。当然,我们也能启用休眠功能键,来实现快速关机和开机; 4、要是系统中没有启用休眠模式的话,可以在控制面板窗口中,打开电源选项,进入到休眠标签页面,并在其中将“启用休眠”选项选中就可以了。 9.禁止关机事件跟踪 开始“Start -”运行“ Run -输入”gpedit.msc “,在出现的窗口的左边部分, 选择 ”计算机配置“(Computer Configuration )- ”管理模板“ (Administrative Templates)- ”系统“(System),在右边窗口双击 “Shutdown Event Tracker” 在出现的对话框中选择“禁止”(Disabled), 点击然后“确定”(OK)保存后退出这样,你将看到类似于windows 2000的关机窗口 ---------------------------------------- 【三、修改权限防止病毒或木马等破坏系统】 winxp、windows2003以上版本适合本方法. 因为目前的木马抑或是病毒都喜欢驻留在system32目录下,如果我们用命令限制system32的写入和修改权限的话 那么,它们就没有办法写在里面了.看命令 --------------------- A命令 cacls C:windowssystem32 /G administrator:R 禁止修改、写入C:windowssystem32目录 cacls C:windowssystem32 /G administrator:F 恢复修改、写入C:windowssystem32目录 呵呵,这样病毒等就进不去了,如果你觉得这个还不够安全, 还可以进行修改觉得其他危险目录,比如直接修改C盘的权限,但修改c修改、写入后,安装软件时需先把权限恢复过来才行 --------------------- B命令 cacls C: /G administrator:R 禁止修改、写入C盘 cacls C: /G administrator:F 恢复修改、写入C盘 这个方法防止病毒, 如果您觉得一些病毒防火墙消耗内存太大的话 此方法稍可解决一点希望大家喜欢这个方法^_^ --------------------- X命令 以下命令推荐给高级管理员使用[因为win版本不同,请自行修改参数] cacls %SystemRoot%system32cmd.exe /E /D IUSR_ComSpec 禁止网络用户、本地用户在命令行和gui下使用cmd cacls %SystemRoot%system32cmd.exe /E /D IUSR_Lsa 恢复网络用户、本地用户在命令行和gui下使用cmd cacls %SystemRoot%system32t /E /D IUSR_Lsa 禁止网络用户、本地用户在命令行和gui下使用t cacls %SystemRoot%system32t /E /D IUSR_Lsa 恢复网络用户、本地用户在命令行和gui下使用t cacls %SystemRoot%system32tftp32.exe /E /D IUSR_Lsa 禁止网络用户、本地用户在命令行和gui下使用tftp32.exe cacls %SystemRoot%system32tftp32.exe /E /D IUSR_Lsa 恢复网络用户、本地用户在命令行和gui下使用tftp32.exe ---------------------------------------- 【四、重要文件名加密[NTFS格式]】 此命令的用途可加密windows的密码档,QQ密码档等等^.^ 命令行方式 加密:在DOS窗口或“开始” | “运行”的命令行中输入“cipher /e 文件名(或文件夹名)”。 解密:在DOS窗口或“开始” | “运行”的命令行中输入“cipher /d 文件名(或文件夹名)”。 ---------------------------------------- 【五、修改注册表防御D.D.O.S】 在注册表HKLMSYSTEMCurrentControlSetServicesTcpipParameters中更改以下值可以帮助你防御一定强度的DoS攻击 SynAttackProtect REG_DWORD 2 EnablePMTUDiscovery REG_DWORD 0 NoNameReleaseOnDemand REG_DWORD 1 EnableDeadGWDetect REG_DWORD 0 KeepAliveTime REG_DWORD 300,000 PerformRouterDiscovery REG_DWORD 0 EnableICMPRedirects REG_DWORD 0 更多新的防御技巧请搜索其他信息, 由于本人不敢拿自己的硬盘开玩笑,所以没做实验... ... ---------------------------------------- 【六、打造更安全的防火墙】 只开放必要的端口,关闭其余端口.因为在系统安装好后缺省情况下,一般都有缺省的端口对外开放, 黑客就会利用扫描工具扫描那些端口可以利用,这对安全是一个严重威胁。 本人现将自己所知道的端口公布如下(如果觉得还有危险需要过滤的,请联系本人:OICQ 250875628 端口 协议 应用程序 21 TCP FTP 25 TCP SMTP 53 TCP DNS 80 TCP HTTP SERVER 1433 TCP SQL SERVER 5631 TCP PCANYWHERE 5632 UDP PCANYWHERE 6(非端口) IP协议 8(非端口) IP协议 那么,我们根据自己的经验,将下面的端口关闭 TCP 21 22 23 25 TCP SMTP 53 TCP DNS 80 135 epmap 138 [冲击波] 139 smb 445 1025 DCE/1ff70682-0a51-30e8-076d-740be8cee98b 1026 DCE/12345778-1234-abcd-ef00-0123456789ac 1433 TCP SQL SERVER 5631 TCP PCANYWHERE 5632 UDP PCANYWHERE 3389 4444[冲击波] 4489 UDP 67[冲击波] 137 netbios-ns 161 An SNMP Agent is running/ Default community names of the SNMP Agent 关于UDP一般只有腾讯OICQ会打开4000或者是8000端口,那么,我们只运行本机使用4000端口就行了 ---------------------------------------- 【七、保护个人隐私】 1、TT浏览器 选择用另外一款浏览器浏览网站.我推荐用TT,使用TT是有道理的. TT可以识别网页中的脚本,JAVA程序,可以很好的抵御一些恶意的脚本等等,而且TT即使被感染,你删除掉又重新安装一个就是.[TT就是腾讯的浏览器](不过有些人喜欢用MyIE,因为我使用的时间和对他的了解不是很深吧,感觉不出他对安全方面有什么优势一_一~,希望支持MyIE的朋友不要揍我,否则我会哭... ...) 2、移动“我的文档” 进入资源管理器,右击“我的文档”,选择“属性”,在“目标文件夹”选项卡中点“移动”按钮, 选择目标盘后按“确定”即可。在Windows 2003中“我的文档”已难觅芳踪,桌面、开始等处都看不到了, 建议经常使用的朋友做个快捷方式放到桌面上。 3、移动IE临时文件 进入“开始→控制面板→Internet 选项”,在“常规”选项卡的“Internet 文件”栏里点“设置”按钮, 在弹出窗体中点“移动文件夹”按钮,选择目标文件夹后,点“确定”,在弹出对话框中选择“是”, 系统会自动重新登录。点本地连接,高级,安全日志,把日志的目录更改专门分配日志的目录, 不建议是C:再重新分配日志存储值的大小,我是设置了10000KB ---------------------------------------- 【八、第三方软件的帮助】 防火墙:天网防火墙(建议)[二道贩子注:winxp以上可以考虑用系统自带的防火墙,win2000可以考虑用IPSEC,是个锻炼的机会) 杀毒软件:卡巴斯基 二道贩子后注: 现在黑客的攻击有从传统的系统漏洞转向了你的浏览器,所以要在升级一些传统漏洞补丁的同时要注意你的浏览器.
求HID协议!
USB HID报告及报告描述符简介相关讨论:
在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,
配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等。
USB报告描述符(Report Descriptor)是HID设备中的一个描述符,它是比较
复杂的一个描述符。
USB HID设备是通过报告来给传送数据的,报告有输入报告和输出报告。
输入报告是USB设备发送给主机的,例如USB鼠标将鼠标移动和鼠标点击等
信息返回给电脑,键盘将按键数据数据返回给电脑等;输出报告是主机发送
给USB设备的,例如键盘上的数字键盘锁定灯和大写字母锁定灯等。报告是
一个数据包,里面包含的是所要传送的数据。输入报告是通过中断输入端点
输入的,而输出报告有点区别,当没有中断输出端点时,可以通过控制输出
端点0发送,当有中断输出端点时,通过中断输出端点发出。
而报告描述符,是描述一个报告以及报告里面的数据是用来干什么用的。
通过它,USB HOST可以分析出报告里面的数据所表示的意思。它通过控制输入
端点0返回,主机使用获取报告描述符命令来获取报告描述符,注意这个请求
是发送到接口的,而不是到设备。一个报告描述符可以描述多个报告,不同的
报告通过报告ID来识别,报告ID在报告最前面,即第一个字节。当报告描述符中
没有规定报告ID时,报告中就没有ID字段,开始就是数据。更详细的说明请参看
USB HID协议,该协议可从下载。
USB报告描述符可以通过使用HID Descriptor tool来生成,这个工具可以
到下载,为了方便大家,我顺便上传了一份。
下面通过由HID Descriptor tool生成的USB鼠标和USB键盘来说明一下报告
描述符和报告。
code char KeyBoardReportDescriptor[63] = {
//表示用途页为通用桌面设备
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
//表示用途为键盘
0x09, 0x06, // USAGE (Keyboard)
//表示应用集合,必须要以END_COLLECTION来结束它,见最后的END_COLLECTION
0xa1, 0x01, // COLLECTION (Application)
//表示用途页为按键
0x05, 0x07, // USAGE_PAGE (Keyboard)
//用途最小值,这里为左ctrl键
0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
//用途最大值,这里为右GUI键,即window键
0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
//逻辑最小值为0
0x15, 0x00, // LOGICAL_MINIMUM (0)
//逻辑最大值为1
0x25, 0x01, // LOGICAL_MAXIMUM (1)
//报告大小(即这个字段的宽度)为1bit,所以前面的逻辑最小值为0,逻辑最大值为1
0x75, 0x01, // REPORT_SIZE (1)
//报告的个数为8,即总共有8个bits
0x95, 0x08, // REPORT_COUNT (8)
//输入用,变量,值,绝对值。像键盘这类一般报告绝对值,
//而鼠标移动这样的则报告相对值,表示鼠标移动多少
0x81, 0x02, // INPUT (Data,Var,Abs)
//上面这这几项描述了一个输入用的字段,总共为8个bits,每个bit表示一个按键
//分别从左ctrl键到右GUI键。这8个bits刚好构成一个字节,它位于报告的第一个字节。
//它的最低位,即bit-0对应着左ctrl键,如果返回的数据该位为1,则表示左ctrl键被按下,
//否则,左ctrl键没有按下。最高位,即bit-7表示右GUI键的按下情况。中间的几个位,
//需要根据HID协议中规定的用途页表(HID Usage Tables)来确定。这里通常用来表示
//特殊键,例如ctrl,shift,del键等
//这样的数据段个数为1
0x95, 0x01, // REPORT_COUNT (1)
//每个段长度为8bits
0x75, 0x08, // REPORT_SIZE (8)
//输入用,常量,值,绝对值
0x81, 0x03, // INPUT (Cnst,Var,Abs)
//上面这8个bit是常量,设备必须返回0
//这样的数据段个数为5
0x95, 0x05, // REPORT_COUNT (5)
//每个段大小为1bit
0x75, 0x01, // REPORT_SIZE (1)
//用途是LED,即用来控制键盘上的LED用的,因此下面会说明它是输出用
0x05, 0x08, // USAGE_PAGE (LEDs)
//用途最小值是Num Lock,即数字键锁定灯
0x19, 0x01, // USAGE_MINIMUM (Num Lock)
//用途最大值是Kana,这个是什么灯我也不清楚^_^
0x29, 0x05, // USAGE_MAXIMUM (Kana)
//如前面所说,这个字段是输出用的,用来控制LED。变量,值,绝对值。
//1表示灯亮,0表示灯灭
0x91, 0x02, // OUTPUT (Data,Var,Abs)
//这样的数据段个数为1
0x95, 0x01, // REPORT_COUNT (1)
//每个段大小为3bits
0x75, 0x03, // REPORT_SIZE (3)
//输出用,常量,值,绝对
0x91, 0x03, // OUTPUT (Cnst,Var,Abs)
//由于要按字节对齐,而前面控制LED的只用了5个bit,
//所以后面需要附加3个不用bit,设置为常量。
//报告个数为6
0x95, 0x06, // REPORT_COUNT (6)
//每个段大小为8bits
0x75, 0x08, // REPORT_SIZE (8)
//逻辑最小值0
0x15, 0x00, // LOGICAL_MINIMUM (0)
//逻辑最大值255
0x25, 0xFF, // LOGICAL_MAXIMUM (255)
//用途页为按键
0x05, 0x07, // USAGE_PAGE (Keyboard)
//使用最小值为0
0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
//使用最大值为0x65
0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
//输入用,变量,数组,绝对值
0x81, 0x00, // INPUT (Data,Ary,Abs)
//以上定义了6个8bit宽的数组,每个8bit(即一个字节)用来表示一个按键,所以可以同时
//有6个按键按下。没有按键按下时,全部返回0。如果按下的键太多,导致键盘扫描系统
//无法区分按键时,则全部返回0x01,即6个0x01。如果有一个键按下,则这6个字节中的第一
//个字节为相应的键值(具体的值参看HID Usage Tables),如果两个键按下,则第1、2两个
//字节分别为相应的键值,以次类推。
//关集合,跟上面的对应
0xc0 // END_COLLECTION
};
通过上面的分析,我们知道这个报告中只有一个报告,所以没有报告ID,
因此返回的都是实际使用的数据。总共有8字节输入,1字节输出。其中输入的
第一字节用来表示特殊按键,第二字节保留,后面的六字节为普通按键。如果
只有左ctrl键按下,则返回01 00 00 00 00 00 00 00(十六进制),如果
只有数字键1 按下,则返回00 00 59 00 00 00 00 00,如果数字
键1 和2 同时按下,则返回00 00 59 5A 00 00 00 00,如果
再按下左shift 键,则返回02 00 59 5A 00 00 00 00,
然后再释放1 键,则返回02 00 5A 00 00 00 00 00,
然后全部按键释放,则返回00 00 00 00 00 00 00 00。
这些数据(即报告)都是通过中断端点返回的。当按下Num Lock键时,PC会发送
输出报告,从报告描述符中我们知道,Num Lock的LED对应着输出报告的最低位,
当数字小键盘打开时,输出xxxxxxx1(二进制,打x的由其它的LED状态决定);
当数字小键盘关闭时,输出xxxxxxx0(同前)。取出最低位就可以控制数字键锁定LED了。
下面这个报告描述符是USB鼠标报告描述符,比起键盘的来说要简单些。
它描述了4个字节,第一个字节表示按键,第二个字节表示x轴(即鼠标左右移动,
0表示不动,正值表示往右移,负值表示往左移),第三个字节表示y轴(即鼠标
上下移动,0表示不动,正值表示往下移动,负值表示往上移动),第四个字节
表示鼠标滚轮(正值为往上滚动,负值为往下滚动)。
code char MouseReportDescriptor[52] = {
//通用桌面设备
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
//鼠标
0x09, 0x02, // USAGE (Mouse)
//集合
0xa1, 0x01, // COLLECTION (Application)
//指针设备
0x09, 0x01, // USAGE (Pointer)
//集合
0xa1, 0x00, // COLLECTION (Physical)
//按键
0x05, 0x09, // USAGE_PAGE (Button)
//使用最小值1
0x19, 0x01, // USAGE_MINIMUM (Button 1)
//使用最大值3。1表示左键,2表示右键,3表示中键
0x29, 0x03, // USAGE_MAXIMUM (Button 3)
//逻辑最小值0
0x15, 0x00, // LOGICAL_MINIMUM (0)
//逻辑最大值1
0x25, 0x01, // LOGICAL_MAXIMUM (1)
//数量为3
0x95, 0x03, // REPORT_COUNT (3)
//大小为1bit
0x75, 0x01, // REPORT_SIZE (1)
//输入,变量,数值,绝对值
//以上3个bit分别表示鼠标的三个按键情况,最低位(bit-0)为左键
//bit-1为右键,bit-2为中键,按下时对应的位值为1,释放时对应的值为0
0x81, 0x02, // INPUT (Data,Var,Abs)
//填充5个bit,补足一个字节
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x05, // REPORT_SIZE (5)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
//用途页为通用桌面
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
//用途为X
0x09, 0x30, // USAGE (X)
//用途为Y
0x09, 0x31, // USAGE (Y)
//用途为滚轮
0x09, 0x38, // USAGE (Wheel)
//逻辑最小值为-127
0x15, 0x81, // LOGICAL_MINIMUM (-127)
//逻辑最大值为+127
0x25, 0x7f, // LOGICAL_MAXIMUM (127)
//大小为8个bits
0x75, 0x08, // REPORT_SIZE (8)
//数量为3个,即分别代表x,y,滚轮
0x95, 0x03, // REPORT_COUNT (3)
//输入,变量,值,相对值
0x81, 0x06, // INPUT (Data,Var,Rel)
//关集合
0xc0, // END_COLLECTION
0xc0 // END_COLLECTION
};
通过对上面的报告分析,我们知道报告返回4个字节,没有报告ID。如果鼠标左键按下,
则返回01 00 00 00(十六进制值),如果右键按下,则返回02 00 00 00,如果中键按下,
则返回04 00 00 00,如果三个键同时按下,则返回07 00 00 00。如果鼠标往右移动则
第二字节返回正值,值越大移动速度越快。其它的类推。
这里只对报告描述符做一个简单的介绍,更详细的资料请参看USB HID协议以及HID Usage Tables,
可以从下载。
根据这个实际设计的USB键盘和USB鼠标:
USB键盘:
USB鼠标: