Как использовать ReadFile () в C ++ для чтения байтов длиной не кратной 512 - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь прочитать сырые байты на диске. Но функция ReadFile () позволяет только читать байты длиной 512 или ее кратные. Я не могу прочитать байты длиной 10, 180, 1000 и т. Д. c.

DWORD NumberOfBytesRead=0;

ReadFile(hDevice, nullbuffer, (DWORD)512, &NumberOfBytesRead, (LPOVERLAPPED)NULL); //works

ReadFile(hDevice, nullbuffer, (DWORD)1024, &NumberOfBytesRead, (LPOVERLAPPED)NULL); //works

ReadFile(hDevice, nullbuffer, (DWORD)1000, &NumberOfBytesRead, (LPOVERLAPPED)NULL); //error 87

ReadFile(hDevice, nullbuffer, (DWORD)300, &NumberOfBytesRead, (LPOVERLAPPED)NULL);  //error 87

Есть ли способ преодолеть это?

1 Ответ

2 голосов
/ 31 марта 2020

Правила прямого доступа к устройству требуют, чтобы вы считывали выровненные блоки данных. Это не то, что вы можете изменить. Это жесткое правило, которому вы должны следовать.

Учитывая это правило, вы должны читать в буфер, кратный требуемому размеру блока. Если у вас есть sh только для доступа к некоторой части этого буфера, вы можете выбрать эту часть после того, как прочитали с устройства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...