Windows file archive flag

Windows file archive flag

Функция CreateFile создает или открывает файл, файловый поток, директорию, физический диск, раздел, буфер консоли, ресурсы коммуникаций, слот почты или именованный канал.

Windows Me/98/95: Файловая система ограничивает CreateFile в создании или открытии файлов. Вы не можете создавать или открывать объекты, которые перечисленны в первом параграфе этого описания.

Параметры:

Адрес нульзаканчивающейся строки, которая определяет имя объекта для его создания или открытия.

В ANSI-версии этой функции, имя ограничено количеством MAX_PATH символов. Для увеличения этого предела до 32767 расширенных символов, используйте Unicode-версию этой функции и добавив к пути «\\?\».

Для создания файлового потока, задайте имя файла, двоеточие, и затем имя потока.

Windows Me/98/95: Эта строка не может превышать MAX_PATH символов.

Тип досупа к объекту. Данный параметр может принимать любую комбинацию из следующих значений:

Значение:
Описание:
Определяет запрос о доступности объекта на указанном устройстве. Приложение может запросить атрибуты устройства, без доступа к нему. Определяет доступ на чтение из объекта. Данные могут быть прочитаны из файла и файловый указатель может быть перемещен. Комбинируйте с GENERIC_WRITE для доступа к чтению-записи. Определяет доступ на запись в объект. Данные могут быть записаны в файл и файловый указатель может быть перемещен. Комбинируйте с GENERIC_READ для доступа к чтению-записи.

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

Значение:
Описание:
Допускает последовательность операций открытия объекта для запроса доступа на удаление.
В ином случае, другие процессы не могут открыть объект, если они запрашивают доступ на удаление.
Если этот флаг не задан, но объект был открыт для операции удаления – функция вернется с ошибкой.
Windows Me/98/95: Этот флаг не поддерживается. Допускает последовательность операций открытия объекта для запроса доступа на чтение.
В ином случае, другие процессы не могут открыть объект, если они запрашивают доступ на чтение.
Если этот флаг не задан, но объект был открыт для операции чтения – функция вернется с ошибкой. Допускает последовательность операций открытия объекта для запроса доступа на запись.
В ином случае, другие процессы не могут открыть объект, если они запрашивают доступ на запись.
Если этот флаг не задан, но объект был открыт для операции записи – функция вернется с ошибкой.

Адрес структуры SECURITY_ATTRIBUTES, которая определяет может или нет возвращаемый функцией дескриптор быть унаследован дочерним процессом.

Если lpSecurityAttributes равен NULL, то дескриптор не может быть унаследован.

Член lpSecurityDescriptor структуры определяет дескриптор безопасности для объекта. Если lpSecurityAttributes равен NULL, объект получает дескриптор безопасности по умолчанию. Список контроля доступа (ACL) в дескриптор безопасности по умолчанию для файла или дериктории наследуется от родительской директории.

Целевая файловая система должна поддерживать безопасность файлов и директорий для того, чтоб этот параметр имел эффект на них, который проявляется когда GetVolumeInformation возвращая FS_PERSISTENT_ACLS.

CreateFile игнорирует lpSecurityDescriptor когда открывает существующий файл, но продолжает использовать другие члены структуры.

Значение:
Описание:
Создает новый файл, всегда.
Если файл существует, функция перезаписывает файл, очищая существующие атрибуты, комбинируя указанные файловые атрибуты и флаги с FILE_ATTRIBUTE_ARCHIVE, но не устанавливает дескриптор безопасности, который определяется в структуре SECURITY_ATTRIBUTES. Создает новый файл.
Функция завершится с ошибкой если файл существует. Открыть файл, всегда.
Если файл не существует, функция создает его так же, если dwCreationDisposition был бы CREATE_NEW. Открывает файл.
Функция завершится с ошибкой если файл не существует. Открывает файл и обрезает его до нулевого размера.
Функция завершится с ошибкой если файл не существует.
Вызывающий процесс должен открывать файл с правом доступа GENERIC_WRITE.

Флаги и атрибуты файла.
Этот параметр может содержать любую комбинацию файловых атрибутов. Все другие файловые атрибуты перезаписывают FILE_ATTRIBUTE_NORMAL.
Когда CreateFile открывает файл, атрибуты файла комбинируются с существующими атрибутами файла, и игнорируются любые запрошенные файловые атрибуты.
Следующие файловые атрибуты и флаги используются только для файловых объектов, а не для других типов объектов, которые создает CreateFile.

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

— Фал или дериктория зашифрованы. Для файла, это означает, что все данные в файле зашифрованы. Для директории, это означает, что шифрование применяется по умолчанию для новосозданных файлов и поддиректорий.
Этот флаг не имеет эффекта, если также установлен FILE_ATTRIBUTE_SYSTEM.

— Файл спрятан (скрыт).

— Файл не имеет других установленных атрибутов. Этот атрибут действителен, если он установлен одним.

— Файл не индексируется контекстом сервиса индексирования.

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

— Файл только для чтения. Приложение может читать из файла, но не может записываеть в него, или его удалить.

— Файл – это часть или используется исключительно операционной системой.

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

Этот параметр может также содержать любую комбинацию следующих флагов:

