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


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

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

Задает атрибуты для файла или каталога в виде транзакций.

Синтаксис

BOOL SetFileAttributesTransactedW(
  [in] LPCWSTR lpFileName,
  [in] DWORD   dwFileAttributes,
  [in] HANDLE  hTransaction
);

Параметры

[in] lpFileName

Имя файла, атрибуты которого необходимо задать.

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

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

Совет

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

[in] dwFileAttributes

Атрибуты файла, которые необходимо задать для файла.

Список значений атрибутов файла и их описание см. в разделе Константы атрибутов файлов. Этот параметр может быть одним или несколькими значениями, объединенными с помощью побитового оператора ИЛИ. Однако все остальные значения переопределяют FILE_ATTRIBUTE_NORMAL.

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

Ниже приведен список поддерживаемых значений атрибутов.

FILE_ATTRIBUTE_ARCHIVE (32 (0x20))

FILE_ATTRIBUTE_HIDDEN (2 (0x2))

FILE_ATTRIBUTE_NORMAL (128 (0x80))

FILE_ATTRIBUTE_NOT_CONTENT_INDEXED (8192 (0x2000))

FILE_ATTRIBUTE_OFFLINE (4096 (0x1000))

FILE_ATTRIBUTE_READONLY (1 (0x1))

FILE_ATTRIBUTE_SYSTEM (4 (0x4))

FILE_ATTRIBUTE_TEMPORARY (256 (0x100))

[in] hTransaction

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

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

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

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

Комментарии

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

attribute Настройка
FILE_ATTRIBUTE_COMPRESSED

0x800

Чтобы задать состояние сжатия файла, используйте функцию DeviceIoControl с операцией FSCTL_SET_COMPRESSION .
FILE_ATTRIBUTE_DEVICE

0x40

Защищены; не использовать.
FILE_ATTRIBUTE_DIRECTORY

0x10

Файлы нельзя преобразовать в каталоги. Чтобы создать каталог, используйте функцию CreateDirectory или CreateDirectoryEx .
FILE_ATTRIBUTE_ENCRYPTED

0x4000

Чтобы создать зашифрованный файл, используйте функцию CreateFile с атрибутом FILE_ATTRIBUTE_ENCRYPTED . Чтобы преобразовать существующий файл в зашифрованный, используйте функцию EncryptFile .
FILE_ATTRIBUTE_REPARSE_POINT

0x400

Чтобы связать точку повторного аналитики с файлом или каталогом, используйте функцию DeviceIoControl с операцией FSCTL_SET_REPARSE_POINT .
FILE_ATTRIBUTE_SPARSE_FILE

0x200

Чтобы задать разреженный атрибут файла, используйте функцию DeviceIoControl с операцией FSCTL_SET_SPARSE .
 

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

Дополнительные сведения о транзакциях см. в разделе Transactional NTFS.

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

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

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

Транзакция операций

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

Примечание

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

Требования

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

См. также

Константы атрибутов файлов

Функции управления файлами

GetFileAttributesTransacted

Символьные ссылки

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