2016-01-27 2 views
1

Я пытаюсь получить доступ к внешнему диску USB 3.0 с помощью ReadFile(), но он продолжает возвращать false в ReadFile, а GetLastError() возвращает ERROR_INVALID_PARAMETER. Ниже мой фрагмент кода:ReadFile() возвращает false с возвратом GetLastError ERROR_INVALID_PARAMETER

#define RPD_SECTOR_SIZE 512 
HANDLE hDevice = 0; 
char driveName[256]; 
BYTE *pData; 
DWORD len; 
bool rv; 
int errCode; 
sprintf(driveName, "\\\\.\\PhysicalDrive1"); 
hDevice = CreateFile (driveName, 
         GENERIC_READ | GENERIC_WRITE, 
         FILE_SHARE_READ | FILE_SHARE_WRITE, 
         NULL, 
         OPEN_EXISTING, 
         FILE_FLAG_NO_BUFFERING, 
         NULL); 
pData = (BYTE *)VirtualAlloc(NULL, RPD_SECTOR_SIZE, MEM_COMMIT, PAGE_READWRITE); 
if (pData == NULL) { 
    return RPD_MEMORY_ALLOCATION_ERROR; 
} 
rv = ReadFile(hDevice, pData, RPD_SECTOR_SIZE, &len, NULL); 
if (!rv) { 
    errCode = GetLastError(); 
} 

Самое смешное, что код работает отлично для другого USB 2.0 диск. Есть ли что-то, что я должен делать по-другому для доступа к дискам USB 3.0?

Кто-нибудь знает, что является недопустимым параметром?

Спасибо.

ответ

0

Оказывается, мой RPD_SECTOR_SIZE был установлен в 512 байт, и это работало с моими другими дисками, но не с USB 3.0, которые, по-видимому, имеют размеры сектора 4 КБ.

Смежные вопросы