— Файл будет открыт или создан для операции резервного сохранения или восстановления. Система гарантирует, что вызывающий процесс не принимает во внимание проверку безопасности файла, когда процесс имеет привилегии SE_BACKUP_NAME и SE_RESTORE_NAME.
Вы можете установить этот флаг, получив дескриптор директории. Дескриптор директории может быть передан некоторым функциям вместо файлового дескриптора.
Windows Me/98/95: Этот флаг не поддерживается.

— Система удаляет файл сразу, когда все его дескрипторы будут закрыты, учитывая указанный дескриптор и любые откртые или скопированные дескрипторы.
Если существует открытые дескриптор файла, вызов функции будет не успешен, если только они (дескрипторы) не имеют режим разделяемости FILE_SHARE_DELETE.
Последовательные запросы на открытие для файла будут неудачны, если не указан режим разделяемости FILE_SHARE_DELETE.

— Система открывает файл без системного кэширования. Этот флаг не эффективен в кэшировании жесткого диска. Если он комбинирован с FILE_FLAG_OVERLAPPED, флаг дает максимальную производительность ассинхронности потому, что вв/выв не полагается на синхронные операции менеджера памяти. Тем не менее, некоторые операции вв/выв забирают больше времени потому, что данные не сохранены в кэше. Также, метаданные файла могут все еще кэшироваться. Для сброса метаданных на диск, используйте функцию FlushFileBuffers.
Приложение должно удовлевотворять определенным условиям когда работает с файлами, открытыми с флагом FILE_FLAG_NO_BUFFERING:

  • Файловый доступ должен начинаться с байтового смещения внутри файла, которое имет целочислительную кратность с размером сектора раздела.
  • Файловый доступ должен быть количеством байт, которое имет целочислительную кратность с размером сектора раздела. Например, если размер сектора 512 байт, приложение может затребовать чтение и записть 512, 1024, или 2048 байт, но не 335, 981, или 7171 байт.
  • Адреса буфера для чтения или записи должны быть выровнены по сектору, что означает выравнивание по адресам памяти, которые имеют целочислительную кратность с размером сектора раздела. В зависимости от диска, это требование может быть не задействовано.

Одним способом выровнять буферы по целочислительной кратности с размером сектора раздела, является использование VirtualAlloc для выделения буферов. Она выделяет память, которая выровнена по адресам, имеющим целочислительную кратность с размером страницы памяти операционной системы. Так как размеры страницы памяти и сектора раздела выравниваются одинаково.
Приложение может получить размер сектора раздела, вызвав функцию GetDiskFreeSpace.

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

— Система препятствует поведению возмещения файлововой системы NTFS точек препятствия. Этот флаг не может использоваться с флагом CREATE_ALWAYS.

— Файл будет открыт или создан для ассинхронного вв/выв. Когда операция завершена, событие указанное к вызову в структуре OVERLAPPED, устанавливается в сигнальное состояние. Операции, которые требуют много количества времени процессу, возвращают ERROR_IO_PENDING.
Если указан этот флаг, файл может быть использован для одновременных операций чтения и записи. Система не изменяет файловый указатель – вы сами должны это делать, передавая файловую позицию к функциям чтения и записи в структуре OVERLAPPED, или обновлять файловый указатель.
Если этот флаг не указан, тогда операции вв/выв являются серийными, даже если в вызовах функций чтения и записи определена структура OVERLAPPED.

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

— Доступ к файлу непоследователен. Система может использовать это как подсказку при кэшировании файла.

— Доступ к файлу последователен от начала до конца. Система может использовать это как подсказку при кэшировании файла. Если приложение передвигает файловый указатель для произвольного доступа, оптимальное кэширование не происходит. Тем не менее, корректность операции гарантируется.
Установив этот флаг, можно подвысить производительность приложения, которое последовательно читает большие файлы.

— Система записывает мимо любого промежуточного кэша прямо на диск.
Если также установлен флаг FILE_FLAG_NO_BUFFERING, систеное кэширование эффективно так, что данные записываются в системный кэш, но сбрасываются на диск без замедления.

Читайте также:  Windows 10 2009 дата выхода 2020

Параметр dwFlagsAndAttributes может также содержать Качества Безопасности. Когда вызывающее приложение определяет флаг SECURITY_SQOS_PRESENT, параметр dwFlagsAndAttributes может принимать одно или более из следующих значений:

— Испольнять роль клиента в уровне анонимности.

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

— Испольнять роль клиента в уровне делегации.

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

— Испольнять роль клиента в уровне опознавания.

— Испольнять роль клиента в уровне испольняющего роль.

Дескриптор файла-шаблона с правами доступа GENERIC_READ. У Файла-шаблона запрашиваются атрибуты файла и расширенные атрибуты для файла, который будет создан. Этот параметр может быть NULL.

Когда открывается существующий файл, то CreateFile игнорирует файл-шаблон.

Windows Me/98/95: hTemplateFile должен быть равен NULL. Если вы указываете дескриптор, вызов функции будет завершен с ошибкой и GetLastError вернет ERROR_NOT_SUPPORTED.

Возвращаемые значения:

