Функция FltReadFile для чтения файла размером более 1 КБ
Я использую функцию FltReadFile из WDK для чтения файлов. Я могу читать только 1 КБ файла. Как прочитать файл, имеющий более 1 КБ? Благодарю вас.
offset.QuadPart = bytesRead = 0;
status = FltReadFile( Instance,
FileObject,
&offset,
length,
buffer,
FLTFL_IO_OPERATION_NON_CACHED |
FLTFL_IO_OPERATION_DO_NOT_UPDATE_BYTE_OFFSET,
&bytesRead,
NULL,
NULL );
1 ответ
Вы используете флаг FLTFL_IO_OPERATION_DO_NOT_UPDATE_BYTE_OFFSET
который говорит, что не обновлять текущую позицию файла после чтения файла (что обычно происходит).
Если этот флаг установлен, offset
параметр предлагает читать из указанной позиции по offset
в файле.
Итак, в вашем случае вы указали offset=0
а также length=1024
Правильно читаешь - 1 to 1024
- 1 КБ байтов из файла. Если вы делаете тот же звонок снова без изменения offset
Параметр будет читать те же байты размером 1 КБ.
Документация от FltReadFile посмотрите документацию параметров ByteOffset.
ByteOffset [in, необязательный] Указатель на переменную, выделенную вызывающей стороной, которая задает начальное смещение байта в файле, где должна начинаться операция чтения.
Если указано это смещение или если в параметре Flags указан флаг FLTFL_IO_OPERATION_DO_NOT_UPDATE_BYTE_OFFSET, FltReadFile не обновляет поле CurrentByteOffset объекта файла.