Поделиться через


Использование текущей позиции файла

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

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

Чтобы создать дескриптор, имеющий связанный указатель на текущее положение файла, укажите право доступа SYNCHRONIZE в параметре DesiredAccess для ZwCreateFile, IoCreateFile или ZwOpenFile и FILE_SYNCHRONOUS_IO_ALERT или FILE_SYNCHRONOUS_IO_NONALERT в параметре CreateOptions или OpenOptions . Убедитесь, что вы также не указали право доступа FILE_APPEND_DATA.

ZwReadFile и ZwWriteFile автоматически обновляют текущий указатель положения файла, чтобы он указывал сразу за пределы данных, затронутых операцией. Например, при чтении 20 байтов, начиная с смещения байтов 101, ZwReadFile обновит текущую позицию файла до 121.

Вы можете проверить или изменить текущую позицию файла, вызвав ZwQueryInformationFile или ZwSetInformationFile соответственно. В любом случае задайте для параметра FileInformationClass значение FilePositionInformation.