Если функция успешна, возвращается открытый дескриптор указанного файла. Если указанный файл существует до вызова функции и параметр dwCreationDisposition равен CREATE_ALWAYS или OPEN_ALWAYS, вызов GetLastError вернет ERROR_ALREADY_EXISTS, даже если функция успешна. Если файл не существует перед вызовом, GetLastError вернет 0 (ноль).

При ошибке, функция вернет INVALID_HANDLE_VALUE. Для получения дополнительной информации об ошибке, вызывайте GetLastError.

Замечания:

Используйте функцию CloseHandle для закрытия дескриптора объекта, который возвращает CreateFile.
Windows Server 2003 и Windows XP/2000: Разделяемое нарушение происходит при попытке открытия файла или директории для удаления на удаленном компьютере, когда значение параметра dwDesiredAccess имеет флаг для доступа на удаление и удаленный компьютер не был открыт с FILE_SHARE_DELETE. Для избежания разделяемого нарушения по этому сценарию, откройте удаленный файл или директорию только с провами доступа на удалени, или вызовите DeleteFile без предыдущего открытия файла.

Некоторые файловые системы, такие как NTFS, поддерживают сжатие или шифрование для индувидуальных файлов и директорий. На разделах, которые отформатированы для таких типов файловых систем, новый файл наследует атрибуты сжатия и шифрования этой директории.

Вы не можете использовать CreateFile для контроля над сжатием файлов или директорий.
Windows Server 2003 and Windows XP/2000: Для возможности обратной совместительности, CreateFile не осуществляет правила наследования, когда вы указываете дескриптор безопасности в lpSecurityAttributes. Для поддержки наследования, функция, которая позже запрашивает дескриптор безопасности этого объекта, может иерархично получить и отчитаться о том, имеет ли эффектность наследование.

Функция CreateFile

Функция CreateFile создает или открывает каталог, физический диск, том, буфер консоли (CONIN$ или CONOUT$), устройство на магнитной ленте, коммуникационный ресурс, почтовый слот или именованный канал. Функция возвращает дескриптор, который может быть использован для доступа к объекту.

Windows Me/98/95: Файловая система ограничивает CreateFile в создании или открытии файлов; Вы не можете создать или открыть не те объекты, которые упомянуты выше. Смотрите темы, на которые указывает раздел Смотри также в конце этой справочной страницы для получения дополнительной информации, какие из этих средств обслуживания доступны в этих системах, и как получить доступ к ним.

[in] Указатель на символьную строку с нулем в конце, устанавливающую имя объекта, который создается или открываться.

Windows NT/2000/XP: В версии ANSI этой функции, число символов имени ограничивается значением MAX_PATH . Чтобы выйти за пределы этого ограничения 32767 символов, вызовите Unicode-версию функции и присоедините спереди пути «\\?\«. Подробную информацию см. статье Именование файлов.

Windows 95/98/Me: Эта строка не должна выходить за пределы, установленные значением MAX_PATH .

[in] Тип доступа к объекту (чтение, запись или то и другое). Перечень значений см. в статье Защита файла и права доступа . Вы не можете требовать режима доступа, который находится в противоречии с режимом совместного использования, заданным в предыдущем запросе открытия объекта, дескриптор которого является все еще открытым. Если этот параметр равняется нулю, приложение может сделать запрос атрибутов устройства, не обращаясь к диску.

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

[in] Режим совместного доступа (чтение, запись, оба или никакого действия). Вы не можете требовать режим совместного доступа, который находится в противоречии с режимом доступа, заданным в предыдущем запросе открытия объекта, дескриптор которого является все еще открытым. Сделав так, вы в результате получите ошибку совместного доступа ( ERROR_SHARING_VIOLATION ). Подробности и примеры см. в статье Создание и открытие файлов .

Если этот параметр равняется нулю, а CreateFile завершается успешно, объект не может совместно использоваться, и не может быть открыт снова до тех пор, пока дескриптор не закроется. Дополнительную информации об ошибках совместного доступа смотри в разделе Замечаний.

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

Значение Предназначение
FILE_SHARE_DELETE Разрешает последующие операции открытия объекта, которые требуют доступа к его удалению. В противном случае, другие процессы не смогут открыть объект, если они потребуют доступа к удалению.

Если этот флажок не определяется, но объект уже был открыт с доступом для удаления, то функция завершается ошибкой.

Windows Me/98/95: Этот флажок не поддерживается.

FILE_SHARE_READ Разрешает последующие операции открытия объекта, которые требуют доступа для чтения. В противном случае, другие процессы не смогут открыть объект, если они потребуют доступа для чтения.

Если этот флажок не определяется, но объект уже был открыт с доступом для чтения, то функция завершается ошибкой.

FILE_SHARE_WRITE Разрешает последующие операции открытия объекта, которые требуют доступа для записи. В противном случае, другие процессы не смогут открыть объект, если они потребуют доступа для записи.

Если этот флажок не определяется, но объект уже был открыт с доступом для записи, то функция завершается ошибкой.

[in] Указатель на структуру SECURITY_ATTRIBUTES, которая устанавливает может ли возвращенный дескриптор быть унаследован дочерними процессами. Если lpSecurityAttributes имеет значение ПУСТО (NULL), дескриптор не может быть унаследован.

