A>У меня такое ощущение, что проблема в том, что файлы, на которых происходят ошибки, открываются и удерживаются более крутыми пользователями нежели admin.
AFAIK, для se_backup_privilege это не важно. Либо эта привилегия есть, либо нет. Правда есть ещё такая штука как Protected Process “Light” (PPL). См. ссылку на тему ниже.
A>Например, файл %ProgramData%\Microsoft\Windows Defender\Scans\MpDiag.bin относится к Windows Defender, и его я не могу скопировать (у меня нет задачи копировать именно его, просто пример).
Пытаюсь под админом с включенной привилегией 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. Это не универсальный способ копирования или я что-то делаю не так?
в токене потока или процесса через AdjustTokenPrivileges?
> ERROR_SHARING_VIOLATION
как я понимаю, если файл открыт в эксклюзивном режиме, то второй дескриптор уже не открыть. Лучше проверить экспериментом.
> или ERROR_ACCESS_DENIED. Это не универсальный способ копирования или я что-то делаю не так?
полагаю, что зависит от поддержки на стороне файлового сервера (если речь о сетевом доступе).
Если проблема проявляется локально, то можно настроить аудит файловой системы.
Записи в security log будут содержать причину отказа (если она связана именно с security).
Здравствуйте, 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, и его я не могу скопировать (у меня нет задачи копировать именно его, просто пример).
Здравствуйте, 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 прочитать содержимое
Здравствуйте, kov_serg, Вы писали:
_>Еще можно через FSCTL_GET_RETRIEVAL_POINTERS прочитать содержимое
Но для использования DeviceIoControl мне в любом случае нужен handle, который я не могу получить. И еще возникает вопрос со всякими compressed и sparsed файлами.
A>Но для использования DeviceIoControl мне в любом случае нужен handle, который я не могу получить. И еще возникает вопрос со всякими compressed и sparsed файлами.
Можно ещё через Volume Shadow Copy подойти к проблеме.