Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Keyen Night en 22 Febrero 2011, 02:11 am



Título: Error Access Control Windows 7
Publicado por: Keyen Night en 22 Febrero 2011, 02:11 am
Tengo el siguiente codigo Set de una propiedad que escribi hace tiempo para Windows XP pero no funciona en Windows 7, debe ser por la cantidad de filtros de seguridad que tiene Windows 7.

Código
  1.   Set(ByVal value As Boolean)
  2.  
  3.            Dim _
  4. AccessDirInfo As New DirectoryInfo(Objeto), _
  5. AccessInfo As DirectorySecurity = AccessDirInfo.GetAccessControl
  6.  
  7.            Dim I_S As New List(Of IdentityReference)
  8.  
  9.            For Each x As String In Users()
  10.                I_S.Add(New NTAccount(x))
  11.            Next
  12.  
  13.            For Each I As IdentityReference In I_S
  14.  
  15.                AccessInfo.PurgeAccessRules(I)
  16.                AccessDirInfo.SetAccessControl(AccessInfo) ''ERROR: Intento de realizar una operación no válida.''
  17.  
  18.                If Not value Then
  19.                    AccessInfo.SetAccessRule(New FileSystemAccessRule(I, FileSystemRights.FullControl, AccessControlType.Allow))
  20.                    AccessDirInfo.SetAccessControl(AccessInfo)
  21.                End If
  22.  
  23.            Next
  24.  
  25.            I_S.Clear()
  26.  
  27.        End Set

Donde esta el comentario es la linea del error y el mensaje que lanza, alguien sabe cual es el problema o la manera de solucionarlo. Estoy en Windows 7.


Título: Re: Error Access Control Windows 7
Publicado por: .mokk. en 22 Febrero 2011, 02:40 am
Intentastes configurando el manifest para que requiera ser administrador ?


Título: Re: Error Access Control Windows 7
Publicado por: Keyen Night en 22 Febrero 2011, 02:59 am
Despues de declarar requireAdministrator no daba el error pero no pasaba nada. Entonces cambie el codigo así, y funciono perfecto (a por cierto el codigo sirve para denegar y dar permisos a todos los usuarios en el Equipo), la parte Get de la propiedad esta en construcción :silbar:

Código
  1.  
  2.  
  3.    Public Function Users() As List(Of String)
  4.  
  5.        Users = New List(Of String)
  6.  
  7.        Try
  8.            Dim x As DirectoryEntry = New DirectoryEntry("WinNT://" + Environment.MachineName)
  9.            Dim y As DirectoryEntry = x.Children.Find("Administradores", "group")
  10.            Dim z As Object = y.Invoke("members", Nothing)
  11.            For Each i As Object In CType(z, IEnumerable)
  12.                Users.Add(New DirectoryEntry(i).Name)
  13.            Next
  14.        Catch ex As Exception
  15.            Return Nothing
  16.        End Try
  17.  
  18.    End Function
  19.  
  20. Set(ByVal value As Boolean)
  21.  
  22.            Dim _
  23. AccessDirInfo As New DirectoryInfo(Objeto), _
  24. AccessInfo As DirectorySecurity = AccessDirInfo.GetAccessControl
  25.  
  26.            Dim I_S As New List(Of IdentityReference)
  27.  
  28.            For Each x As String In Users()
  29.                I_S.Add(New NTAccount(Environment.UserDomainName & "\" & x))
  30.            Next
  31.  
  32.            For Each I As IdentityReference In I_S
  33.  
  34.                AccessInfo.PurgeAccessRules(I)
  35.                AccessDirInfo.SetAccessControl(AccessInfo)
  36.  
  37.                If Not value Then
  38.                    AccessInfo.SetAccessRule(New FileSystemAccessRule(I, FileSystemRights.FullControl, AccessControlType.Allow))
  39.                Else
  40.                    AccessInfo.SetAccessRule(New FileSystemAccessRule(I, FileSystemRights.FullControl, AccessControlType.Deny))
  41.                End If
  42.  
  43.                AccessDirInfo.SetAccessControl(AccessInfo)
  44.  
  45.            Next
  46.  
  47.            I_S.Clear()
  48.  
  49.        End Set

Gracias.