File.SetAccessControl(String, FileSecurity) Método

Definición

Aplica al archivo especificado las entradas de la lista de control de acceso (ACL) descritas por un objeto FileSecurity.

public:
 static void SetAccessControl(System::String ^ path, System::Security::AccessControl::FileSecurity ^ fileSecurity);
public static void SetAccessControl (string path, System.Security.AccessControl.FileSecurity fileSecurity);
static member SetAccessControl : string * System.Security.AccessControl.FileSecurity -> unit
Public Shared Sub SetAccessControl (path As String, fileSecurity As FileSecurity)

Parámetros

path
String

Archivo al que se van a agregar o del que se van a quitar entradas de la lista de control de acceso (ACL).

fileSecurity
FileSecurity

Objeto FileSecurity que describe una entrada de ACL que se aplica al archivo descrito por el parámetro path.

Excepciones

Se produjo un error de E/S al abrir el archivo.

El parámetro path es null.

No se encuentra el archivo.

El parámetro path especificó un archivo que es de solo lectura.

o bien Esta operación no es compatible con la plataforma actual.

o bien El parámetro path especificó un directorio.

o bien El llamador no dispone del permiso requerido.

El parámetro fileSecurity es null.

Ejemplos

En el ejemplo de código siguiente se usan los GetAccessControl métodos y SetAccessControl para agregar y, a continuación, quitar una entrada de lista de control de acceso (ACL) de un archivo. Para ejecutar este ejemplo, debe proporcionar una cuenta de usuario o grupo válida.

using namespace System;
using namespace System::IO;
using namespace System::Security::AccessControl;

// Adds an ACL entry on the specified file for the specified account.

void AddFileSecurity(String^ fileName, String^ account, 
                        FileSystemRights rights, AccessControlType controlType)
{
    // Get a FileSecurity object that represents the 
    // current security settings.
    FileSecurity^ fSecurity = File::GetAccessControl(fileName);

    // Add the FileSystemAccessRule to the security settings. 
    fSecurity->AddAccessRule(gcnew FileSystemAccessRule
                                   (account,rights, controlType));

    // Set the new access settings.
    File::SetAccessControl(fileName, fSecurity);
}

// Removes an ACL entry on the specified file for the specified account.

void RemoveFileSecurity(String^ fileName, String^ account, 
                        FileSystemRights rights, AccessControlType controlType)
{

    // Get a FileSecurity object that represents the 
    // current security settings.
    FileSecurity^ fSecurity = File::GetAccessControl(fileName);

    // Remove the FileSystemAccessRule from the security settings. 
    fSecurity->RemoveAccessRule(gcnew FileSystemAccessRule
                                      (account,rights, controlType));

    // Set the new access settings.
    File::SetAccessControl(fileName, fSecurity);
}

int main()
{
    try
    {
        String^ fileName = "test.xml";

        Console::WriteLine("Adding access control entry for " + fileName);

        // Add the access control entry to the file.
        AddFileSecurity(fileName, "MYDOMAIN\\MyAccount", 
            FileSystemRights::ReadData, AccessControlType::Allow);

        Console::WriteLine("Removing access control entry from " + fileName);

        // Remove the access control entry from the file.
        RemoveFileSecurity(fileName, "MYDOMAIN\\MyAccount", 
            FileSystemRights::ReadData, AccessControlType::Allow);

        Console::WriteLine("Done.");
    }
    catch (Exception^ ex)
    {
        Console::WriteLine(ex->Message);
    }
}
using System;
using System.IO;
using System.Security.AccessControl;

namespace FileSystemExample
{
    class FileExample
    {
        public static void Main()
        {
            try
            {
                string fileName = "test.xml";

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

                // Add the access control entry to the file.
                AddFileSecurity(fileName, @"DomainName\AccountName",
                    FileSystemRights.ReadData, AccessControlType.Allow);

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

                // Remove the access control entry from the file.
                RemoveFileSecurity(fileName, @"DomainName\AccountName",
                    FileSystemRights.ReadData, AccessControlType.Allow);

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

        // Adds an ACL entry on the specified file for the specified account.
        public static void AddFileSecurity(string fileName, string account,
            FileSystemRights rights, AccessControlType controlType)
        {

            // Get a FileSecurity object that represents the
            // current security settings.
            FileSecurity fSecurity = File.GetAccessControl(fileName);

            // Add the FileSystemAccessRule to the security settings.
            fSecurity.AddAccessRule(new FileSystemAccessRule(account,
                rights, controlType));

            // Set the new access settings.
            File.SetAccessControl(fileName, fSecurity);
        }

        // Removes an ACL entry on the specified file for the specified account.
        public static void RemoveFileSecurity(string fileName, string account,
            FileSystemRights rights, AccessControlType controlType)
        {

            // Get a FileSecurity object that represents the
            // current security settings.
            FileSecurity fSecurity = File.GetAccessControl(fileName);

            // Remove the FileSystemAccessRule from the security settings.
            fSecurity.RemoveAccessRule(new FileSystemAccessRule(account,
                rights, controlType));

            // Set the new access settings.
            File.SetAccessControl(fileName, fSecurity);
        }
    }
}
Imports System.IO
Imports System.Security.AccessControl



Module FileExample

