Я объяснил это в блоге http://think-like-a-computer.com/2011/07/24/moving-files-on-the-same-ntfs-volume-does-inherit-permissions/, но это также объясняется ниже.
Когда файл копируется, он должен создать новый файл и назначить ему новый набор разрешений, чтобы он получал разрешения из родительской папки, как вы знаете.
Когда файл перемещается на другой том, на самом деле происходит его копирование на новый том, а старый файл удаляется. Таким образом, тот же процесс повторяется, как указано выше, так как он снова является новым файлом и требует установки разрешений.
Когда файл перемещается в том же объеме, ничего не происходит (на уровне диска). Он просто меняет логический путь к файлу. Фактические данные и физический файл на диске не были затронуты или изменены. Вы когда-нибудь замечали, что когда вы перемещаете файл 5 ГБ в другую папку на том же диске, это делается практически мгновенно? Вот почему, потому что он фактически не перемещался, но указатель на то, где файл логически существует, изменился. Так как он не был изменен, разрешения также не меняются.
Это причина такого поведения.
Изменить: то, что я забыл упомянуть ... Статья MS не совсем точна. MS цитата:
По умолчанию объект наследует разрешения от своего родительского объекта, либо во время создания, либо когда он копируется или перемещается в родительскую папку. Единственное исключение из этого правила возникает при перемещении объекта в другую папку на том же томе. В этом случае исходные разрешения сохраняются.
Приведенная выше цитата относится только к объектам, которым были даны ТОЛЬКО определенные разрешения sec (отключить наследование).
Как уже упоминалось в моих комментариях, это все о том, чтобы записи ACL были максимально эффективными. Рассмотрим следующий пример:
Для простоты объяснения, скажем, у вас есть папка, позволяющая пользователям изменять только права. Ниже приведены тысячи файлов, и ни один из них не имеет явных разрешений. Не очень эффективно создавать списки ACL для каждого файла, поскольку они имеют одинаковые права доступа, поэтому он устанавливает ОДНУ запись ACL для папки. Этот следующий бит очень важен для понимания; Сами файлы не имеют ACL PERMS. Поэтому, когда вы перемещаете какой-либо из этих файлов в новую папку на том же томе, MS заявляет, что с ним перемещаются привилегии (как указано выше). Задай себе вопрос .... как? Там не было никаких разрешений на файл в первую очередь для перемещения. Это на самом деле неверно, и я только что проверил это сейчас, чтобы подтвердить это. Допустим, папка назначения, в которую вы перемещаете файл, имеет права доступа, чтобы разрешить изменять права только для каждой группы. Хорошо, поскольку файл не имеет ACL напрямую, он наследует ACL родительской папки. Это означает, что разрешения изменились с изменения пользователя (старая папка) на изменение каждого (новая папка).
Заметьте разницу ?? На этот раз перемещение файла в другую папку на том же томе фактически изменило правила, что-то, что MS говорит, что не делает. Я только что нашел ошибку в документации MS с 2000 года?
Теперь рассмотрим тот же сценарий при использовании явных разрешений. Если вы установили явные разрешения для файла в этой папке (наследование отключено), который, например, запрещает пользователям доступ для чтения, он теперь создает новую запись ACL специально для этого файла. Теперь, когда вы перемещаете файл в новое место, он имеет запись ACL, непосредственно связанную с ним. В этом случае перемещение файла в новое место на том же томе ОСТАВЛЯЕТ его разрешения (как утверждает MS)!