Zugriffsmaske
Die Funktion der Zugriffsmaske besteht darin, Zugriffsrechte in kompakter Form zu beschreiben. Um die Zugriffsverwaltung zu vereinfachen, enthält die Zugriffsmaske einen Satz von vier Bits, die generischen Rechte, die mithilfe der Funktion RtlMapGenericMask in einen Satz detaillierterer Rechte übersetzt werden..
Die folgende Abbildung veranschaulicht die Zugriffsmaske,
Die generischen Rechte sind:
GENERIC_READ – das Recht, die vom Objekt verwalteten Informationen zu lesen.
GENERIC_WRITE – das Recht, die vom Objekt verwalteten Informationen zu schreiben.
GENERIC_EXECUTE – das Recht, das Objekt auszuführen oder alternativ zu betrachten.
GENERIC_ALL – das Recht zum Lesen, Schreiben und Ausführen des Objekts.
Diese Rechte können kombiniert werden. Beispielsweise können GENERIC_READ und GENERIC_WRITE beide angefordert werden. Die resultierende Zuordnung erfordert die Vereinigung der Rechte, die für jedes generische Recht erforderlich sind. Dieses Paradigma imitiert UNIX-Zugriffsbits "rwx", die verwendet werden, um den Zugriff auf UNIX-Ressourcen zu steuern. Die generischen Rechte in der Zugriffsmaske vereinfachen die Anwendungsentwicklung unter Windows, da diese Rechte die unterschiedlichen Sicherheitsrechte für verschiedene Objekttypen maskieren.
Der folgende Satz von Standardrechten gilt für alle Objekttypen:
DELETE – das Recht, das jeweilige Objekt zu löschen.
READ_CONTROL – das Recht, die Steuerelementinformationen (Sicherheitsinformationen) für das Objekt zu lesen.
WRITE_DAC – das Recht, die Steuerelementinformationen (Sicherheitsinformationen) für das Objekt zu ändern.
WRITE_OWNER – das Recht, die Besitzer-SID des Objekts zu ändern. Beachten Sie, dass Besitzer immer das Recht haben, das Objekt zu ändern.
SYNCHRONIZE – das Recht, auf das angegebene Objekt zu warten (vorausgesetzt, das Warten ist ein gültiges Konzept für das Objekt).
Die unteren 16 Bits der Zugriffsmaske stellen die spezifischen Rechte dar. Die Bedeutung dieser spezifischen Rechte ist für das betreffende Objekt einzigartig. Bei Dateisystemen sind die Hauptinteressen die spezifischen Rechte für Dateiobjekte. Bei Dateiobjekten werden bestimmte Rechte normalerweise unterschiedlich interpretiert, je nachdem, ob das Dateiobjekt eine Datei oder ein Verzeichnis darstellt. Bei Dateien ist die normale Interpretation:
FILE_READ_DATA – das Recht, Daten aus der angegebenen Datei zu lesen.
FILE_WRITE_DATA – das Recht, Daten in die angegebene Datei zu schreiben (innerhalb des vorhandenen Bereichs der Datei).
FILE_APPEND_DATA – das Recht, die angegebene Datei zu erweitern.
FILE_READ_EA – das Recht, die erweiterten Attribute der Datei zu lesen.
FILE_WRITE_EA – das Recht, die erweiterten Attribute der Datei zu ändern.
FILE_EXECUTE – das Recht, die angegebene Datei lokal auszuführen. Das Ausführen einer auf einer Remotefreigabe gespeicherten Datei erfordert Leseberechtigungen, da die Datei vom Server gelesen wird, aber auf dem Client ausgeführt wird.
FILE_READ_ATTRIBUTES – das Recht, die Attributinformationen der Datei zu lesen.
FILE_WRITE_ATTRIBUTES – das Recht, die Attributinformationen der Datei zu ändern.
Bei Verzeichnissen werden dieselben Bitwerte verwendet, ihre Interpretation unterscheidet sich jedoch in einigen der folgenden Fälle:
FILE_LIST_DIRECTORY – das Recht, den Inhalt des Verzeichnisses auflisten zu können.
FILE_ADD_FILE – das Recht, eine neue Datei im Verzeichnis zu erstellen.
FILE_ADD_SUBDIRECTORY – das Recht, ein neues Verzeichnis (Unterverzeichnis) innerhalb des Verzeichnisses zu erstellen.
FILE_READ_EA – das Recht, die erweiterten Attribute des angegebenen Verzeichnisses zu lesen.
FILE_WRITE_EA – das Recht, die erweiterten Attribute des angegebenen Verzeichnisses zu schreiben.
FILE_TRAVERSE – das Recht auf Zugriff auf Objekte innerhalb des Verzeichnisses. Das FILE_TRAVERSE Zugriffsrecht unterscheidet sich von dem FILE_LIST_DIRECTORY Zugriffsrecht. Das Halten des FILE_LIST_DIRECTORY-Zugriffsrechts ermöglicht es einer Entität, eine Liste der Inhalte eines Verzeichnisses zu erhalten, während das FILE_TRAVERSE-Zugriffsrecht einer Entität das Recht gibt, auf das Objekt zuzugreifen. Ein Aufrufer ohne das FILE_LIST_DIRECTORY-Zugriffsrecht könnte eine Datei öffnen, die bereits vorhanden war, aber keine Liste der Inhalte des Verzeichnisses abrufen kann.
FILE_DELETE_CHILD – das Recht, eine Datei oder ein Verzeichnis innerhalb des aktuellen Verzeichnisses zu löschen.
FILE_READ_ATTRIBUTES – das Recht, die Attributinformationen eines Verzeichnisses zu lesen.
FILE_WRITE_ATTRIBUTES – das Recht, die Attributinformationen eines Verzeichnisses zu ändern.
Der E/A-Manager definiert die tatsächliche Zuordnung generischer Rechte zu Standard- und spezifischen Rechten für Dateiobjekte. Ein Dateisystem kann diese Zuordnung mit IoGetFileObjectGenericMapping abrufen. Normalerweise führt der E/A-Manager diese Zuordnung während IRP_MJ_CREATE Verarbeitung durch, bevor das Dateisystem aufgerufen wird. Eine Dateisystemüberprüfung der Sicherheit für bestimmte Vorgänge (z. B. spezielle FSCTL-Vorgänge) muss diese Zuordnung jedoch selbst durchführen.