    Sub Main()
        Try
            Dim fileName As String = "test.xml"

            Console.WriteLine("Adding access control entry for " & fileName)

            ' Add the access control entry to the file.
            AddFileSecurity(fileName, "DomainName\AccountName", _
                FileSystemRights.ReadData, AccessControlType.Allow)

            Console.WriteLine("Removing access control entry from " & fileName)

            ' Remove the access control entry from the file.
            RemoveFileSecurity(fileName, "DomainName\AccountName", _
                FileSystemRights.ReadData, AccessControlType.Allow)

            Console.WriteLine("Done.")
        Catch e As Exception
            Console.WriteLine(e)
        End Try

    End Sub


    ' Adds an ACL entry on the specified file for the specified account.
    Sub AddFileSecurity(ByVal fileName As String, ByVal account As String, _
        ByVal rights As FileSystemRights, ByVal controlType As AccessControlType)
  
        ' Get a FileSecurity object that represents the 
        ' current security settings.
        Dim fSecurity As FileSecurity = File.GetAccessControl(fileName)

        ' Add the FileSystemAccessRule to the security settings. 
        Dim accessRule As FileSystemAccessRule = _
            New FileSystemAccessRule(account, rights, controlType)

        fSecurity.AddAccessRule(accessRule)

        ' Set the new access settings.
        File.SetAccessControl(fileName, fSecurity)

    End Sub


    ' Removes an ACL entry on the specified file for the specified account.
    Sub RemoveFileSecurity(ByVal fileName As String, ByVal account As String, _
        ByVal rights As FileSystemRights, ByVal controlType As AccessControlType)

        ' Get a FileSecurity object that represents the 
        ' current security settings.
        Dim fSecurity As FileSecurity = File.GetAccessControl(fileName)

        ' Remove the FileSystemAccessRule from the security settings. 
        fSecurity.RemoveAccessRule(New FileSystemAccessRule(account, _
            rights, controlType))

        ' Set the new access settings.
        File.SetAccessControl(fileName, fSecurity)

    End Sub
End Module

Comentarios

El SetAccessControl método aplica entradas de lista de control de acceso (ACL) a un archivo que representa la lista de ACL no inicializado.

Precaución

La ACL especificada para el fileSecurity parámetro reemplaza la ACL existente para el archivo. Para agregar permisos para un nuevo usuario, use el GetAccessControl método para obtener la ACL existente, modificarla y, a continuación, usarla SetAccessControl para volver a aplicarla al archivo.

Una ACL describe a individuos o grupos que tienen derechos, o no, a acciones específicas en el archivo especificado. Para obtener más información, vea Cómo: Agregar o quitar entradas de la lista de control de acceso.

El SetAccessControl método conserva solo FileSecurity los objetos que se han modificado después de la creación del objeto. Si no se ha modificado un FileSecurity objeto, no se conservará en un archivo. Por lo tanto, no es posible recuperar un objeto de un FileSecurity archivo y volver a aplicar el mismo objeto a otro archivo.

Para copiar información de ACL de un archivo a otro:

  1. Use el GetAccessControl método para recuperar el FileSecurity objeto del archivo de origen.

  2. Cree un nuevo FileSecurity objeto para el archivo de destino.

  3. Use el GetSecurityDescriptorBinaryForm método o GetSecurityDescriptorSddlForm del objeto de origen FileSecurity para recuperar la información de la ACL.

  4. Use el SetSecurityDescriptorBinaryForm método o SetSecurityDescriptorSddlForm para copiar la información recuperada en el paso 3 en el objeto de destino FileSecurity .

  5. Establezca el objeto de destino FileSecurity en el archivo de destino mediante el SetAccessControl método .

En entornos NTFS y ReadAttributes ReadExtendedAttributes se conceden al usuario si el usuario tiene ListDirectory derechos en la carpeta primaria. Para denegar ReadAttributes y ReadExtendedAttributes, denegar ListDirectory en el directorio primario.

Se aplica a

Consulte también