Winapi 调试USB读取

Winapi 调试USB读取,winapi,usb,ntdll,deviceiocontrol,Winapi,Usb,Ntdll,Deviceiocontrol,我正在调试一些使用第三方64位DLL访问自定义USB设备的代码。我的环境是Windows 8.1 x64上的Microsoft Visual Studio 2012 根据一份不完整且不可靠的文档,DLL应该发出USBDEVFS_控件ioctl,以从连接的USB设备读取1个字节。定义包括 ctrl.bRequestType = bmRequestType; ctrl.bRequest = bRequest; ctrl.wValue = wValue; ctrl.wIndex

我正在调试一些使用第三方64位DLL访问自定义USB设备的代码。我的环境是Windows 8.1 x64上的Microsoft Visual Studio 2012

根据一份不完整且不可靠的文档,DLL应该发出USBDEVFS_控件ioctl,以从连接的USB设备读取1个字节。定义包括

ctrl.bRequestType = bmRequestType;
ctrl.bRequest     = bRequest;
ctrl.wValue       = wValue;
ctrl.wIndex       = wIndex;
ctrl.data         = ByteArray;
ctrl.wLength      = 64;
ctrl.timeout      = 1000;
这里
bmRequestType
bRequest
wValue
wIndex
是设备制造商提供的常量,
ByteArray
是包含特定命令的
uint8\u t[64]
缓冲区

DLL接受特定于应用程序的参数,将它们打包到
ByteArray
,并调用
ksproxy.ax
->
Kernelbase.DLL
->
ntdll.DLL
。我在用户模式下看到的最后一个反汇编是

mov     r10,rcx
mov     eax,47h
syscall
ret
根据文档,通过逐步调试,我可以很容易地看到
ByteArray
的构造与预期完全一致。但是我找不到这个结构,或者它的Windows等价物

具体而言,我们怀疑文档中指定的
wIndex
值适用于较旧版本的硬件,并且Windows DLL实际使用的是
0x0400
而不是
0x0402

任何提示(包括硬件或软件USB嗅探器、仿真器等)我们如何尝试验证此未签名短路将不胜感激

更新


阅读和阅读。看起来这些工具与Windows 8.1 x64不兼容。

在Xbox操作系统和外围设备上工作时,我们始终使用USB捕获硬件,它作为中间人设备工作(看起来它已被协议分析器取代)

流量捕获功能在诊断硬件和软件错误(批量、HID、isoch)时必不可少

样本捕获视图(来自手册):


我更喜欢这个USB硬件分析器,用于嗅探数据包、附加解码,而且您自己也有一个很好的工具,可以轻松地反向工程和调试USB。我喜欢。USB设备文件系统(USBDEVFS)是Linux的东西,所以我不明白您为什么要为一个Windows软件谈论它。如果您拥有的此设备使用winusb.sys作为驱动程序,则第三方DLL应调用setupapi.DLL和winusb.DLL。@DavidGrayson:我在调试器中没有看到对
setupapi.DLL
winusb.DLL
的调用;相反,我可以跟踪
ksproxy.ax
->
Kernelbase.dll
->
ntdll.dll
。你是对的,USBEVFS不适用于Windows。但是我希望Linux
USBDEVFS\u CONTROL
ioctl(
0xC0185500
)会有一个与Windows相当的版本。如果你在设备管理器中查看这个东西的属性,你会在列表中看到哪些驱动程序?它是说winusb.sys还是别的什么?