我编写了一个Hid库,可以对Hid USB设备进行写入和读取 . 它运作良好 . 我使用CreateFile创建一个像这样的安全句柄:

_ReadSafeFileHandle = APICalls.CreateFile(DeviceInformation.DevicePath, APICalls.GenericRead | APICalls.GenericWrite, APICalls.FileShareRead | APICalls.FileShareWrite, IntPtr.Zero, APICalls.OpenExisting, 0, IntPtr.Zero);

https://github.com/MelbourneDeveloper/Hid.Net/blob/8ca0d0837153994f4f5c23be3c6adb502a4f68af/Hid.Net/Windows/WindowsHIDDevice.cs#L152

我可以用这些流读/写:

_ReadFileStream = new FileStream(_ReadSafeFileHandle, FileAccess.ReadWrite, _HidCollectionCapabilities.OutputReportByteLength, false);
_WriteFileStream = new FileStream(_WriteSafeFileHandle, FileAccess.ReadWrite, _HidCollectionCapabilities.InputReportByteLength, false);

但是,我连接的设备已从Hid访问切换到香草USB . 我已经切换到通过其USB ID而不是其Hid Id访问设备 . 现在,当我尝试写入流时,我得到一个错误,说“功能不正确” . 我无法写入USB设备 . 玩了一会儿后,我有时能够在没有错误的情况下写入流,但我确信没有USB传输正在进行 . 我正在使用Usbpcap来嗅探转移,它根本看不到任何转移 .

这是代码:https://github.com/MelbourneDeveloper/Hid.Net/blob/WindowsUsbProvider/Hid.Net/Windows/WindowsDeviceBase.cs

Do you have advice on the differences between talking to a vanilla USB device vs. a Hid device?

_WriteFileStream.CanWrite返回true . 如果我在CreateFile调用中放置了错误的设备路径,则会出现错误 .