Estoy intentando acceder a esta clave en concreto y añadir un valor.
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Approved Extensions
Por lo que se ve es una zona donde no puedes toquetear tan facilmente. El problema no es de requireAdministrator. He buscado codes por internet y he probado con este.
Pero no me deja :-\, alguna idea?
Saludos!
edito: Este codigo parece mas funcional pero tampoco sirve
Dim user As String = Environment.UserDomainName & "\" & Environment.UserName
Dim rs As New RegistrySecurity()
rs.AddAccessRule(New RegistryAccessRule(user, _
RegistryRights.WriteKey Or RegistryRights.SetValue, _
InheritanceFlags.None, _
PropagationFlags.None, _
AccessControlType.Allow))
' Create the example key with registry security.
Dim rk As RegistryKey
rk = Registry.CurrentUser.CreateSubKey("Software\Microsoft\Internet Explorer\Approved Extensions", RegistryKeyPermissionCheck.ReadWriteSubTree, rs)
If rk IsNot Nothing Then rk.Close()
El problema esta en los permisos de escritura del regedit, los puedo asignar manualmente pero eso no solucionaria mi problema :-\
Despues de mucho tocar y aun no se muy bien por que funciona, aqui dejo el code funcional
Dim user As String = Environment.UserDomainName & "\" & Environment.UserName
Dim subkey As String = "Software\Microsoft\Internet Explorer\Approved Extensions"
Dim rk As RegistryKey = Registry.CurrentUser.OpenSubKey(subkey, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.ChangePermissions Or RegistryRights.ReadKey)
Dim rs As New RegistrySecurity()
rs.AddAccessRule(New RegistryAccessRule(user, RegistryRights.FullControl, InheritanceFlags.None, PropagationFlags.None, AccessControlType.Allow))
rk.SetAccessControl(rs)
rk = Registry.CurrentUser.OpenSubKey(subkey, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl)
rk.SetAccessControl(rs)
Lo que hace el code es editar los permisos especiales y quitando el dichoso 'denegar establecer valor', ahora bien no se por que pasa esto jaja, alguien me puede comentar el code? Me gustaria entenderlo
Saludos.
A pesar de tus esfuerzos el segundo código a mi no me funciona, me da el mismo error que comentas en el primer código.
He probado decenas de códigos, he estudiado un poco sobre RegistryKeyPermissionCheck ,RegistryRights ,SetAccessControl ,RegistryAccessRule , y RegistryKey
Incluso he probado un código koreano!... pero nada ha valido la pena, parece algo de locos intentar modificar los permisos de una clave en .NET, Google no tiene la respuesta.
A mi me habría gustado solucionar tu problema porque también me serviría para mi en un futuro, pero parece muy dificil conseguirlo, así que quizás quieras mirar esta alternativa que hice:
-> http://foro.elhacker.net/net/libreria_de_snippets_posteen_aqui_sus_snippets-t378770.0.html;msg1872406#msg1872406
Saludos.
A mi me funciona que da gusto, hay tres tipos de permisos : Control total, Leer y permisos especiales. En la clave que intentaba modificar tenia los permisos de control total y leer pero el permiso especial de establecer valor denegado. Con este code me permite todos los permisos especiales, voi a testearlo en diferentes sistemas operativos pero en mi ordenador va de lujo.
No te funciona con la clave que yo intento modificar o con una tuya? Este tema me ha tocado las bowlings y hay que llegar al fondo del asunto xD
Saludos.
He vuelto a testearlo, y ahora me siento identificado con tu segundo comentario:
CitarDespues de mucho tocar y aun no se muy bien por que funciona,
Me parece muy estraño pero ahora si que me funciona,
ayer hice un copy/paste de tu code pero no me funcionó ni con tu clave ni con alguna otra que yo he probé.
En fin... disculpas, aunque te aseguro que ayer lo probé muchas veces tu último código sin éxito alguno...
un saludo!
Cita de: EleKtro H@cker en 21 Julio 2013, 16:15 PM
He vuelto a testearlo, y ahora me siento identificado con tu segundo comentario:
Me parece muy estraño pero ahora si que me funciona,
ayer hice un copy/paste de tu code pero no me funcionó ni con tu clave ni con alguna otra que yo he probé.
En fin... disculpas, aunque te aseguro que ayer lo probé muchas veces tu último código sin éxito alguno...
un saludo!
edite el codigo varias veces tal vez ese fue el fallo, culpa mia en todo caso. pues me dejas mas tranquilo por que ya pensaba que iba a tener problema con el code jaja.
saludos.
Una cosa, estaba haciendo ahora mismo una función genérica de tu code:
''' <summary>
''' Modify the User permissions of a registry key.
''' </summary>
Public Shared Sub Set_UserAccess_Key(ByVal RegKey As String, ByVal RegUserAccess As RegistryRights, ByVal AccessType As AccessControlType, Optional ByVal UserName As String = Nothing)
Dim user As String = UserName
Dim RootKey As RegistryKey = Get_Root_Key(RegKey)
Dim KeyPath As String = Get_Key_Path(RegKey)
If UserName Is Nothing Then user = Environment.UserDomainName & "\" & Environment.UserName
Dim RS As New RegistrySecurity()
Dim RK As RegistryKey = RootKey.OpenSubKey(KeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.ChangePermissions Or RegistryRights.ReadKey)
RS.AddAccessRule(New RegistryAccessRule(user, RegUserAccess, InheritanceFlags.None, PropagationFlags.None, AccessType))
RK.SetAccessControl(RS)
RK = RootKey.OpenSubKey(KeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, RegUserAccess)
RK.SetAccessControl(RS)
End Sub
Y hay un pequeño problema :-/
Si a la clave le quitas los permisos de control total entonces luego con tu code no se le pueden modificar los permisos, da error al leer la clave como yo decía en un principio, aquí:
Dim RK As RegistryKey = RootKey.OpenSubKey(KeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.ChangePermissions Or RegistryRights.ReadKey)
PD: Lo he probado también con tu code de arriba sin mis modificaciones.
Esto significa que si el usuario tiene denegado el permiso de control total en la clave entonces tu code no funcionará :P
Un saludo
Eso no lo habia pensado. Creo que la clave esta en integrar tambien mi code del principio, aun k no estoy muy seguro. Voi a estar 3 dias sin internet y no voi a poder darle caña al tema, cuando vuelva mirare a ver como solucionarlo.
Saludos.
Cita de: EleKtro H@cker en 21 Julio 2013, 02:20 AM
A pesar de tus esfuerzos el segundo código a mi no me funciona, me da el mismo error que comentas en el primer código.
He probado decenas de códigos, he estudiado un poco sobre RegistryKeyPermissionCheck ,RegistryRights ,SetAccessControl ,RegistryAccessRule , y RegistryKey
Incluso he probado un código koreano!... pero nada ha valido la pena, parece algo de locos intentar modificar los permisos de una clave en .NET, Google no tiene la respuesta.
A mi me habría gustado solucionar tu problema porque también me serviría para mi en un futuro, pero parece muy dificil conseguirlo, así que quizás quieras mirar esta alternativa que hice:
-> http://foro.elhacker.net/net/libreria_de_snippets_posteen_aqui_sus_snippets-t378770.0.html;msg1872406#msg1872406
Saludos.
Mire otra vez más a fondo la cuestión y efectivamente mi code no funciona a 'pelo'. Probé el tuyo y le he econtrado un fallo.
El los argumentos que le pasas al SETACL.exe, le pasas como usuario %USERNAME%, pero eso no funciona. Le tienes que pasar también el nombre de dominio, si no le da permisos a un usuario llamado BUITIN que genera la aplicacion de gratis.
Dim user As String = Environment.UserDomainName & "\" & Environment.UserName
SETACL_Info.Arguments = String.Format("-on ""{0}"" -ot reg -ace ""n:{1};p:{2}"" -rec ""{3}"" -actn ace -silent -ignoreerr -log ""{4}""", RegKey, user, Permission, Recursion, SETACL_Logfile)
Por lo demás todo bien.
Saludos.
Cita de: .:Weeds:. en 23 Noviembre 2013, 22:43 PM
le he econtrado un fallo
Gracias por la observación
Saludos!