USB设备

时间:2018-08-13 08:28:06

标签: windows api x86

我有一个使用USB总线与USB设备通信的项目。 该设备具有自己的驱动程序和通讯协议Guid。 它的指导思想是:“安装USB驱动程序后,任何程序都可以使用'CreateFile'与设备进行通信, Windows系统常用的功能“ ReadFile”和“ WriteFile”。 因此,我按照说明进行操作,并且Creatfile()函数运行得很好。 我的问题是Writefile()和ReadFile函数。 它始终显示此错误3758100489: 在guid书中有以下注释:所有消息均使用Intel样式的字节顺序,其中大于一个字节的字段存储在内存中,因此 最低有效部分在最低地址中。 所以我也尝试使用函数来转换为Endien小码 我尝试在Creatfile()和Writefile()中使用重叠的参数,但是仍然存在相同的问题。 我也在GUID的帮助下尝试使用多种形式的消息包

有人可以帮助我吗?非常感谢你

秒 USB路径正确100%

2 个答案:

答案 0 :(得分:1)

您的十六进制错误代码是0xE0001009。必须先锁定USB设备,然后才能执行操作。我不确定,无法测试,但是我认为您需要此功能DeviceIoControl才能首先锁定该卷。

WriteFile文档中已提及

如果满足以下条件之一,则在磁盘句柄上的写操作将成功:

  • 要写入的扇区不在卷的范围之内。
  • 要写入的扇区属于已装入的卷,但是您 通过使用明确锁定或卸载了该卷 FSCTL_LOCK_VOLUME或FSCTL_DISMOUNT_VOLUME。

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);
}