2014-04-28 38 views
1

我的目標是讀取/寫入USB。如何直接讀/寫usb(磁盤)像winhex?

首先必須打開和讀取USB低-level像 '程序'

我使用的Visual C++與WINAPI

下面

是我的測試代碼

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很多次......但任何頁面不解決這個問題....

我應該怎麼知道的?修理它?

+0

如果你已經知道出了什麼問題(檢查'ReadFile'的返回值),你應該只調用'GetLastError'。成功的操作不一定會改變最後的錯誤。我看到您的評論後,嘗試去做 – molbdnilo

+0

。 但是隻有ReadFile的GetLastError返回87 ..... 什麼是錯誤? – user1829967

+0

如果'ReadFile'返回'FALSE',你確定只調用GetLastError()嗎? – molbdnilo

回答

2

緩衝區的大小必須等於N *(驅動器的扇區大小),其中N是DWORD值。使用DeviceIoControl(Handle,IOCTL_DISK_GET_DRIVE_GEOMETRY,...,DISK_GEOMETRY,...)可以接收扇區大小。

+0

哦,非常感謝您的回覆真的幫助我很多!!!!!!!!!!!!! – user1829967