Windows NT/2000/XP: член структуры lpSecurityDescriptor устанавливает дескриптор безопасности для объекта. Если lpSecurityAttributes имеет значение ПУСТО (NULL), объект получает заданный по умолчанию дескриптор безопасности. Списки контроля доступа (ACL) в заданном по умолчанию дескрипторе безопасности для файла или каталога наследуются от его родительского каталога.

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

(Это указывается тогда, когда функция GetVolumeInformation возвращает значение FS_PERSISTENT_ACLS .) CreateFile игнорирует параметр lpSecurityDescriptor при открытии существующего файла, но продолжает использовать остальные члены структуры.

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

Значение Предназначение
CREATE_NEW Создает новый файл. Функция завершается ошибкой, если заданный файл уже существует.
CREATE_ALWAYS Создает новый файл. Если файл существует, функция переписывает файл, сбрасывает существующие атрибуты и объединяет, заданные параметром dwFlagsAndAttributes атрибуты файла и флажки, с FILE_ATTRIBUTE_ARCHIVE , но не устанавливает дескриптор безопасности заданный структурой SECURITY_ATTRIBUTES.
OPEN_EXISTING Открывает файл. Функция завершается ошибкой, если файл не существует.

Подробное обсуждение того, почему вам следует использовать OPEN_EXISTING для устройств, смотрите в разделе Замечания. OPEN_ALWAYS Открывает файл, если таковой существует. Если файл не существует, функция создает файл, как будто бы dwCreationDisposition имел значение CREATE_NEW . TRUNCATE_EXISTING Открывает файл и обрезает его так, чтобы его размер равнялся нулю байтов. Вызывающий процесс должен открыть файл с правом доступа GENERIC_WRITE . Функция завершается ошибкой, если файл не существует.

[in] Атрибуты и флажки файла.

Ниже следуют атрибуты и флажки файла, которые используются только для объектов файла, а не для других объектов, создаваемых функцией CreateFile.

Когда CreateFile открывает существующий файл, он объединяет флажки файла с существующими его атрибутами, но игнорирует любые предоставляемые атрибуты файла.

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

Атрибут Предназначение
FILE_ATTRIBUTE_ARCHIVE Файл должен быть архивирован. Приложения используют этот атрибут, чтобы отметить файлы для резервного копирования или перемещения.
FILE_ATTRIBUTE_ENCRYPTED Файл или каталог шифруются. Для файла, это означает, что все данные в файле зашифрованы. Для каталога, это означает, что шифрование — это значение по умолчанию для недавно созданных файлов и подкаталогов. Дополнительную информацию смотри в разделе Шифрование файла .

Этот флажок не действует, если также установлен и флажок FILE_ATTRIBUTE_SYSTEM .

FILE_ATTRIBUTE_HIDDEN Файл скрытый. Он не должен включаться в обычный перечень файлов каталога. FILE_ATTRIBUTE_NORMAL У файла нет других установленных атрибутов. Этот атрибут допустим только в том случае, если он используется один. FILE_ATTRIBUTE_NOT_CONTENT_INDEXED Файл не будет индексироваться службой индексации содержания. FILE_ATTRIBUTE_OFFLINE Данные файла доступны не сразу. Этот атрибут указывает, что данные файла были физически перемещены на автономное хранилище данных. Этот атрибут используется Удаленным хранилищем , программой Иерархического управления памятью . Приложения произвольно не должно изменять этот атрибут. FILE_ATTRIBUTE_READONLY Файл доступен только для чтения. Приложения могут читать файл, но не могут записать в него или удалить его. FILE_ATTRIBUTE_SYSTEM Файл является частью или используется исключительно операционной системой. FILE_ATTRIBUTE_TEMPORARY Файловые системы избегают писать данные обратно на запоминающее устройство большой емкости, если доступна достаточная кэш-память, потому что приложение часто удаляет временный файл вскоре после того, как дескриптор закрывается. В этом случае, система может полностью отменить запись данных. В противном случае, данные должны быть записаны после закрытия дескриптора.

Этот параметр может включать в себя также и любую комбинацию нижеследующих флажков.

Флажок Предназначение
FILE_FLAG_WRITE_THROUGH Предписывает системе не записывать через посредство какого-либо промежуточного кэша, а перейти непосредственно на диск.

Если флажок FILE_FLAG_NO_BUFFERING также не определен, так, чтобы кэширование системы было в действительности, то данные записываются в системном КЭШе, но сбрасываются на диск без задержки.

Если к тому же FILE_FLAG_NO_BUFFERING определен так, чтобы кэширование системы не действовало, то данные немедленно сбрасываются на диск, минуя системный кэш. Операционная система также требует сквозной записи через кэш жесткого диска для постоянных носителей информации. Однако, не все аппаратные средства поддерживают эту способность сквозной записи. FILE_FLAG_OVERLAPPED Файл открывается или создается для асинхронного ввода — вывода (I/O). Когда операция заканчивается, событие, определенное для вызова структуры OVERLAPPED устанавливается в сигнальное состояние. Операции, которые забирают значительное время для обработки данных возвращают значение ERROR_IO_PENDING .

