从 .pcap 文件获取 HID 报告描述符

Get HID report Descriptor from .pcap file

我正在 windows 上构建一个 C++ 应用程序,它应该重新解释由 Wireshark and USBPCap 捕获的 USB 数据流存储到 .pcap 文件中。我目前无法获取 HID Report descriptor,因此我将能够解释鼠标发送到主机的数据。

到目前为止,站点 USB Made Simple 是一个很好的信息来源,我还阅读了大量关于如何编写自己的 HID 报告描述符的教程,以便理解它们。但我需要的是从当前数据流中检索一个。

根据 wireshark,鼠标正在向我发送 DEVICE DESCRIPTOR (example here), after that it sends CONFIGURATION DESCRIPTOR with its INTERFACE, HID and ENDPOINT DESCRIPTORS (example here)。

根据HID DESCRIPTORwDescriptorLength的值,应该有长度为56的HID REPORT DESCRIPTOR,但是没有。在此之后只有 ENDPOINT DESCRIPTOR 的长度为 7,另一个 INTERFACEHID DESCRIPTOR 的总长度为 18.

有什么方法可以从中得到 HID REPORT DESCRIPTOR 还是我遗漏了什么?

感谢您的任何意见。

您应该能够使用 Win32 HID-parse 实用程序来执行此操作:

https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/preparsed-data

查看此处的使用示例,其中使用 WM_INPUT 访问 HID 报告: https://github.com/supersmo/Using-Raw-Input-API-to-Process-Joystick-Input

...特别是这些方法:

// determine buffer size required
CHECK( GetRawInputDeviceInfo(pRawInput->header.hDevice, RIDI_PREPARSEDDATA, NULL, &bufferSize) == 0 );

// allocate buffer
CHECK( pPreparsedData = (PHIDP_PREPARSED_DATA)HeapAlloc(hHeap, 0, bufferSize) );

// determine the usages etc
CHECK( (int)GetRawInputDeviceInfo(pRawInput->header.hDevice, RIDI_PREPARSEDDATA, pPreparsedData, &bufferSize) >= 0 );

// Button caps
CHECK( HidP_GetCaps(pPreparsedData, &Caps) == HIDP_STATUS_SUCCESS )

// Value caps
CHECK( pValueCaps = (PHIDP_VALUE_CAPS)HeapAlloc(hHeap, 0, sizeof(HIDP_VALUE_CAPS) * Caps.NumberInputValueCaps) );
capsLength = Caps.NumberInputValueCaps;
CHECK( HidP_GetValueCaps(HidP_Input, pValueCaps, &capsLength, pPreparsedData) == HIDP_STATUS_SUCCESS )

另一件要看的事情是 ReactOS hidusb source 可以在这里找到(今天): https://doxygen.reactos.org/dd/d06/hidusb_8c_source.html

...特别注意例如HidUsb_GetReportDescriptor

希望这能为您指明正确的方向。

Is there any way to get HID REPORT DESCRIPTOR from this or am I missing something out ?

不了解你,但对我来说 Wireshark/USBPCap 似乎缺少了一些东西。 如果您将它与我的示例进行比较,您的部分似乎缺少带有 USBHID 协议的条目。

请检查您的 Wireshark 版本,或者您是否没有在捕获配置中启用任何过滤器。

点击USBP​​cap界面左侧的'gear'图标可以查看当前设置:

重要说明: 尽管检查了“注入已连接的设备描述符...”,但它对我来说并不像我期望的那样工作,要捕获报告描述符,您必须重新连接设备:拔下 USB-HID 设备 -> 开始捕获 ->插入 USB 设备 -> 现在您可以停止捕获了。