Функция 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 объекта файла.

Другие вопросы по тегам