Если этот флажок устанавливается, файл может использоваться для совместных операций чтения и записи. Система не обслуживает указатель позиции в файле, поэтому Вы должны передавать позицию в файле в функции чтения и записи в структуре OVERLAPPED или обновлять указатель позиции в файле.

Когда Вы устанавливаете флажок FILE_FLAG_OVERLAPPED , функции чтение и записи файла должны установить структуру OVERLAPPED . То есть, когда определен флажок FILE_FLAG_OVERLAPPED , приложение должно исполнять перекрывающее (асинхронное) чтение и запись.

Если этот флажок не определен, то операции ввода-вывода (I/O) преобразуются в последовательную форму, даже если функциям чтения и записи определяется вызов структуры OVERLAPPED. FILE_FLAG_NO_BUFFERING Система должна открыть файл без системного кэширования. Этот флажок не имеет никакого действия на кэширование жесткого диска. Когда объединяется с FILE_FLAG_OVERLAPPED , флажок дает максимальную асинхронную производительность, потому что ввод — вывод (I/O) не опирается на синхронные операции модуля управления памятью. Однако, некоторые операции ввода-вывода (I/O) забирают больше времени, потому что данные не поддерживаются в КЭШе. Притом, метаданные файла могут все же кэшироваться. Чтобы сбросить метаданные на диск, используйте функцию FlushFileBuffers.

Приложение должно удовлетворять некоторым требованиям, когда работает с файлами открытыми при помощи FILE_FLAG_NO_BUFFERING :

  • Доступ к файлу должен начинаться при смещениях байтов в пределах файла, которые являются кратными размеру сектора тома*.

* Примечание переводчика : том — логический раздел диска, создаваемый при его форматировании.

  • Доступ к файлу должен быть равен числу байтов, которые являются кратными размеру сектора тома. Например, если размер сектора — 512 байтов, приложение может запросить чтение и запись 512, 1024, или 2048 байтов, а не 335, 981 или 7171 байтов.
  • Адреса буферов для операций чтения и записи должны быть выровнены по сектору (выровнены по адресам в памяти, которые являются кратными размеру сектора тома). В зависимости от диска, это требование может быть не реализовано.

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

Приложение может выяснить размер сектора тома при помощи вызова функции GetDiskFreeSpace .

FILE_FLAG_RANDOM_ACCESS Указывает на получение произвольного доступа к файлу. Система может использовать это как указание, чтобы оптимизировать кэширование файлов. FILE_FLAG_SEQUENTIAL_SCAN Указывает на получение последовательного доступа к файлу от начала до конца. Система может использовать это как указание, чтобы оптимизировать кэширование файлов. Если приложение перемещает указатель для произвольного доступа к файлу, оптимума кэширования может не произойти; однако, корректная операция все еще гарантируется.

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

FILE_FLAG_DELETE_ON_CLOSE Система должна удалить файл немедленно после того, как все его дескрипторы были закрыты, не только заданный дескриптор, но также и любые другие открытые или дублированные дескрипторы.

Если существуют открытые дескрипторы файлов, вызовы завершаются ошибкой, если они не были все открыты с режимом совместного доступа FILE_SHARE_DELETE .

Последовательные запросы на открытие файла завершатся ошибкой, если не используется флажок режима совместного доступа FILE_SHARE_DELETE .

FILE_FLAG_BACKUP_SEMANTICS Файл открывается или создается для операции восстановления, или резервного копирования. Система гарантирует, что вызывающий процесс отменяет проверку безопасности файла, обеспечивая его привилегиями SE_BACKUP_NAME и SE_RESTORE_NAME . Подробную информацию, см. в статье Изменение привилегий в маркере .

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

Windows Me/98/95: Этот флажок не поддерживается. FILE_FLAG_POSIX_SEMANTICS Указывает на получение доступа к файлу согласно правилам POSIX . Они включают разрешение нескольким файлам иметь имена, которые отличаются только регистром, если файловые системы поддерживают такое именование. Используйте осторожно этот параметр, потому что файлы, созданные с этим флажком не могут быть доступны приложениям, написанным для MS DOS или 16-битового Windows. FILE_FLAG_OPEN_REPARSE_POINT Система должна запретить режим работы монтирования в точках повторной обработки NTFS . Когда файл открывается, дескриптор файла возвращается, является ли фильтр, который управляет точкой монтирования, рабочим или нет. Этот флажок не может использоваться с флажком CREATE_ALWAYS . FILE_FLAG_OPEN_NO_RECALL Указывает, что требуются данные файла, но они должны продолжать постоянно находиться в удаленном хранилище. Они не должны переноситься обратно на локальное запоминающее устройство. Этот флажок предназначен для использования системами удаленных хранилищ.

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

Значение Предназначение
SECURITY_ANONYMOUS Представляет клиента на Анонимном уровне заимствования прав.
SECURITY_IDENTIFICATION Представляет клиента на Идентифицирующем уровне заимствования прав.
SECURITY_IMPERSONATION Представляет клиента на Инперсонирующем* уровне заимствования прав.

Примечание переводчика: инперсонация — выдача себя за кого-либо другого

