应用层调用通过hid.dll调用ReadFile读取自定久HID输入报告数据丢数的问题

小问号 2022-11-08 17:59:02 编辑

ReadFile是通过读取驱动中从固件中读取的HID数据队列来实现的,也就是说驱动将HID的数据读到一个队列中缓存,这时无论应用层是否调用ReadFile,都会在一直读数据缓存的。不过这个缓存的个数有个限制,在Windows驱动中限制为32,如果固件中发送的过快,而应用层读的很慢,会丢数据。这时可以通过HidD_SetNumInputBuffers来设置。可最大设置为512。而当前的可通过HidD_GetNumInputBuffers来获取。

官方解释可见:https://learn.microsoft.com/zh-cn/windows-hardware/drivers/ddi/hidsdi/nf-hidsdi-hidd_setnuminputbuffers