Es wird ein FileSystemRights-Wert gefunden, der in der Aufzählung nicht definiert ist

8

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?

    
Andrew Shepherd 14.03.2012, 01:47
quelle

3 Antworten

11

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.

    
Chris Shain 14.03.2012, 01:54
quelle
4

von Ссылка

268435456 - Vollzugriff

-536805376 - Ändern, Synchronisieren

-1610612736 - ReadAndExecute, Synchronisieren

(um etwas Mathe zu sparen)

    
flow in 18.11.2014 00:29
quelle
2

Hier ist meine Lösung, um die FileSystemRights so zu korrigieren, dass sie zu der Enumeration passen.

Es gibt mehrere Dokumente darüber. Die Referenzen sind im Code enthalten.

%Vor%     
boboes 20.11.2015 14:52
quelle

Tags und Links