Я пытаюсь работать с функцией ReadFile. Вот мой код:Функция ReadFile возвращает ERROR_INVALID_PARAMETER
#define BUFFERSIZE 5
int main(int argc, char* argv[])
{
OVERLAPPED overlapIn = {};
HANDLE tHandle;
char buf[BUFFERSIZE] = {};
DWORD lpNumberOfBytesRead;
tHandle = CreateFile(
L"\\\\.\\D:",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (tHandle == INVALID_HANDLE_VALUE)
{
DWORD error = GetLastError();
assert(0);
}
if (ReadFile(tHandle, &buf, BUFFERSIZE - 1, &lpNumberOfBytesRead, NULL) == 0)
{
int error = GetLastError();
printf("Terminal failure: Unable to read from disk.\n GetLastError=%d\n", error);
CloseHandle(tHandle);
return 1;
}
Функция GetLastError возвращает код 87, который ERROR_INVALID_PARAMETER.
Понятно, что один из параметров неверен, но я понятия не имею, какой из них, поскольку я пытался делать все, как это написано в документации.
Я полагаю, вы получите ошибку после того, как 1-й 'if'. Вы не можете читать из дисковода просто так. –
Нет, я не говорю о функции ReadFile. И да, я могу читать с такого диска. –
Ошибка BUFFERSIZE-1. Вы не можете рассчитывать на кеш файловой системы, когда читаете необработанные данные с диска. Поддерживаемое выравнивание зависит от файловой системы, 4096 - хороший круглый номер. Вы также должны указать FILE_SHARE_WRITE в вызове CreateFile(). И при создании CreateFile() вам придется делать гораздо больше шума, assert() не режет. –