我有一个使用USB总线与USB设备通信的项目。 该设备具有自己的驱动程序和通讯协议Guid。 它的指导思想是:“安装USB驱动程序后,任何程序都可以使用'CreateFile'与设备进行通信, Windows系统常用的功能“ ReadFile”和“ WriteFile”。 因此,我按照说明进行操作,并且Creatfile()函数运行得很好。 我的问题是Writefile()和ReadFile函数。 它始终显示此错误3758100489: 在guid书中有以下注释:所有消息均使用Intel样式的字节顺序,其中大于一个字节的字段存储在内存中,因此 最低有效部分在最低地址中。 所以我也尝试使用函数来转换为Endien小码 我尝试在Creatfile()和Writefile()中使用重叠的参数,但是仍然存在相同的问题。 我也在GUID的帮助下尝试使用多种形式的消息包
有人可以帮助我吗?非常感谢你
秒 USB路径正确100%
答案 0 :(得分:1)
您的十六进制错误代码是0xE0001009
。必须先锁定USB设备,然后才能执行操作。我不确定,无法测试,但是我认为您需要此功能DeviceIoControl才能首先锁定该卷。
在WriteFile文档中已提及
如果满足以下条件之一,则在磁盘句柄上的写操作将成功:
此article可以帮助进行锁定。
答案 1 :(得分:0)
尝试获取有关3758100489
的更多信息。
请参见Retrieving the Last-Error Code或尝试构建并运行以下程序,该程序应向您显示错误3758100489
的可读描述:
#include <windows.h>
#include <strsafe.h>
void main()
{
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
//DWORD dw = GetLastError();
DWORD dw = 3758100489;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
// Display the error message and exit the process
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
lstrlen((LPCTSTR)lpMsgBuf) );
StringCchPrintf((LPTSTR)lpDisplayBuf,
LocalSize(lpDisplayBuf) / sizeof(TCHAR),
TEXT("failed with error %d: %s"),
dw, lpMsgBuf);
MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK);
LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
}