2010-10-11 27 views
7

Uso el servidor de Windows 2003, y necesito obtener información sobre la carpeta de seguridad, usando programáticamente C#.Obtener lista de grupos-usuarios-permisos-permiso especial para una carpeta en Windows 2003, programáticamente

Quiero crear una herramienta para comprobar los permisos. Necesito conseguir los grupos, usuarios, permisos y permisos especiales para una carpeta,

C: \ Documents and Settings \ All los usuarios \ Data \ Microsoft \ Crypto \ RSA \ MachineKeys

edit:

El siguiente es un código de ejemplo para el método GetSecurityDescriptorSddlForm.

public static string GetObjectPermission(string fullFolderName) 
{ 
    FileSecurity fileSecure = File.GetAccessControl(fullFolderName); 
    StringBuilder acer = new StringBuilder(); 
    fileSecure.GetSecurityDescriptorSddlForm(AccessControlSections.All); 

    foreach (FileSystemAccessRule ace in fileSecure.GetAccessRules(true, true, typeof(NTAccount))) 
    { 
     acer.Append(ace.FileSystemRights + ":" + ' ' + ace.IdentityReference.Value + "\n"); 
    } 
    return acer.ToString(); 
} 

Este código de ejemplo le mostrará qué NTAccount puede modificar o leer la carpeta, como esta función.

¿Cómo puedo obtener grupos y permisos especiales?

¿Algún código de muestra, sugerencias?

+0

Cuando dice "Obtener permisos especiales" ¿quiere simplemente saber si los tienen, o lo que en realidad ¿son? – Gray

+1

Quiero saber si realmente tienen los permisos. – Kiquenet

+0

Ah, vale. Porque es fácil saber si marcarán las casillas en el Explorador de Windows para permisos especiales, ya que devuelve un número negativo. Pero es un poco más complicado asociar cada parte de ese número con los permisos. – Gray

Respuesta

2

¿Podría usar DirectoryInfo para obtener las ACL? Todo el ACL debería estar ahí (usuario, grupo):

 // Create a new DirectoryInfo object. 
     DirectoryInfo dInfo = new DirectoryInfo(FileName); 

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

documentos completos: http://msdn.microsoft.com/en-us/library/c1f66bc2(v=vs.110).aspx

Cuestiones relacionadas