Error Access Control Windows 7

Iniciado por Keyen Night, 22 Febrero 2011, 02:11 AM

0 Miembros y 1 Visitante están viendo este tema.

Keyen Night

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.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

.mokk.

Intentastes configurando el manifest para que requiera ser administrador ?

Keyen Night

#2
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.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...