Функция CreateDirectoryTransactedA (winbase.h)

[Корпорация Майкрософт настоятельно рекомендует разработчикам использовать альтернативные средства для удовлетворения потребностей вашего приложения. Многие сценарии, для работы с которыми был разработан TxF, можно реализовать с помощью более простых и доступных методов. Кроме того, TxF может быть недоступен в будущих версиях Microsoft Windows. Дополнительные сведения и альтернативы TxF см. в разделе Альтернативы использованию транзакционной NTFS.]

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

Синтаксис

BOOL CreateDirectoryTransactedA(
  [in, optional] LPCSTR                lpTemplateDirectory,
  [in]           LPCSTR                lpNewDirectory,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [in]           HANDLE                hTransaction
);

Параметры

[in, optional] lpTemplateDirectory

Путь к каталогу для использования в качестве шаблона при создании нового каталога. Этот параметр может принимать значение NULL.

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

Совет

Начиная с Windows 10 версии 1607, вы можете согласиться на удаление ограничения MAX_PATH без добавления в начало "\\?\". Дополнительные сведения см. в разделе "Ограничение максимальной длины пути" статьи Именование файлов, путей и пространств имен .

Каталог должен находиться на локальном компьютере; В противном случае функция завершается сбоем, а для последнего кода ошибки задано значение ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE.

[in] lpNewDirectory

Путь к создаваемому каталогу.

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

Совет

Начиная с Windows 10 версии 1607, вы можете согласиться на удаление ограничения MAX_PATH без добавления в начало "\\?\". Дополнительные сведения см. в разделе "Ограничение максимальной длины пути" статьи Именование файлов, путей и пространств имен .

[in, optional] lpSecurityAttributes

Указатель на структуру SECURITY_ATTRIBUTES . Элемент lpSecurityDescriptor структуры задает дескриптор безопасности для нового каталога.

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

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

[in] hTransaction

Дескриптор транзакции. Этот дескриптор возвращается функцией CreateTransaction .

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

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

Если функция завершается ошибкой, возвращаемое значение равно нулю (0). Дополнительные сведения об ошибке можно получить, вызвав GetLastError. Возможные ошибки:

Код возврата Описание
ERROR_ALREADY_EXISTS
Указанный каталог уже существует.
ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION
Нельзя создать дочерний каталог с родительским каталогом с отключенным шифрованием.
ERROR_PATH_NOT_FOUND
Один или несколько промежуточных каталогов не существуют. Эта функция создает только последний каталог в пути.

Комментарии

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

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

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

Дескриптор каталога можно получить, вызвав функцию CreateFileTransacted с установленным флагом FILE_FLAG_BACKUP_SEMANTICS .

В Windows 8 и Windows Server 2012 эта функция поддерживается следующими технологиями.

Технология Поддерживается
Протокол SMB 3.0 Нет
SMB 3.0 Transparent Failover (TFO) Нет
SMB 3.0 с масштабируемыми общими папками (SO) Нет
Файловая система общего тома кластера (CSVFS) Нет
Восстанавливаемая файловая система (ReFS) Нет
 

SMB 3.0 не поддерживает TxF.

Примечание

Заголовок winbase.h определяет CreateDirectoryTransacted как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Использование псевдонима, не зависящий от кодирования, с кодом, который не является нейтральным для кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или времени выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header winbase.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

CreateFileTransacted

Создание и удаление каталогов

Функции управления каталогами

RemoveDirectoryTransacted

SECURITY_ATTRIBUTES

Поддержка транзакций в NTFS