¿Cómo cambiar o editar los valores de registro de otro usuario que no sea el usuario actual? Conozco las credenciales de ese otro usuario.Editar la clave de registro de otro usuario
Respuesta
Puede suplantar al usuario y luego cambiar el registro para ese contexto actual. Aquí hay un par de recursos en C# y suplantación:
Lo que se quiere hacer es algo como esto (pseudo):
using(var impersonation = new Impersonate(username,password))
{
ChangeRegistry(keys, values);
}
Y cuando la suplantación se elimina, vuelve a utilizar al usuario en ejecución. Here is an example implementation de una clase Impersonate que implementa IDisposable para actuar como el pseudo-examen que se muestra arriba y here is another example.
Here is an example sobre cómo se cambian los valores del registro:
var registry = Registry.CurrentUser;
var key =
registry.OpenSubKey(
@"HKEY_CURRENT_USER\Some\Path\That\You\Want\ToChange", true);
key.SetValue(null, "");
Registry.CurrentUser.Flush();
actualización
Así que lo que hay que hacer con el fin de acceder HKCU
es que también hay que cargar el perfil de usuario. Esto se hace invocando otro Método Win32 que se llama LoadUserProfile
. Hay un complete example here que puedes usar, pero voy a incluir los bits importantes aquí.
Primero debe incluir los métodos de Win32 como este:
[DllImport("userenv.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool LoadUserProfile(IntPtr hToken,
ref ProfileInfo lpProfileInfo);
[DllImport("userenv.dll", CallingConvention = CallingConvention.Winapi,
SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool UnloadUserProfile(IntPtr hToken,
IntPtr lpProfileInfo);
dentro de su suplantación usando bloque que tiene que hacer lo siguiente:
ProfileInfo profileInfo = new ProfileInfo();
profileInfo.dwSize = Marshal.SizeOf(profileInfo);
profileInfo.lpUserName = userName;
profileInfo.dwFlags = 1;
Boolean loadSuccess = LoadUserProfile(tokenDuplicate, ref profileInfo);
Y después de esto, usted debe ser capaz de acceda al HKCU
. Cuando termine, debe descargar el perfil usando UnloadUserProfile(tokenDuplicate, profileInfo.hProfile);
.
Tiene dos opciones. Puede hacerse pasar por ese usuario si tiene sus credenciales, como mejor lo demuestra Filip Ekberg; o
HKCU es simplemente un enlace simbólico para una de las claves bajo HKEY_USERS
. Si conoce el SID de ese usuario, puede encontrarlo allí. Puede obtener el SID de la siguiente manera:
var account = new NTAccount("userName");
var identifier = (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));
var sid = identifier.Value;
La mejor opción es suplantar. La segunda opción podría funcionar mejor cuando no conoces las credenciales de ese usuario. La desventaja es que necesitará derechos administrativos para escribir en la cuenta de otra persona.
La suplantación no funcionó, pero el sid es útil, pero choqué con la excepción de acceso no autorizado, ¡aunque el UAC está desactivado y soy un administrador! –
@MSS, intente solicitar permisos elevados. –
¡Funcionó, mi error fue que abrí la llave para leer! el error: var clave = Registry.Users.OpenSubKey (sid); el derecho es: var clave = Registry.Users.OpenSubKey (sid. verdadero); !!! –
- 1. Lea una clave de registro
- 2. Uso de C++ para editar el registro
- 3. "Editar" texto del usuario sobre la marcha?
- 4. Compruebe si existe la clave de registro
- 5. ¿Cómo puedo encontrar programáticamente la clave de registro HKEY_USERS de un usuario usando powershell?
- 6. El acceso a la clave de registro 'Global' se niega
- 7. Establecer la clave de registro mediante la instalación de ClickOnce
- 8. WPF C# - Editar un cuadro de lista de otro hilo
- 9. .NET de depuración remota como otro usuario de otro dominio?
- 10. WPF control de usuario dentro de otro control de usuario
- 11. Leyendo el registro y la clave Wow6432Node
- 12. WiX no elimina la clave de registro en la desinstalación
- 13. Copiar de un registro a otro
- 14. Mysterious, Native "A" Clave de registro con ruta de acceso: Registro \ A
- 15. modificar el valor de clave de registro
- 16. Controles Delphi para editar pares clave/valor?
- 17. Obtiene el valor de la clave de registro
- 18. Obtiene el valor de la clave de registro C#
- 19. Cómo utilizar la colmena con otro usuario
- 20. ¿Cómo se ejecuta otro .exe de VB.NET como otro usuario?
- 21. legado - Personalización del usuario Editar páginas
- 22. Comprobando si existe una clave de registro
- 23. Leyendo una clave de registro en C#
- 24. Referencia de clave externa a la tabla en otro esquema
- 25. Registro palabra clave en C++
- 26. ¿Cómo forzar la salida del usuario cuando su nombre de usuario es cambiado por otro usuario?
- 27. Pasa por valores o la clave de registro ... _winreg Python
- 28. ¿Cómo puedo verificar si un usuario puede leer/escribir una clave de registro en particular?
- 29. Deshabilitar la redirección de registro para una clave de registro en una plataforma x64
- 30. unix - ejecuta un comando como otro usuario
Muchas gracias pero no funcionó, ¡cambió el registro del usuario actual y no del usuario suplantado! –
¿Estás seguro de que la suplantación funcionó? Puede intentar e imprimir la identidad del usuario actual y ver quién es realmente. Además, ¿esto y las aplicaciones ASP.NET o una aplicación de Windows? Si es una aplicación web, debe permitir la suplantación. –
No, es una aplicación de WPF. usando (ImpersonatedUser im = new ImpersonatedUser ("aaa", Environment.MachineName, "1")) { Registry.CurrentUser.CreateSubKey ("TMP10"); Registry.CurrentUser.Flush(); } Creó la clave en el usuario actual pero no en 'aaa' :( –