SECURITY_DELEGATION Представляет клиента на Делегирующем уровне заимствования прав. SECURITY_CONTEXT_TRACKING Отслеживающий режим системы безопасности является динамическим. Если этот флажок не установлен, отслеживающий режим системы безопасности, является статическим. SECURITY_EFFECTIVE_ONLY Серверу доступно содержание только разрешенное конфигурацией системы безопасности клиента. Если Вы не устанавливаете этот флажок, доступным становится содержание всех конфигураций системы безопасности клиента.

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

[in] Дескриптор файла шаблона с правом доступа GENERIC_READ . Файл шаблона предоставляет атрибуты файла и дополнительные атрибуты для создающегося файла. Этот параметр должен быть ПУСТО (NULL).

При открытии существующего файла, CreateFile игнорирует файл шаблона.

Windows 95/98/Me: Параметр hTemplateFile должен иметь значение ПУСТО (NULL). Если Вы предоставляете дескриптор, вызов завершается ошибкой, а функция GetLastError возвращает значение ERROR_NOT_SUPPORTED .

Если функция завершается успешно, возвращаемое значение — открытый дескриптор заданного файла. Если заданный файл существовал до вызова функции, а параметр dwCreationDisposition установлен в CREATE_ALWAYS или OPEN_ALWAYS , вызов GetLastError возвращает значение ERROR_ALREADY_EXISTS (даже при том, что функция завершилась успешно). Если файл не существовал перед вызовом функции, функция GetLastError возвращает нуль.

Если функция завершается с ошибкой, возвращаемое значение — INVALID_HANDLE_VALUE . Чтобы получать дополнительные сведения об ошибке, вызовите GetLastError.

Используйте функцию CloseHandle , чтобы закрыть дескриптор объекта, возвращенный CreateFile.

Windows Server 2003, Windows XP, Windows 2000: Если, для удаления, делается попытка открыть файл или каталог на отдаленной машине, когда значение параметра dwDesiredAccess равно флажку доступа DELETE , который объединен при помощи логического ИЛИ (OR) с любым другим флажком доступа, а удаляемый файл или каталог не был открыт с флажком FILE_SHARE_DELETE , произойдет ошибка совместного доступа. Чтобы избежать ошибки совместного доступа в этом сценарии, откройте удаляемый файл или каталог с только правом доступа DELETE или, для удаления, вызовите функцию DeleteFile без первоначального открытия файла или каталога.

Некоторые файловые системы, такие как NTFS, поддерживают сжатие или шифрование для отдельных файлов и каталогов. В томах, отформатированных для такой файловой системы, новый файл наследует сжатие и атрибуты шифрования из своего каталога.

Вы не можете использовать CreateFile , чтобы управлять сжатием файла или каталога. Информацию о сжатых файлах и о разрешении или запрещении сжатия файла внутри каталога, см. разделе Сжатие файла и восстановление сжатых данных .

Дополнительную информацию о шифровании и расшифровке фалов и о разрешении или запрещении шифрования файла внутри каталога смотри в разделе Шифрование файла .

Windows Server 2003, Windows XP, Windows 2000: Для обеспечения совместимости вниз, функция CreateFile не применяет правила наследования, когда Вы определяете дескриптор безопасности в lpSecurityAttributes. Чтобы поддерживать наследование, функции, которые позже сделали запрос дескриптора безопасности этого объекта, могут эвристически определять и сообщать, что наследование действует. Дополнительную информацию см. в разделе Автоматическое распространение наследуемых элементов списка контроля доступа (ACE) .

Windows 95/98/Me: CreateFileW поддерживается подпрограммой Microsoft Layer for Unicode. Чтобы использовать ее, Вы должны добавить некоторые файлы к вашему приложению, как изложено в описании Microsoft Layer for Unicode для системы Windows 95/98/Me .

Файлы

Если Вы пытаетесь создать файл в дисководе для гибких дискет или CD-ROM, в котором нет гибкого диска или CD-диска, система показывает на экране окно сообщений, запрашивающее пользователя вставить дискету или CD, соответственно. Чтобы воспрепятствовать системе показывать на экране это окно сообщений, вызовите функцию SetErrorMode с флажком SEM_FAILCRITICALERRORS .

Windows Server 2003, Windows XP, Windows 2000: Если установлены флажки CREATE_ALWAYS и FILE_ATTRIBUTE_NORMAL , функция CreateFile завершится ошибкой и установит последнюю ошибку в функции GetLastError как ACCESS_DENIED , если файл существует и имеет значение атрибутов FILE_ATTRIBUTE_HIDDEN и FILE_ATTRIBUTE_NORMAL . Чтобы избежать этой ошибки, установите некоторые атрибуты также как у существующего файла.

Перечень действий, которые совершает функция CreateFile при создании нового или открытии существующего файла смотри в статье Создание и открытие файлов

Windows NT/2000/XP: Если Вы переименовали или удалили файл, а затем, вскоре после этого, восстанавливайте его, чтобы восстановить файл система разыскивает кэш с информацией о файле. Кэшируемая информация включает в себя его короткую/длинную пару имен и время создания.

Windows Me/98/95: Это замечание не применяется.

