Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .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 (vb.net) [Seleccionar]
  Set(ByVal value As Boolean)

           Dim _
AccessDirInfo As New DirectoryInfo(Objeto), _
AccessInfo As DirectorySecurity = AccessDirInfo.GetAccessControl

           Dim I_S As New List(Of IdentityReference)

           For Each x As String In Users()
               I_S.Add(New NTAccount(x))
           Next

           For Each I As IdentityReference In I_S

               AccessInfo.PurgeAccessRules(I)
               AccessDirInfo.SetAccessControl(AccessInfo) ''ERROR: Intento de realizar una operación no válida.''

               If Not value Then
                   AccessInfo.SetAccessRule(New FileSystemAccessRule(I, FileSystemRights.FullControl, AccessControlType.Allow))
                   AccessDirInfo.SetAccessControl(AccessInfo)
               End If

           Next

           I_S.Clear()

       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 (vb.net) [Seleccionar]
 

   Public Function Users() As List(Of String)

       Users = New List(Of String)

       Try
           Dim x As DirectoryEntry = New DirectoryEntry("WinNT://" + Environment.MachineName)
           Dim y As DirectoryEntry = x.Children.Find("Administradores", "group")
           Dim z As Object = y.Invoke("members", Nothing)
           For Each i As Object In CType(z, IEnumerable)
               Users.Add(New DirectoryEntry(i).Name)
           Next
       Catch ex As Exception
           Return Nothing
       End Try

   End Function

Set(ByVal value As Boolean)

           Dim _
AccessDirInfo As New DirectoryInfo(Objeto), _
AccessInfo As DirectorySecurity = AccessDirInfo.GetAccessControl

           Dim I_S As New List(Of IdentityReference)

           For Each x As String In Users()
               I_S.Add(New NTAccount(Environment.UserDomainName & "\" & x))
           Next

           For Each I As IdentityReference In I_S

               AccessInfo.PurgeAccessRules(I)
               AccessDirInfo.SetAccessControl(AccessInfo)

               If Not value Then
                   AccessInfo.SetAccessRule(New FileSystemAccessRule(I, FileSystemRights.FullControl, AccessControlType.Allow))
               Else
                   AccessInfo.SetAccessRule(New FileSystemAccessRule(I, FileSystemRights.FullControl, AccessControlType.Deny))
               End If

               AccessDirInfo.SetAccessControl(AccessInfo)

           Next

           I_S.Clear()

       End Set


Gracias.