¿Cómo un administrador establece una opción de programa que el usuario no puede cambiar?

StackOverflow https://stackoverflow.com/questions/1015542

  •  06-07-2019
  •  | 
  •  

Pregunta

Mi aplicación necesita leer una opción al inicio para verificar si debe comenzar en modo de solo lectura. No se debe permitir que el usuario cambie la opción.

Normalmente hago esto ahora usando un valor establecido en la sección HKLM \ Software del registro del sistema. El administrador establece el valor y los usuarios no pueden cambiarlo (no tienen derechos para modificar entradas en HKLM).

El problema es que en una máquina con servidor de terminal (o Citrix) esto afecta a todos los usuarios. Me gustaría encontrar una manera de hacer esto por usuario. ¿Cómo manejan esto los demás? ¿Hay una sección en el registro del sistema para este tipo de configuración por usuario que el usuario no puede cambiar?

¡Gracias por cualquier sugerencia o comentario!

¿Fue útil?

Solución

Esto es esencialmente para lo que sirve la clave HKEY_CURRENT_USER \ Software \ Policies , es decir, una clave dentro de la parte específica del usuario del registro que por defecto es de solo lectura para el usuario mismo.

Por convención, la jerarquía de claves debe complementar la que ya tiene en HKEY_CURRENT_USER \ Software , p. si sus preferencias de usuario habituales se almacenan en HKEY_CURRENT_USER \ Software \ MyCompany \ MyProgram , entonces las preferencias de usuario protegidas (o "políticas" en la jerga de MS) deben almacenarse en HKEY_CURRENT_USER \ Software \ Policies \ MyCompany \ MyProgram

Tenga en cuenta que se recomienda establecer solo valores bajo esta clave a través de Objetos de directiva de grupo y nunca mediante acceso directo al registro.

Otros consejos

El concepto de un área de configuración por usuario que el usuario no puede cambiar realmente no tiene sentido: si son configuraciones de usuario, "usted" (el usuario) espera poder cambiarlos.

Puedo pensar en dos alternativas:

  • Escriba su configuración en HKLM, pero tenga una configuración diferente para cada usuario y una configuración de respaldo global para usuarios sin la configuración establecida
  • Escríbelos en HKCU, pero usa el API de seguridad de registro para evitar ellos escribiéndole. Probablemente va a necesitar permisos mayores que los de ellos evitar que deshagan el permiso cambios Realmente no me gusta esto opción, pero si quieres seguirla probablemente quieras comenzar con el RegGetKeySecurity y RegSetKeySecurity APIs. Esto el artículo podría ser interesante ya que bien.

Personalmente, creo que la primera opción sería la más fácil, y también implicaría cosas menos dudosas en el árbol de registro del usuario. ¡Espero que ayude!

¿Qué tal dos configuraciones?

1) Establezca un indicador en HKLM que especifique que solo lectura es el comportamiento predeterminado en esta máquina.

2) Para cualquier usuario que necesite acceso completo, configure un token en HKCU que permita el acceso completo.

El token podría ser un hash criptográfico de algo de sal más el nombre de usuario, por lo que no se pudo copiar para dar permiso a otro usuario.

¿Por qué no almacena opciones en su propia base de datos? Parece razonable y lo suficientemente útil (al menos para mí 8)) No hay problemas para hacer "portátil". Versión de su producto. No hay usuarios que molesten ninguna configuración que no quieras que molesten.

¿Qué tiene de malo HKCU en lugar de HKLM? Esto sería por usuario. Lamentablemente, el usuario podría cambiarlo si supiera cómo editar el registro y encontrar la clave.

  • Tome uno de los archivos que vienen con su programa, que no debe ser alterado (al menos no por el usuario restringido). Si no existe dicho archivo, cree uno solo para este propósito.
  • Permita que el administrador establezca derechos de solo lectura para ese archivo para esos usuarios restringidos.
  • En el programa, verifique si tiene acceso de escritura a ese archivo.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top