Если Вы вызываете CreateFile для файла, который ожидает удаления в результате предыдущего вызова функции DeleteFile , функция завершается ошибкой. Операционная система задерживает удаление файла до тех пор, пока все дескрипторы файла не будут закрыты. GetLastError возвращает значение ERROR_ACCESS_DENIED .

Когда приложение создает файл через сеть, лучше использовать GENERIC_READ | GENERIC_WRITE чем использовать один флажок GENERIC_WRITE . Получающийся код должен быть быстрее, потому что система переадресации может использовать диспетчер кэша и отправлять меньше блоков серверных сообщений ( SMB ) с большим количеством данных. Эта комбинация также устраняет проблему, куда при записи в файл через сеть можно иногда возвращать значение ERROR_ACCESS_DENIED .

Приложение не сможет создать каталог при помощи функции CreateFile; чтобы создать каталог, оно должно вызвать функцию CreateDirectory или CreateDirectoryEx .

Windows NT/2000/XP: Вы можете получить дескриптор каталога, установив флажок FILE_FLAG_BACKUP_SEMANTICS . Дескриптор каталога может передаваться некоторым функциям вместо дескриптора файла.

Некоторые файловые системы, такая как NTFS, поддерживают сжатие или кодирование для отдельных файлов и каталогов. На томах, отформатированных для такой файловой системы, новый каталог наследует сжатие и атрибуты кодирования своей родительской директории.

Вы не можете использовать функцию CreateFile, чтобы установить сжатое состояние каталога. Используйте функцию DeviceIOControl, чтобы установить сжатое состояние каталога.

При использовании CreateFile, чтобы открыть каталог в ходе дефрагментации тома FAT или FAT32, не устанавливайте право доступа MAXIMUM_ALLOWED . Если это сделать, в доступе к каталогу будет отказано. Вместо него установите право доступа GENERIC_READ .

Приложение не сможет создать каталог при помощи функции CreateFile; чтобы создать каталог, оно должно вызвать функцию CreateDirectory или CreateDirectoryEx . Чтобы открыть каталог при помощи функции CreateFile требуется флажок FILE_FLAG_BACKUP_SEMANTICS .

При использовании CreateFile, чтобы открыть каталог в ходе дефрагментации тома FAT или FAT32, не устанавливайте право доступа MAXIMUM_ALLOWED . Если это сделать, в доступе к каталогу будет отказано. Вместо него установите право доступа GENERIC_READ .

Физические диски и тома

Вы можете использовать функцию CreateFile, чтобы открыть физический диск или том. Функция возвращает дескриптор, который может быть использован функцией DeviceIOControl. Это дает Вам возможность получить доступ к таблице разделов диска. Потенциально опасно делать так, потому что позже неправильная запись на диск может сделать его содержание недоступным. Ниже следуют требования, которые должны быть выполнены надлежащим образом для такого вызова, чтобы он завершился успешно:

  • Вызывающая программа должна иметь административные права доступа к операции. Подробную информацию, см. в статье Запуск со специальными правами доступа .
  • Параметр dwCreationDisposition должен иметь флажок OPEN_EXISTING .
  • При открытии гибкого диска или раздела на жестком диске, в параметре dwShareMode Вы должны установить флажок FILE_SHARE_WRITE .

Символьная строка lpFileName должна иметь форму \\.\PHYSICALDRIVE, чтобы открыть физический диск x. Номера жестких дисков начинаются с нуля. Т аблица ниже показывает некоторые примеры строк физических дисков.

Символьная строка Предназначение
\\.\PHYSICALDRIVE0 Открывает первый физический диск.
\\.\PHYSICALDRIVE2 Открывает третий физический диск.

Пример, показывающий, как открыть физический диск, см. в статье Вызов функции DeviceIOControl .

При открытии тома или накопителя на гибких дисках, строка lpFileName должна иметь форму \\.\ : . Не используйте замыкающую наклонную черту влево(обратный слеш (\)). Это будет указывать на корневой каталог диска. Таблица ниже показывает некоторые примеры строк диска.

Символьная строка Предназначение
\\.\A: Открывает диск А (гибкий диск).
\\.\C: Открывает диск С (том).

Вы можете также открыть том, ссылаясь на его имя. Подробную информации, см. в статье Именование тома .

Дескрипторы тома, по усмотрению файловой системы, могут открываться как некэшируемые даже тогда, когда некэшируемый параметр функцией CreateFile не определен. Вам следует исходить из того, что все файловые системы Microsoft открывают дескрипторы тома, как некэшируемые. Ограничения на некэшируемый ввод — вывод (I/O) для файлов также применяется и к томам.

Файловая система может или не может потребовать выравнивания буфера даже при том, что данные некэшируемые. Однако, если при открытии тома задается некэшируемый параметр, выравнивание буфера для тома осуществляется независимо от файловой системы. Это рекомендуется для всех файловых систем, в которых Вы открываете дескрипторы тома, как некэшируемые и сопровождается ограничениями некэшируемого ввода — вывода (I/O).

Накопители на магнитной ленте

