如何像winhex一样直接读/写usb(磁盘)?

时间:2014-04-28 11:21:25

标签: c++ winapi

我的目标是读/写usb。

首先必须打开并阅读usb低级别,如'program'

我在winAPI中使用了visual c ++

下面是我的测试代码

char path[64];
sprintf(path,"\\\\.\\%c:",volume);//

/////MOST case, user's input is F or G ......
HANDLE usb;

usb=CreateFile(TEXT(path),
               GENERIC_ALL,//
               0,
               NULL,
               OPEN_EXISTING,
               FILE_ATTRIBUTE_NORMAL, //serail I/O
               NULL);

if(usb==INVALID_HANDLE_VALUE) cout<<"fail to createfile()"<<endl;

cout<<usb<<endl;    

char buf[128];

DWORD dwBytesRead=0;

ReadFile(usb,buf,sizeof(buf),&dwBytesRead,NULL);
cout<<buf<<endl;
cout<<GetLastError()<<endl;

CloseHandle(usb);

我想知道CreateFile是否正确和ReadFile

ReadFile()的GetLastError()为87表示无效输入...

有什么不对?

我多次引用MSDN ......但是任何页面都无法解决这个问题....

我应该知道什么?解决它?

1 个答案:

答案 0 :(得分:2)

缓冲区的大小必须等于N *(驱动器的扇区大小),其中N是DWORD值。可以使用DeviceIoControl(Handle,IOCTL_DISK_GET_DRIVE_GEOMETRY,...,DISK_GEOMETRY,...)接收扇区大小。