2014-04-28 1 views
1

나의 목표는 usb를 읽고 쓰는 것이다.winhex와 같은 USB (디스크)를 직접 읽거나 쓰는 방법은 무엇입니까?

열고 나는 CreateFile이이 올바른지 그리고 ReadFile을했다 궁금해 내가 WINAPI

아래

와 비주얼 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); 

입니다 '프로그램'과 같은 USB 로우 - 레벨을 읽을 수 있어야합니다

우선

ReadFile()의 GetLastError()가 잘못된 입력을 의미하는 87이었습니다.

무엇이 잘못 되었습니까 ??

나는 MSDN 여러 번 언급 ...하지만 모든 페이지는이 문제 ....

나는 무엇을 알아야 해결되지? 고쳐?

+0

무언가 잘못되었다는 것을 이미 알고있는 경우에만'GetLastError'를 호출해야합니다 ('ReadFile'의 반환 값을 확인하십시오). 성공적인 작업으로 반드시 마지막 오류가 변경되는 것은 아닙니다. – molbdnilo

+0

나는 귀하의 의견을 보았습니다. 그러나 ReadFile의 GetLastError 만 87을 반환합니다 ..... 무엇이 잘못 되었습니까 ?? – user1829967

+0

'ReadFile'가'FALSE'를 반환하면'GetLastError()'만 호출했는지 확인 했습니까? 나는를 CreateFile을 호출 할 때 – molbdnilo

답변

2

버퍼 크기는 N * (드라이브의 섹터 크기)와 같아야합니다. 여기서 N은 DWORD 값입니다. 섹터 크기는 DeviceIoControl (Handle, IOCTL_DISK_GET_DRIVE_GEOMETRY, ..., DISK_GEOMETRY, ...)을 통해 수신 할 수 있습니다.

+0

나 오류는 ReadFile을 false를 반환 보여 ReadFile을 – user1829967

관련 문제