写入USB时,WriteFile失败,错误代码为87

时间:2014-12-04 11:18:15

标签: windows usb

我正在尝试使用Windows 7上的USB设备进行通信。在找到使用供应商和产品ID的设备后,我使用以下命令打开它

dev->device_handle = CreateFile( path, (GENERIC_WRITE | GENERIC_READ), 
                    (FILE_SHARE_READ|FILE_SHARE_WRITE),
                    (LPSECURITY_ATTRIBUTES)NULL, 
                    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);

然后我使用

写入设备
res = WriteFile(dev->device_handle, buf, length, &bytes_written, &ol); 

长度为64。

我的设备可以在此界面中读取和写入64字节的数据,这已在Linux上测试并在Windows中使用其他工具(我没有该工具的来源)。

WriteFile函数给出错误代码87.这是无效参数。

请有人指出我犯的错误。

P.S。我已经分析了这个问题 WriteFile returning error code 87

我制作了一些调试日志

--------------------------------------------------
Before write call
dev_handle:152
buf:2293463
length:65
bytes_written:0
overlap:0
--------------------------------------------------
--------------------------------------------------
After write call
dev_handle:152
buf:2293463
length:65
bytes_written:0
overlap:259
--------------------------------------------------
Last Error: 87

1 个答案:

答案 0 :(得分:2)

嗯,有5个参数:

    如果dev->device_handle失败,则
  1. INVALID_HANDLE_VALUE可能为CreateFile
  2. buf不应该是NULL
  3. length无法检查,因此不会出现问题。
  4. &bytes_written毫无意义(使用GetOverlappedResult)。
  5. &lo必须包含有效的偏移和事件。此外,所有其他字段必须归零。
  6. 缺乏上下文,我们不能对任何特定参数进行错误处理。我先检查一下&bytes_written,因为这对我来说是最明显的嫌疑。