Come avere un'opzione di programma impostata da un amministratore che l'utente non può modificare?

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

  •  06-07-2019
  •  | 
  •  

Domanda

La mia applicazione deve leggere un'opzione all'avvio per verificare se deve avviarsi in modalità di sola lettura. L'opzione non dovrebbe essere consentita per essere modificata dall'utente.

Di solito lo faccio ora usando un valore impostato nella sezione HKLM \ Software del registro di sistema. L'amministratore imposta il valore e gli utenti non possono modificarlo (non dispongono dei diritti per modificare le voci in HKLM).

Il problema è che su una macchina Terminal Server (o Citrix) questo interessa tutti gli utenti. Mi piacerebbe trovare un modo per farlo su una base per utente. Come lo gestiscono gli altri? Esiste una sezione nel registro di sistema per questo tipo di impostazione per utente che l'utente non può modificare?

Grazie per eventuali suggerimenti o commenti!

È stato utile?

Soluzione

Questo è essenzialmente il significato della chiave HKEY_CURRENT_USER \ Software \ Policies , ovvero una chiave all'interno della parte specifica dell'utente del registro che è di default di sola lettura per l'utente stesso.

Per convenzione la gerarchia delle chiavi dovrebbe integrare quella che hai già in HKEY_CURRENT_USER \ Software , ad es. se le tue preferenze utente regolari sono archiviate in HKEY_CURRENT_USER \ Software \ MyCompany \ MyProgram , le preferenze utente protette (o "quotazioni" e quotazioni nel linguaggio MS) devono essere archiviate in HKEY_CURRENT_USER \ Software \ Politiche \ MyCompany \ MyProgram

Si noti che si consiglia di impostare i valori in questa chiave solo tramite Oggetti Criteri di gruppo e mai tramite l'accesso diretto al registro.

Altri suggerimenti

Il concetto di un'area delle impostazioni per utente che l'utente non può modificare non ha davvero senso: se si tratta di impostazioni dell'utente, "tu". (l'utente) prevede di poterli modificare.

Mi vengono in mente due alternative:

  • Scrivi le tue impostazioni in HKLM, ma disponi di un'impostazione diversa per ciascun utente e un'impostazione di fallback globale per gli utenti senza l'impostazione di impostazione
  • Scrivili in HKCU, ma usa il API di sicurezza del registro da prevenire loro scrivendo ad esso. Probabilmente avrai bisogno autorizzazioni superiori alle loro impedire loro di annullare l'autorizzazione i cambiamenti. Non mi piace proprio questo opzione, ma se vuoi seguirla probabilmente vuoi iniziare con RegGetKeySecurity e RegSetKeySecurity API. Questo articolo potrebbe essere interessante come bene.

Personalmente penso che la prima opzione sarebbe la più semplice e implicherebbe anche cose meno complicate nell'albero del registro dell'utente. Spero che ti aiuti!

Che ne dici di due impostazioni?

1) Imposta un flag in HKLM specificando che la sola lettura è il comportamento predefinito su questa macchina.

2) Per tutti gli utenti che necessitano dell'accesso completo, imposta un token in HKCU che consenta l'accesso completo.

Il token potrebbe essere un hash crittografico di un po 'di sale più il nome utente, quindi non può essere copiato per autorizzare un altro utente.

Perché non memorizzi le opzioni nel tuo database? Sembra abbastanza ragionevole e utile (almeno per me 8)) Nessun problema nel rendere "portatile" versione del tuo prodotto. Nessun utente si preoccupa delle impostazioni che non si desidera disturbare.

Cosa c'è che non va in HKCU invece di HKLM? Questo sarebbe per utente. Purtroppo potrebbe essere modificato dall'utente se l'utente fosse in grado di modificare il registro e trovare la chiave.

  • Prendi uno dei file in arrivo con il tuo programma, che non deve essere modificato (almeno non dall'utente limitato). Se non esiste un file simile, crearne uno solo per questo scopo.
  • Consenti all'amministratore di impostare i diritti di sola lettura per quel file per quegli utenti con restrizioni.
  • Nel programma controlla se hai accesso in scrittura a quel file.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top