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


Функция CreateFileFromAppW (fileapifromapp.h)

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

Синтаксис

WINSTORAGEAPI HANDLE CreateFileFromAppW(
  LPCWSTR               lpFileName,
  DWORD                 dwDesiredAccess,
  DWORD                 dwShareMode,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  DWORD                 dwCreationDisposition,
  DWORD                 dwFlagsAndAttributes,
  HANDLE                hTemplateFile
) noexcept;

Параметры

lpFileName

Имя файла или устройства, которое нужно создать или открыть. Вы можете использовать косую косую черту (/) или обратные косые черты (\) в этом имени.

В версии ANSI этой функции имя ограничено MAX_PATH символами. Чтобы расширить это ограничение до 32 767 расширенных символов, вызовите версию функции Юникода и добавьте "\\?\" в путь. Дополнительные сведения см. в именовании файлов, путей и пространств имен.

Дополнительные сведения о специальных именах устройств см. в статье Определениеимени устройства MS-DOS.

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

Для версии этой функции юникода (CreateFileFromAppW), можно удалить ограничение MAX_PATH без предварительной подготовки "\\?\". Дополнительные сведения см. в разделе "Ограничение максимальной длины пути" файлы именования, пути и пространства имен.

dwDesiredAccess

Запрошенный доступ к файлу или устройству, который можно суммировать как чтение, запись или ни один из них.

Наиболее часто используются значения GENERIC_READ, GENERIC_WRITEили обоих (GENERIC_READ | GENERIC_WRITE). Дополнительные сведения см. в универсальных прав доступа, права на безопасность файлов и права доступа, константы прав доступа файлови ACCESS_MASK.

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

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

dwShareMode

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

Ценность Значение
0 0x00000000

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

FILE_SHARE_DELETE 0x00000004

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

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

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

Примечание Доступ к удалению позволяет выполнять операции удаления и переименования.
 
FILE_SHARE_READ 0x00000001

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

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

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

FILE_SHARE_WRITE 0x00000002

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

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

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

lpSecurityAttributes

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

Этот параметр может быть NULL.

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

Элемент lpSecurityDescriptor структуры задает SECURITY_DESCRIPTOR для файла или устройства. Если этот элемент null, файл или устройство, связанное с возвращенным дескриптором безопасности, назначается дескриптор безопасности по умолчанию.

Эта функция игнорирует элемент lpSecurityDescriptor при открытии существующего файла или устройства, но продолжает использовать элемент bInheritHandle.

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

dwCreationDisposition

Действие, выполняемое на файле или устройстве, которое существует или не существует.

Для устройств, отличных от файлов, этот параметр обычно имеет значение OPEN_EXISTING.

Дополнительные сведения см. в разделе "Примечания".

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

Ценность Значение
CREATE_ALWAYS 2

Всегда создает новый файл.

Если указанный файл существует и доступен для записи, функция усечена файла, функция завершается успешно, а код последней ошибки имеет значение ERROR_ALREADY_EXISTS (183).

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

Дополнительные сведения см. в разделе "Примечания" этой статьи.

CREATE_NEW 1

Создает новый файл, только если он еще не существует.

Если указанный файл существует, функция завершается ошибкой, и для последней ошибки задано значение ERROR_FILE_EXISTS (80).

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

OPEN_ALWAYS 4

Открывает файл всегда.

Если указанный файл существует, функция завершается успешно, а код последней ошибки имеет значение ERROR_ALREADY_EXISTS (183).

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

OPEN_EXISTING 3

Открывает файл или устройство, только если он существует.

Если указанный файл или устройство не существует, функция завершается ошибкой, а код последней ошибки имеет значение ERROR_FILE_NOT_FOUND (2).

Дополнительные сведения об устройствах см. в разделе "Примечания".

TRUNCATE_EXISTING 5

Открывает файл и усечение его таким образом, чтобы его размер был равен нулю байтам, только если он существует.

Если указанный файл не существует, функция завершается ошибкой, а для последней ошибки задано значение ERROR_FILE_NOT_FOUND (2).

Вызывающий процесс должен открыть файл с GENERIC_WRITE битом в рамках параметра dwDesiredAccess.

dwFlagsAndAttributes

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

Этот параметр может включать любое сочетание доступных атрибутов файла (FILE_ATTRIBUTE_*). Все остальные атрибуты файла переопределяют FILE_ATTRIBUTE_NORMAL.

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

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

Атрибут Значение
FILE_ATTRIBUTE_ARCHIVE 32 (0x20)

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

