FILE_FLAG_BACKUP_SEMANTICS
От: Aniskin  
Дата: 18.09.25 01:03
Оценка:
Пытаюсь под админом с включенной привилегией SE_BACKUP_NAME копировать заблокированные файлы через

1) CreateFile(AFileName, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)
2) BackupRead(Handle, Buffer, BufferSize, Read, False, False, Context)

В целом работает, но иногда все же CreateFile может дать ошибку ERROR_SHARING_VIOLATION или ERROR_ACCESS_DENIED. Это не универсальный способ копирования или я что-то делаю не так?
Re: FILE_FLAG_BACKUP_SEMANTICS
От: m2user  
Дата: 18.09.25 05:17
Оценка:
> с включенной привилегией SE_BACKUP_NAME

в токене потока или процесса через AdjustTokenPrivileges?

> ERROR_SHARING_VIOLATION


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

> или ERROR_ACCESS_DENIED. Это не универсальный способ копирования или я что-то делаю не так?


полагаю, что зависит от поддержки на стороне файлового сервера (если речь о сетевом доступе).

Если проблема проявляется локально, то можно настроить аудит файловой системы.
Записи в security log будут содержать причину отказа (если она связана именно с security).
Re[2]: FILE_FLAG_BACKUP_SEMANTICS
От: Aniskin  
Дата: 18.09.25 13:44
Оценка:
Здравствуйте, m2user, Вы писали:

>> с включенной привилегией SE_BACKUP_NAME


M>в токене потока или процесса через AdjustTokenPrivileges?


через AdjustTokenPrivileges.

>> ERROR_SHARING_VIOLATION


M>как я понимаю, если файл открыт в эксклюзивном режиме, то второй дескриптор уже не открыть. Лучше проверить экспериментом.


Если в другой процесс открывает файл через CreateFile(AFileName, GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0), то такой файл нормально копируется через BackupRead.

У меня такое ощущение, что проблема в том, что файлы, на которых происходят ошибки, открываются и удерживаются более крутыми пользователями нежели admin. Например, файл %ProgramData%\Microsoft\Windows Defender\Scans\MpDiag.bin относится к Windows Defender, и его я не могу скопировать (у меня нет задачи копировать именно его, просто пример).
Re: FILE_FLAG_BACKUP_SEMANTICS
От: kov_serg Россия  
Дата: 18.09.25 13:58
Оценка:
Здравствуйте, Aniskin, Вы писали:

A>Пытаюсь под админом с включенной привилегией SE_BACKUP_NAME копировать заблокированные файлы через


A>1) CreateFile(AFileName, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)

A>2) BackupRead(Handle, Buffer, BufferSize, Read, False, False, Context)

A>В целом работает, но иногда все же CreateFile может дать ошибку ERROR_SHARING_VIOLATION или ERROR_ACCESS_DENIED. Это не универсальный способ копирования или я что-то делаю не так?


Еще можно через FSCTL_GET_RETRIEVAL_POINTERS прочитать содержимое
Re[2]: FILE_FLAG_BACKUP_SEMANTICS
От: Aniskin  
Дата: 18.09.25 14:27
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Еще можно через FSCTL_GET_RETRIEVAL_POINTERS прочитать содержимое


Но для использования DeviceIoControl мне в любом случае нужен handle, который я не могу получить. И еще возникает вопрос со всякими compressed и sparsed файлами.
Re[3]: FILE_FLAG_BACKUP_SEMANTICS
От: m2user  
Дата: 18.09.25 14:57
Оценка: 2 (1)
A>У меня такое ощущение, что проблема в том, что файлы, на которых происходят ошибки, открываются и удерживаются более крутыми пользователями нежели admin.

AFAIK, для se_backup_privilege это не важно. Либо эта привилегия есть, либо нет. Правда есть ещё такая штука как Protected Process “Light” (PPL). См. ссылку на тему ниже.

A>Например, файл %ProgramData%\Microsoft\Windows Defender\Scans\MpDiag.bin относится к Windows Defender, и его я не могу скопировать (у меня нет задачи копировать именно его, просто пример).


см. Не получается переименовать файл в %PF%\WindowsApp
Там несколько моих комментов.
Re[3]: FILE_FLAG_BACKUP_SEMANTICS
От: m2user  
Дата: 18.09.25 14:58
Оценка:
A>Но для использования DeviceIoControl мне в любом случае нужен handle, который я не могу получить. И еще возникает вопрос со всякими compressed и sparsed файлами.

Можно ещё через Volume Shadow Copy подойти к проблеме.
Re[4]: FILE_FLAG_BACKUP_SEMANTICS
От: Aniskin  
Дата: 18.09.25 15:26
Оценка:
Здравствуйте, m2user, Вы писали:

M>есть ещё такая штука как Protected Process “Light” (PPL).


Вероятно, это и есть мой случай.
Re[4]: FILE_FLAG_BACKUP_SEMANTICS
От: Aniskin  
Дата: 18.09.25 15:27
Оценка:
Здравствуйте, m2user, Вы писали:

M>Можно ещё через Volume Shadow Copy подойти к проблеме.


Как я помню, этот метод заблокирует весть диск, что в моем случае не приемлемо.
Re[5]: FILE_FLAG_BACKUP_SEMANTICS
От: m2user  
Дата: 18.09.25 15:50
Оценка:
M>>Можно ещё через Volume Shadow Copy подойти к проблеме.
A>Как я помню, этот метод заблокирует весть диск, что в моем случае не приемлемо.

Нет, там создается CoW (или RoW) снапшот, и ничего не блокируется.
Правда права на файлах там по идее будут те же.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.