(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

DirectoryInfo.SetAccessControl-Methode

Wendet von einem DirectorySecurity-Objekt beschriebene Einträge in Zugriffssteuerungslisten auf das Verzeichnis an, das vom aktuellen DirectoryInfo-Objekt beschrieben wird.

Namespace:  System.IO
Assembly:  mscorlib (in mscorlib.dll)

public void SetAccessControl(
	DirectorySecurity directorySecurity
)

Parameter

directorySecurity
Typ: System.Security.AccessControl.DirectorySecurity
Ein Objekt, das einen Eintrag in einer Zugriffssteuerungsliste beschreibt, der auf das vom path-Parameter beschriebene Verzeichnis angewendet werden soll.

AusnahmeBedingung
ArgumentNullException

Der directorySecurity-Parameter ist null.

SystemException

Die Datei wurde nicht gefunden und konnte nicht geändert werden.

UnauthorizedAccessException

Der aktuelle Prozess hat keinen Zugriff zum Öffnen der Datei.

PlatformNotSupportedException

Das aktuelle Betriebssystem ist nicht Microsoft Windows 2000 oder höher.

In einer Zugriffssteuerungsliste (ACL) beschreibt Einzelpersonen und/oder Gruppen, die vor, oder hat, Rechte nicht bestimmten Aktionen in der angegebenen Datei oder Verzeichnis. Weitere Informationen finden Sie unter Übersicht über die ACL-Technologie und Gewusst wie: Hinzufügen oder Entfernen von Zugriffssteuerungslisten-Einträgen.

Die SetAccessControl-Methode gilt ACL-Einträge auf eine Datei an, die die noninherited ACL-Liste darstellt.

WarnhinweisVorsicht

Die für die directorySecurity angegebene Zugriffssteuerungsliste ersetzt die vorhandene Zugriffssteuerungsliste für das Verzeichnis. Um Berechtigungen für einen neuen Benutzer hinzuzufügen, rufen Sie die vorhandene Zugriffssteuerungsliste mithilfe der GetAccessControl-Methode ab, und ändern Sie die Zugriffssteuerungsliste.

Die SetAccessControl-Methode behält nur DirectorySecurity-Objekte bei, die nach der Erstellung geändert wurden. Wenn ein DirectorySecurity-Objekt nicht geändert wurde, wird es nicht als Datei beibehalten. Es ist daher nicht möglich, ein und dasselbe DirectorySecurity-Objekt von einer Datei abzurufen und einer anderen Datei zuzuweisen.

So kopieren Sie ACL-Informationen aus einer Datei in eine andere:

  1. Rufen Sie das DirectorySecurity-Objekt mithilfe der GetAccessControl-Methode aus der Quelldatei ab.

  2. Erstellen Sie ein neues DirectorySecurity-Objekt für die Zieldatei.

  3. Rufen Sie die ACL-Informationen mithilfe der GetSecurityDescriptorBinaryForm-Methode oder der GetSecurityDescriptorSddlForm-Methode des DirectorySecurity-Quellobjekts ab.

  4. Kopieren Sie die in Schritt 3 abgerufenen Informationen mithilfe der SetSecurityDescriptorBinaryForm-Methode oder der SetSecurityDescriptorSddlForm-Methode in das DirectorySecurity-Zielobjekt.

  5. Weisen Sie das DirectorySecurity-Zielobjekt mit der SetAccessControl-Methode der Zieldatei zu.

Im folgenden Beispiel werden die GetAccessControl-Methode und die SetAccessControl-Methode verwendet, um einem Verzeichnis einen Eintrag in der Zugriffssteuerungsliste hinzuzufügen und diesen dann wieder aus dem Verzeichnis zu entfernen.


using System;
using System.IO;
using System.Security.AccessControl;

namespace FileSystemExample
{
    class DirectoryExample
    {
        public static void Main()
        {
            try
            {
                string DirectoryName = "TestDirectory";

                Console.WriteLine("Adding access control entry for " + DirectoryName);

                // Add the access control entry to the directory.
                AddDirectorySecurity(DirectoryName, @"MYDOMAIN\MyAccount", FileSystemRights.ReadData, AccessControlType.Allow);

                Console.WriteLine("Removing access control entry from " + DirectoryName);

                // Remove the access control entry from the directory.
                RemoveDirectorySecurity(DirectoryName, @"MYDOMAIN\MyAccount", FileSystemRights.ReadData, AccessControlType.Allow);

                Console.WriteLine("Done.");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            Console.ReadLine();
        }

        // Adds an ACL entry on the specified directory for the specified account.
        public static void AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
        {
            // Create a new DirectoryInfo object.
            DirectoryInfo dInfo = new DirectoryInfo(FileName);

            // Get a DirectorySecurity object that represents the 
            // current security settings.
            DirectorySecurity dSecurity = dInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings. 
            dSecurity.AddAccessRule(new FileSystemAccessRule(Account,
                                                            Rights,
                                                            ControlType));

            // Set the new access settings.
            dInfo.SetAccessControl(dSecurity);

        }

        // Removes an ACL entry on the specified directory for the specified account.
        public static void RemoveDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
        {
            // Create a new DirectoryInfo object.
            DirectoryInfo dInfo = new DirectoryInfo(FileName);

            // Get a DirectorySecurity object that represents the 
            // current security settings.
            DirectorySecurity dSecurity = dInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings. 
            dSecurity.RemoveAccessRule(new FileSystemAccessRule(Account,
                                                            Rights,
                                                            ControlType));

            // Set the new access settings.
            dInfo.SetAccessControl(dSecurity);

        }
    }
}



.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft