Hid.dll报告缓存数量的设置与获取
2022-05-25
274
0
HidD_GetNumInputBuffers和HidD_SetNumInputBuffers分别用于从HID设备中读取的报告内容的最大缓冲数量.
BOOLEAN HidD_GetNumInputBuffers(
[in] HANDLE HidDeviceObject,
[out] PULONG NumberBuffers
);
BOOLEAN HidD_SetNumInputBuffers(
[in] HANDLE HidDeviceObject,
[in] ULONG NumberBuffers
);
以上两个函数分别通过IOCTL_SET_NUM_DEVICE_INPUT_BUFFERS和IOCTL_GET_NUM_DEVICE_INPUT_BUFFERS实现,代码太简单了,就是读取或设置hidclass.sys的中一个变量。
报告缓冲区大小一般用于比如我们的应用于不能急及时的读取HID返回的报告内容,这里可以通过HidD_SetNumInputBuffers将驱动中缓存的HID报告缓存个数设置在一些,以防新的HID报告数据来时,而旧的数据并未读取从而导致旧数据在驱动层的丢弃。
在hid设备通过应用层打开时,会使用默认的值来设置此值来填充,并且这个值与当前的句柄相关的。
默认的值为32
题外话:其实查看源代码,不但可以帮助我们更好的理解整个USB HID体系的实现机制,更重要的是我们可以学习别人优秀的编程思想,设计思路,这特别有助于我们以后的驱动程序设计。比如我们可以类推到UVC,UAC设备等,通过开避这种特有的接口来实现数据缓冲区的管理,甚至我们在设计进也可以直接使用该IOCTL,这样在应用层就可以直接使用HidD_SetNumInputBuffers这些之类的函数。所以这个时候函数名都不重要了,如果内核驱动搞的好,我们甚至可以用ReadFile来打开文件。
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936