FILE_ATTRIBUTE_ENCRYPTED 16384 (0x4000)

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

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

Этот флаг не поддерживается в выпусках Windows home, Home Premium, Starter или ARM.

FILE_ATTRIBUTE_HIDDEN 2 (0x2)

Файл скрыт. Не включайте его в обычный список каталогов.

FILE_ATTRIBUTE_NORMAL 128 (0x80)

Файл не имеет других атрибутов. Этот атрибут действителен только в том случае, если используется только один.

FILE_ATTRIBUTE_OFFLINE 4096 (0x1000)

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

FILE_ATTRIBUTE_READONLY 1 (0x1)

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

FILE_ATTRIBUTE_SYSTEM 4 (0x4)

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

FILE_ATTRIBUTE_TEMPORARY 256 (0x100)

Файл используется для временного хранилища.

Дополнительные сведения см. в разделе "Поведение кэширования" этого раздела.

 

Флаг Значение
FILE_FLAG_BACKUP_SEMANTICS 0x02000000

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

Этот флаг необходимо задать для получения дескриптора в каталог. Дескриптор каталога можно передать некоторым функциям вместо дескриптора файлов. Дополнительные сведения см. в разделе "Примечания".

FILE_FLAG_DELETE_ON_CLOSE 0x04000000

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

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

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

FILE_FLAG_NO_BUFFERING 0x20000000

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

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

FILE_FLAG_OPEN_NO_RECALL 0x00100000

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

FILE_FLAG_OPEN_REPARSE_POINT 0x00200000

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

Этот флаг нельзя использовать с флагом CREATE_ALWAYS.

Если файл не является точкой перепарирования, этот флаг игнорируется.

Дополнительные сведения см. в разделе "Примечания".

FILE_FLAG_OVERLAPPED 0x40000000

Файл или устройство открываются или создаются для асинхронного ввода-вывода.

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

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

Если этот флаг не указан, операции ввода-вывода сериализуются, даже если вызовы функций чтения и записи указывают структуру OVERLAPPED.

Сведения об использовании дескриптора файлов, созданного с этим флагом, см. в разделе синхронных и асинхронных дескрипторов ввода-вывода этого раздела.

FILE_FLAG_POSIX_SEMANTICS 0x0100000

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

FILE_FLAG_RANDOM_ACCESS 0x10000000

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

Этот флаг не действует, если файловая система не поддерживает кэшированные операции ввода-вывода и FILE_FLAG_NO_BUFFERING.

Дополнительные сведения см. в разделе "Поведение кэширования" этого раздела.

FILE_FLAG_SESSION_AWARE 0x00800000

Файл или устройство открывается с помощью осведомленности о сеансе. Если этот флаг не указан, то для каждого сеанса (например, устройства с использованием перенаправления USB RemoteFX) невозможно открыть процессами, выполняемыми в сеансе 0. Этот флаг не действует для вызывающих абонентов в сеансе 0. Этот флаг поддерживается только в выпусках сервера Windows.

FILE_FLAG_SEQUENTIAL_SCAN 0x08000000

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

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

Этот флаг не действует, если файловая система не поддерживает кэшированные операции ввода-вывода и FILE_FLAG_NO_BUFFERING.

Дополнительные сведения см. в разделе "Поведение кэширования" этого раздела.

FILE_FLAG_WRITE_THROUGH 0x80000000

Операции записи не будут проходить через промежуточный кэш, они будут переходить непосредственно на диск.

Дополнительные сведения см. в разделе "Поведение кэширования" этого раздела.

 

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

Флаг безопасности Значение
SECURITY_ANONYMOUS

Олицетворение клиента на уровне анонимного олицетворения.

SECURITY_CONTEXT_TRACKING

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

SECURITY_DELEGATION

Олицетворение клиента на уровне олицетворения делегирования.

SECURITY_EFFECTIVE_ONLY

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

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

SECURITY_IDENTIFICATION

Олицетворение клиента на уровне олицетворения идентификации.

SECURITY_IMPERSONATION

Олицетворение клиента на уровне олицетворения. Это поведение по умолчанию, если другие флаги не указаны вместе с флагом SECURITY_SQOS_PRESENT.

hTemplateFile

Допустимый дескриптор файла шаблона с правом доступа GENERIC_READ. Файл шаблона предоставляет атрибуты файла и расширенные атрибуты для создаваемого файла.

Этот параметр может быть NULL.

При открытии существующего файла этот параметр игнорируется.

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

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 10 версии 1803
заголовка fileapifromapp.h