ReadFile() returns false GetLastError 返回 ERROR_INVALID_PARAMETER
ReadFile() returns false with GetLastError returning ERROR_INVALID_PARAMETER
我正在尝试使用 ReadFile() 访问外部 USB 3.0 驱动器,但它在 ReadFile 和 GetLastError() 上一直返回 false returns 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 驱动器?
有人知道无效参数是什么吗?
谢谢。
原来我的 RPD_SECTOR_SIZE 被设置为 512 字节,这适用于我的其他驱动器,但不适用于 USB 3.0 驱动器,它显然有 4KB 扇区大小。
我正在尝试使用 ReadFile() 访问外部 USB 3.0 驱动器,但它在 ReadFile 和 GetLastError() 上一直返回 false returns 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 驱动器?
有人知道无效参数是什么吗?
谢谢。
原来我的 RPD_SECTOR_SIZE 被设置为 512 字节,这适用于我的其他驱动器,但不适用于 USB 3.0 驱动器,它显然有 4KB 扇区大小。