FileInfo.SetAccessControl(FileSecurity) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Aplica entradas acl (lista de controle de acesso) descritas por um FileSecurity objeto ao arquivo descrito pelo objeto atual FileInfo .
public:
void SetAccessControl(System::Security::AccessControl::FileSecurity ^ fileSecurity);
public void SetAccessControl(System.Security.AccessControl.FileSecurity fileSecurity);
member this.SetAccessControl : System.Security.AccessControl.FileSecurity -> unit
Public Sub SetAccessControl (fileSecurity As FileSecurity)
Parâmetros
- fileSecurity
- FileSecurity
Um FileSecurity objeto que descreve uma entrada acl (lista de controle de acesso) a ser aplicada ao arquivo atual.
Exceções
O fileSecurity parâmetro é null.
Não foi possível encontrar ou modificar o arquivo.
O processo atual não tem acesso para abrir o arquivo.
Exemplos
O exemplo de código a seguir usa o GetAccessControl método e o SetAccessControl método para adicionar e, em seguida, remover uma entrada ACL de um arquivo. Você deve fornecer uma conta de usuário ou grupo válida para executar este exemplo.
using System;
using System.IO;
using System.Security.AccessControl;
namespace FileSystemExample
{
class FileExample
{
public static void Main()
{
try
{
string FileName = "c:/test.xml";
Console.WriteLine("Adding access control entry for " + FileName);
// Add the access control entry to the file.
// Before compiling this snippet, change MyDomain to your
// domain name and MyAccessAccount to the name
// you use to access your domain.
AddFileSecurity(FileName, @"MyDomain\MyAccessAccount", FileSystemRights.ReadData, AccessControlType.Allow);
Console.WriteLine("Removing access control entry from " + FileName);
// Remove the access control entry from the file.
// Before compiling this snippet, change MyDomain to your
// domain name and MyAccessAccount to the name
// you use to access your domain.
RemoveFileSecurity(FileName, @"MyDomain\MyAccessAccount", 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
)
{
// Create a new FileInfo object.
FileInfo fInfo = new(FileName);
// Get a FileSecurity object that represents the
// current security settings.
FileSecurity fSecurity = fInfo.GetAccessControl();
// Add the FileSystemAccessRule to the security settings.
fSecurity.AddAccessRule(new FileSystemAccessRule(Account,
Rights,
ControlType));
// Set the new access settings.
fInfo.SetAccessControl(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
)
{
// Create a new FileInfo object.
FileInfo fInfo = new(FileName);
// Get a FileSecurity object that represents the
// current security settings.
FileSecurity fSecurity = fInfo.GetAccessControl();
// Add the FileSystemAccessRule to the security settings.
fSecurity.RemoveAccessRule(new FileSystemAccessRule(Account,
Rights,
ControlType));
// Set the new access settings.
fInfo.SetAccessControl(fSecurity);
}
}
}
//This code produces output similar to the following;
//results may vary based on the computer/file structure/etc.:
//
//Adding access control entry for c:\test.xml
//Removing access control entry from c:\test.xml
//Done.
//
Imports System.IO
Imports System.Security.AccessControl
Module FileExample
Sub Main()
Try
Dim FileName As String = "c:\test.xml"
Console.WriteLine("Adding access control entry for " & FileName)
' Add the access control entry to the file.
' Before compiling this snippet, change MyDomain to your
' domain name and MyAccessAccount to the name
' you use to access your domain.
AddFileSecurity(FileName, "MyDomain\\MyAccessAccount", FileSystemRights.ReadData, AccessControlType.Allow)
Console.WriteLine("Removing access control entry from " & FileName)
' Remove the access control entry from the file.
' Before compiling this snippet, change MyDomain to your
' domain name and MyAccessAccount to the name
' you use to access your domain.
RemoveFileSecurity(FileName, "MyDomain\\MyAccessAccount", 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)
' Create a new FileInfo object.
Dim fInfo As New FileInfo(FileName)
' Get a FileSecurity object that represents the
' current security settings.
Dim fSecurity As FileSecurity = fInfo.GetAccessControl()
' Add the FileSystemAccessRule to the security settings.
fSecurity.AddAccessRule(New FileSystemAccessRule(Account, Rights, ControlType))
' Set the new access settings.
fInfo.SetAccessControl(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)
' Create a new FileInfo object.
Dim fInfo As New FileInfo(FileName)
' Get a FileSecurity object that represents the
' current security settings.
Dim fSecurity As FileSecurity = fInfo.GetAccessControl()
' Add the FileSystemAccessRule to the security settings.
fSecurity.RemoveAccessRule(New FileSystemAccessRule(Account, Rights, ControlType))
' Set the new access settings.
fInfo.SetAccessControl(fSecurity)
End Sub
End Module
'This code produces output similar to the following;
'results may vary based on the computer/file structure/etc.:
'
'Adding access control entry for c:\test.xml
'Removing access control entry from c:\test.xml
'Done.
'
Comentários
O SetAccessControl método aplica entradas acl (lista de controle de acesso) ao arquivo atual que representa a lista de ACL não herdada.
Use o SetAccessControl método sempre que precisar adicionar ou remover entradas ACL de um arquivo.
Caution
A ACL especificada para o fileSecurity parâmetro substitui a ACL existente para o arquivo. Para adicionar permissões para um novo usuário, use o GetAccessControl método para obter a ACL existente, modificá-la e, em seguida, usá-la SetAccessControl para aplicá-la de volta ao arquivo.
Uma ACL descreve indivíduos e grupos que têm ou não direitos a ações específicas no arquivo especificado. Para obter mais informações, consulte Como adicionar ou remover entradas da lista de controle de acesso.
O SetAccessControl método persiste apenas FileSecurity os objetos que foram modificados após a criação do objeto. Se um FileSecurity objeto não tiver sido modificado, ele não será mantido em um arquivo. Portanto, não é possível recuperar um FileSecurity objeto de um arquivo e reaplicar o mesmo objeto para outro arquivo.
Para copiar informações de ACL de um arquivo para outro:
Use o GetAccessControl método para recuperar o FileSecurity objeto do arquivo de origem.
Crie um novo FileSecurity objeto para o arquivo de destino.
Use o método ou GetSecurityDescriptorSddlForm o GetSecurityDescriptorBinaryForm objeto de origem FileSecurity para recuperar as informações de ACL.
Use o SetSecurityDescriptorBinaryForm método ou SetSecurityDescriptorSddlForm o método para copiar as informações recuperadas na etapa 3 para o objeto de destino FileSecurity .
Defina o objeto de destino FileSecurity para o arquivo de destino usando o SetAccessControl método.