访问USB 大容量存储设备解决办法

访问USB 大容量存储设备
我想实现跟USB存储设备之间的通信,但是遇到了一些问题,比较棘手,希望指教下:


hDevHandle = CreateFile(dwDevicePath,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
NULL);
 

获得句柄后,

BOOL bResult;
    DWORD nBytesWritten;
    OVERLAPPED gOverlapped;
DWORD dwResult;

OVERLAPPED writeOS;

    dwResult = MPUSB_FAIL;

    Sleep(50);

// set up overlapped structure fields
memset(&gOverlapped,0,sizeof(gOverlapped));
gOverlapped.Internal     = 0;
    gOverlapped.InternalHigh = 0;
    gOverlapped.Offset       = 0;
gOverlapped.OffsetHigh   = 0;
gOverlapped.hEvent       = CreateEvent(NULL, TRUE, FALSE, NULL);


    if(pLength != NULL)*pLength = 0;

    // attempt an asynchronous read operation
bResult = WriteFile(hDevHandle,pData,dwLen,&nBytesWritten,&gOverlapped);

DWORD err = GetLastError();


在获取错误代码的时候 发现err一直为87 ,无效的参数,设备也打开成功了,就是写不了数据,是哪里出错了呢?
------解决方案--------------------
#include "windows.h"
#include "tchar.h"
#include "iostream.h"

char * DispDriveType(int n)
{
 switch(n)//关于磁盘类型的定义,在 winbase.h 中定义
{
case 0://DRIVE_UNKNOWN
   return "未知磁盘";
   break;
 case 1://DRIVE_NO_ROOT_DIR 无法找到根目录
   return "磁盘不存在";
   break;
 case 2://DRIVE_REMOVABLE 可移动驱动器
   return "可移动磁盘";
   break;
 case 3://DRIVE_FIXED 固定磁盘驱动器:本地硬盘或移动硬盘
   return "本地磁盘";
   break;
 case 4://DRIVE_REMOTE
   return "网络驱动器";
   break;
 case 5://DRIVE_CDROM
   return "CD/DVD_ROM";
   break;
 case 6://DRIVE_RAMDISK
   return "随机存取磁盘";
   break;
 }
}
void main()
{
 TCHAR a[256];
 DWORD len=GetLogicalDriveStrings(sizeof(a)/sizeof(TCHAR),a);
 cout<<"磁盘符号"<<"\t"<<"磁盘类型"<<endl;
 for(TCHAR *s=a;*s;s+=_tcslen(s)+1)
 {
   cout<<s<<"\t\t"<<DispDriveType(GetDriveType(s))<<endl;
 }
 cin.get();
}

用这个得到可移动磁盘盘符,然后按楼上的用盘符操作