Переместить папку между дисками без изменения дескриптора безопасности - PullRequest
1 голос
/ 02 апреля 2011

Я хочу переместить папку с одного диска (например, C) на другой (скажем, D) без изменения дескриптора безопасности. SHFileOperation может перемещать папку, но новая папка на D всегда наследует разрешение от родительской папки. Чтобы не влиять на другие подпапки в той же родительской папке, я не могу изменить родительскую папку, чтобы перестать распространять ее разрешения на своих дочерних.

Я использовал SetSecurityDescriptorControl с SE_DACL_PROTECTED, чтобы отключить наследование при создании папки на C. Кажется, что он не работает, когда папка перемещается в другую строку. Я также попытался установить информацию о безопасности для новой папки на D, удалив старые записи ACE. Тем не менее, эти унаследованные ACE не могут быть удалены.

Существует реестр ForceCopyAclwithFile (http://thedailyreviewer.com/server/view/copy-folder-w-user-permission-intact-10274759), но я не хочу его использовать из-за его глобального воздействия на систему.

Как я могу использовать Windows API для перемещения папок между дисками без изменения разрешения? Что я здесь упустил?

Спасибо Leon

1 Ответ

1 голос
/ 08 августа 2011

Вы можете использовать BackupRead и BackupWrite для перемещения каталогов между томами с сохранением безопасности NTFS.

BackupRead: http://msdn.microsoft.com/en-us/library/aa362509(VS.85).aspx

BackupWrite: http://msdn.microsoft.com/en-us/library/aa362511(VS.85).aspx

Сначала вам нужно будет создать папку в месте назначения, а затем открыть обе папки с помощью CreateFile, чтобы получить к ним указатели.

Вашему процессу потребуется получить привилегии резервного копирования и восстановления, и вам нужно передать FILE_FLAG_BACKUP_SEMANTICS в CreateFile.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...