ReadFile()返回false,GetLastError返回ERROR_INVALID_PARAMETER

时间:2016-01-27 04:01:47

标签: readfile usb-drive

我尝试使用ReadFile()访问外部USB 3.0驱动器,但它在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驱动器,我有什么不同的做法吗?

有谁知道无效参数是什么?

感谢。

1 个答案:

答案 0 :(得分:0)

原来我的RPD_SECTOR_SIZE设置为512字节,这适用于我的其他驱动器,但不适用于USB 3.0,显然有4KB的扇区大小。