Вы можете открыть накопители на магнитной ленте, используя форму имени файла \\.\TAPE , где x — номер, указывающий, какое устройство открывается, начиная с накопителя на магнитной ленте 0. Чтобы открыть накопитель на магнитной ленте 0 в приложении написанном на C или С++, используйте имя файла «\\\\.\\TAPE0». Подробную информацию об управлении накопителями на магнитной ленте для резервного копирования или других приложений, см. главу Резервное копирование .

Коммуникационные ресурсы

Функция CreateFile может создать дескриптор коммуникационного ресурса (обмена данными), такого как последовательный порт COM1 . Для коммуникационных ресурсов параметр dwCreationDisposition должен быть OPEN_EXISTING , а параметр hTemplate должен иметь значение ПУСТО (NULL). Доступ к операциям чтения, записи или чтения-записи может быть определен, а дескриптор может открыться для асинхронной операции ввода-вывода. Дополнительную информацию об обмене информацией, см. раздел Коммуникационные ресурсы .

Функция CreateFile может создать дескриптор консольного ввода данных (CONIN$). Если процесс имеет открытый дескриптор для него, как результат наследования или дублирования, он может также создать и дескриптор активного экранного буфера (CONOUT$). Вызывающий процесс должен быть присоединен к унаследованной консоли или консоли назначенной функцией AllocConsole . Дескрипторы консоли, устанавливаются в параметрах CreateFile как указано ниже.

Параметры Значение
lpFileName Используйте значение CONIN$, чтобы определить консольный ввод данных, а значение CONOUT$, чтобы определить консольный вывод данных.

CONIN$ получает дескриптор буфера консольного ввода данных, даже если функция SetStdHandle переназначала дескриптор стандартного ввода данных. Чтобы получить дескриптор стандартного ввода данных, используйте функцию GetStdHandle.

CONOUT$ получает дескриптор активного экранного буфера, даже если функция SetStdHandle переназначала дескриптор стандартного вывода данных. Чтобы получить дескриптор стандартного вывода данных, используйте функцию GetStdHandle . dwDesiredAccess Предпочитается сочетание флажков GENERIC_READ | GENERIC_WRITE , но либо один, либо другой может ограничить доступ. dwShareMode Когда открываете CONIN$, убедитесь, что определили доступ FILE_SHARE_READ . Когда открываете CONOUT$, убедитесь, что определили доступ FILE_SHARE_WRITE .

Если вызывающий процесс унаследовал консоль, или если дочерний процесс получил возможность обратиться к консоли, этим параметром должно быть сочетание флажков FILE_SHARE_READ | FILE_SHARE_WRITE .

lpSecurityAttributes Если Вы хотите чтобы была унаследована консоль, член bInheritHandle структуры SECURITY_ATTRIBUTES должен иметь значение ИСТИНА (TRUE). dwCreationDisposition При использовании функции CreateFile, чтобы открыть консоль, Вы должны установить флажок OPEN_EXISTING . dwFlagsAndAttributes Игнорируется. hTemplateFile Игнорируется.

Список ниже показывает воздействие различных настроек параметров dwDesiredAccess и lpFileName.

lpFileName dw DesiredAccess Результат воздействия
CON GENERIC_READ Открывает консоль для ввода данных.
CON GENERIC_WRITE Открывает консоль для вывода данных.
CON GENERIC_READ
GENERIC_WRITE
Windows 95/98/Me: Становится причиной завершения ошибкой работы функции CreateFile; функция GetLastError возвращает код ошибки ERROR_PATH_NOT_FOUND .

Windows NT/2000/XP: Становится причиной завершения ошибкой работы функции CreateFile; функция GetLastError возвращает код ошибки ERROR_FILE_NOT_FOUND .

Обменный почтовый ящик в ядре Windows

Если CreateFile открывает клиентский конец обменного почтового ящика (слота), функция возвращает значение INVALID_HANDLE_VALUE , если клиент почтового слота пытается открыть локальный почтовый слот прежде, чем сервер почтового слота создаст его при помощи функции CreateMailSlot . Подробную информацию о почтовых ящиках в ядре Windows, см. Обменные почтовые ящики в ядре Windows .

Если CreateFile открывает клиентский конец именованного канала, функция использует любой экземпляр именованного канала, который находится в состоянии прослушивания. Процесс открытия может дублировать дескриптор столько раз, сколько этого требуется, но, как только откроется, этот экземпляр именованного канала не может открыться другим клиентом. Доступ определяется таким, чтобы когда канал открывается, то должен быть совместим с доступом, заданным в параметре dwOpenMode функции CreateNamedPipe . Подробную информацию о каналах, см. в главе Каналы .

Обзор Управление файлами, Функции, используемые в управлении файлами, ACCESS_MASK, AllocConsole , CloseHandle , ConnectNamedPipe, CreateDirectory, CreateDirectoryEx, CreateMailSlot, CreateNamedPipe, DeleteFile, DeviceIOControl, GetDiskFreeSpace, GetOverlappedResult, GetStdHandle , OpenFile, OVERLAPPED, ReadFile, SECURITY_ATTRIBUTES, SetErrorMode, SetStdHandle , TransactNamedPipe, VirtualAlloc, WriteFile

Размещение и совместимость CreateFile

Читайте также:  Unable to open the script file как исправить windows 10
Оцените статью