Cómo establecer mediante programación los permisos de carpeta de sistema de archivos NTFS utilizando Interfaces de servicio de Active Directory en Microsoft Visual C#

Se aplica a: Windows Servers

INTRODUCCIÓN


En este artículo paso a paso se describe cómo establecer mediante programación los permisos de carpeta de sistema de archivos NTFS utilizando Active Directory Service Interfaces (ADSI) en Microsoft Visual C#.

Más información


Generar la aplicación de ejemplo

Para ejecutar la siguiente aplicación de ejemplo, debe tener el archivo ADsSecurity.dll y el archivo ADsSecurity.dll instalado. Estos archivos se incluyen con el kit de desarrollo de software (SDK) para Active Directory Service Interfaces 2.5. Para descargar el SDK para Active Directory Service Interfaces 2.5, visite el siguiente sitio Web de Microsoft:Nota: Para ejecutar la aplicación de ejemplo, debe tener credenciales administrativas en el equipo. Para generar la aplicación de ejemplo, siga estos pasos:
  1. Inicie Microsoft Visual Studio .NET o Microsoft Visual Studio 2005.
  2. En el menú archivo , haga clic ennuevoy, a continuación, haga clic en proyecto.
  3. En los Proyectos de Visual C#, haga clic enAplicación para Windows en plantillas. Nota: En Visual Studio 2005, los Proyectos de Visual C# se cambia a Visual C#.
  4. En el cuadro nombre , escribaNTFSPermissionsy, a continuación, haga clic enAceptar.
  5. Agregue un control Button al formulario Form1.
  6. En el menú Proyecto, haga clic en Agregar referencia.
  7. Haga clic en la ficha COM , haga clic para seleccionar los elementos siguientes y, a continuación, haga clic en Aceptar:
    • Biblioteca de tipos Active DS
    • Biblioteca de tipos ADsSecurity 2.5
  8. Haga clic en el formulario Form1 y, a continuación, haga clic enVer código.
  9. Agregue las siguientes instrucciones using al principio del código fuente en el formulario Form1.
    using ADSSECURITYLib;using ActiveDs;
  10. Agregue el método siguiente a la clase Form1 .
    public void SetPermissions(String vPath, String UserName ){ADsSecurity objADsSec;SecurityDescriptor objSecDes;AccessControlList objDAcl;AccessControlEntry objAce1;AccessControlEntry objAce2;Object objSIdHex;ADsSID objSId;objADsSec = new ADsSecurityClass();objSecDes = (SecurityDescriptor) (objADsSec.GetSecurityDescriptor("FILE://" + vPath));objDAcl = (AccessControlList)objSecDes.DiscretionaryAcl;objSId = new ADsSIDClass();objSId.SetAs((int)ADSSECURITYLib.ADS_SID_FORMAT.ADS_SID_SAM, UserName.ToString());objSIdHex = objSId.GetAs((int)ADSSECURITYLib.ADS_SID_FORMAT.ADS_SID_SDDL);// Add a new access control entry (ACE) object (objAce) so that the user has Full Control permissions on NTFS file system files.objAce1 = new AccessControlEntryClass();objAce1.Trustee = (objSIdHex).ToString();objAce1.AccessMask = (int)ActiveDs.ADS_RIGHTS_ENUM.ADS_RIGHT_GENERIC_ALL;objAce1.AceType = (int)ActiveDs.ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_ALLOWED;objAce1.AceFlags = (int)ActiveDs.ADS_ACEFLAG_ENUM.ADS_ACEFLAG_INHERIT_ACE | (int)ActiveDs.ADS_ACEFLAG_ENUM.ADS_ACEFLAG_INHERIT_ONLY_ACE | 1;objDAcl.AddAce(objAce1);// Add a new access control entry object (objAce) so that the user has Full Control permissions on NTFS file system folders.objAce2 = new AccessControlEntryClass();objAce2.Trustee = (objSIdHex).ToString();objAce2.AccessMask =  (int)ActiveDs.ADS_RIGHTS_ENUM.ADS_RIGHT_GENERIC_ALL;objAce2.AceType = (int)ActiveDs.ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_ALLOWED;objAce2.AceFlags = (int)ActiveDs.ADS_ACEFLAG_ENUM.ADS_ACEFLAG_INHERIT_ACE | 1;objDAcl.AddAce(objAce2);objSecDes.DiscretionaryAcl = objDAcl;// Set permissions on the NTFS file system folder.objADsSec.SetSecurityDescriptor(objSecDes,"FILE://" + vPath);}
  11. Haga clic en la ficha Form1.cs [Diseño] para volver al modo de diseño.
  12. Haga doble clic en button1. Reemplace el código de eventobutton1_Click con el código siguiente.
    private void button1_Click(object sender, System.EventArgs e){try {// Set <Domain> to your domain name.// Set <UserName> to the user account.SetPermissions("C:\\Test", "<Domain>\\<UserName>");MessageBox.Show("Full Access control granted.");}catch (Exception ex){MessageBox.Show(ex.Message);}}
    Nota: Reemplace < dominio > con el nombre de dominio. Reemplace < UserName > con el nombre del usuario a quien desea conceder permisos.
  13. En el menú Generar, haga clic en Generar solución.

Probar la aplicación de ejemplo

  1. Cree una carpeta en la carpeta raíz de unidad C. Nombre de la carpeta de prueba.
  2. En el Explorador de Windows, haga clic en la carpeta de pruebay, a continuación, haga clic en Propiedades.
  3. En el cuadro de diálogo Propiedades de la prueba , haga clic en la ficha seguridad .
  4. Seleccione la cuenta de dominio para el que se ejecuta esta prueba. Si la cuenta no aparece, haga clic en Agregary, a continuación, agregue la cuenta de dominio a la lista.
  5. En permisos, haga clic para desactivar la casilla de verificaciónControl total para restringir los permisos en la carpeta de prueba para este usuario. A continuación, haga clic en Aceptar.
  6. Ejecute la aplicación NTFSPermission.exe. De forma predeterminada,Form1 se muestra.
  7. Haga clic en button1. Recibirá el siguiente mensaje:
    Control de acceso total concedido.
  8. Haga clic en Aceptar para cerrar el cuadro de mensaje.
  9. Cierre el formulario para salir de la aplicación.
  10. En el Explorador de Windows, abra la carpeta C:\ .
  11. Haga clic en la carpeta de prueba y, a continuación, haga clic en Propiedades.
  12. En el cuadro de diálogo Propiedades de la prueba , haga clic en la ficha seguridad .
  13. Seleccione la cuenta de dominio para el que está ejecutando esta prueba y, a continuación, compruebe los permisos en la carpeta Test.
El usuario especificado tiene ahora permisos de Control total en la carpeta Test.

Referencias


Para obtener más información, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
279682 cómo utilizar ADsSecurity.dll para agregar una entrada de control de acceso en una carpeta NTFS
266461 cómo utilizar ADSI para establecer la herencia automática de permisos de archivos y carpetas