Используя .NET, вы можете подумать, что определить, какие разрешения назначены для каталога / файла, должно быть довольно легко, так какявляется определенным перечислением FileSystemRights, которое, по-видимому, содержит все возможные разрешения, которые могут иметь файл / каталог, а вызов AccessRule.FileSystemRights возвращает комбинацию этих значений.Однако вскоре вы столкнетесь с некоторыми разрешениями, когда значение в этом свойстве не совпадает ни с одним из значений в перечислении FileSystemRights (я бы хотел, чтобы они не называли некоторые свойства с тем же именем, что и тип, но все же).
Конечным результатом этого является то, что для некоторых файлов / каталогов вы просто не можете определить, какие разрешения им назначены.Если вы делаете AccessRule.FileSystemRights.ToString, то для этих значений вы видите только число, а не описание (например, Modify, Delete, FullControl и т. Д.).Общие числа, которые вы можете увидеть:
-1610612736, –536805376 и 268435456
Чтобы выяснить, каковы эти разрешения на самом деле, вам нужно посмотреть, какие биты установлены, когда вы обрабатываете это числокак 32 отдельных бита, а не как целое число (поскольку целые числа имеют длину 32 бита), и сравните их с этой схемой: http://msdn.microsoft.com/en-us/library/aa374896(v=vs.85).aspx
Так, например, -1610612736 имеет первый бит и третий бит, установленные,это означает, что это GENERIC_READ в сочетании с GENERIC_EXECUTE.Теперь вы можете преобразовать эти общие разрешения в определенные разрешения файловой системы, которым они соответствуют.
Здесь вы можете увидеть, с какими разрешениями сопоставлено каждое общее разрешение: http://msdn.microsoft.com/en-us/library/aa364399.aspx. Просто имейте в виду, что STANDARD_RIGHTS_READ, STANDARD_RIGHTS_EXECUTEи STANDARD_RIGHTS_WRITE - это одно и то же (понятия не имею, почему, мне это кажется странным), и фактически они равны значению FileSystemRights.ReadPermissions.