Функция 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 );

person Rohit    schedule 08.01.2013    source источник
comment
Вам нужно показать больше кода. Каковы значения длины и смещения? Какой статус возвращается, когда вы пытаетесь прочитать файл большего размера?   -  person Carey Gregory    schedule 22.01.2013
comment
значение смещения равно 0 значение длины равно 1024. Я установил флаг FLTFL_IO_OPERATION_DO_NOT_UPDATE_BYTE_OFFSET, но смещение все еще не обновляется, когда я пытаюсь использовать цикл.   -  person Rohit    schedule 22.01.2013


Ответы (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 файлового объекта.

person Rohan    schedule 29.04.2013