Ich habe eine Anwendung geschrieben, die alle Dateisystemberechtigungen für ein Verzeichnis überprüft.
Ein Verzeichnis hat eine Reihe von Zugriffsregeln (vom Typ FileSystemAccessRule
).
Jede Zugriffsregel hat eine Eigenschaft FileSystemRights
, die eine Flag-Enumeration ist.
Wenn ich das ausführe, stoße ich immer auf einen FileSystemRights
-Wert von 268435456
(was zu 0x10000000
im Hexadezimalformat kommt).
Dieser Wert erscheint nur in der Aufzählung nicht! Es ist tatsächlich höher als der höchste einzelne Flag-Wert ( Synchronize
, mit einem Wert von 0x100000
).
Weiß jemand was das ist?
Siehe Ссылка
Von dieser Seite:
Wenn Sie .NET verwenden, denken Sie vielleicht, dass Sie bestimmen, welche Berechtigungen sind einem Verzeichnis / einer Datei zugewiesen ist, sollte ziemlich einfach sein, da es ein FileSystemRights Enum definiert, das scheinbar alle möglichen enthält Berechtigung, die eine Datei / ein Verzeichnis haben und aufrufen kann AccessRule.FileSystemRights gibt eine Kombination dieser Werte zurück. Sie werden jedoch bald auf einige Berechtigungen stoßen, bei denen der Wert in Diese Eigenschaft entspricht keinem der Werte in FileSystemRights Enum (Ich wünschte, sie würden keine Eigenschaften mit dem gleichen Namen nennen als ein Typ, aber hey).
Das Endergebnis davon ist, dass Sie für einige Dateien / Verzeichnisse einfach kann nicht feststellen, welche Berechtigungen ihnen zugewiesen sind. Wenn Sie tun AccessRule.FileSystemRights.ToString dann für diese Werte alles, was Sie sehen ist eine Nummer und keine Beschreibung (z. B. Ändern, Löschen, Vollzugriff etc). Häufige Zahlen, die Sie sehen können, sind:
-1610612736, -536805376 und 268435456
Um herauszufinden, was diese Berechtigungen tatsächlich sind, müssen Sie sich ansehen welche Bits gesetzt sind, wenn Sie diese Zahl als 32 getrennte Bits behandeln statt als Integer (wie Integers 32 Bit lang sind) und vergleichen sie zu diesem Diagramm: Ссылка
So hat zum Beispiel -1610612736 das erste Bit und das dritte Bit gesetzt, was bedeutet, dass es GENERIC_READ kombiniert mit GENERIC_EXECUTE ist. Also jetzt Sie können diese generischen Berechtigungen in die spezifische Datei konvertieren Systemberechtigungen, denen sie entsprechen.
Sie können sehen, welchen Berechtigungen die einzelnen generischen Berechtigungen hier zugeordnet sind: Ссылка . Sei dir dessen nur bewusst dass STANDARD_RIGHTS_READ, STANDARD_RIGHTS_EXECUTE und STANDARD_RIGHTS_WRITE sind alle gleich (keine Ahnung warum, scheint seltsam für mich) und eigentlich alle gleich FileSystemRights.ReadPermissions-Wert.