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.
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.
Intentastes configurando el manifest para que requiera ser administrador ?
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:
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.