Функция 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_REPARSE_POINT
0x400 |
Чтобы связать точку повторного определения с файлом или каталогом, используйте функцию DeviceIoControl |
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 |
См. также
Константы атрибутов файлов