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


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

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

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

Синтаксис

BOOL SetFileAttributesTransactedA(
  [in] LPCSTR lpFileName,
  [in] DWORD  dwFileAttributes,
  [in] HANDLE hTransaction
);

Параметры

[in] lpFileName

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

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

Кончик

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

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

[in] dwFileAttributes

Атрибуты файла, заданные для файла.

Список значений атрибута файла и их описания см. в константы атрибутов файла. Этот параметр может быть одним или несколькими значениями, объединенными с помощью побитового оператора OR. Однако все остальные значения переопределяются 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. Обратите внимание, что эти операции не выполняются.

Атрибут Настройка
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.

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

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

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

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

операции с транзакцией

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

Заметка

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows Vista [только классические приложения]
минимальный поддерживаемый сервер Windows Server 2008 [только классические приложения]
целевая платформа Виндоус
заголовка winbase.h (включая Windows.h)
библиотеки Kernel32.lib
DLL Kernel32.dll

См. также

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

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

GetFileAttributesTransacted

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

транзакционных NTFS