Impostazione della sicurezza a livello di processo tramite il Registro di sistema

Se si vuole impostare la sicurezza per un intero processo, una soluzione consiste nell'impostare i livelli di sicurezza desiderati nel Registro di sistema. Se l'applicazione non può chiamare CoInitializeSecurity o se si preferisce non usare la sicurezza a livello di codice, questa potrebbe essere un'opzione valida. Se si decide di impostare la sicurezza a livello di processo usando il Registro di sistema, è necessario tenere presente che se si chiama CoInitializeSecurity all'interno del programma COM userà i valori in CoInitializeSecurity e ignorerà i valori del Registro di sistema.

Esistono due modi per impostare la sicurezza nel Registro di sistema per l'applicazione:

  • È possibile usare Dcomcnfg.exe, che fornisce un'interfaccia utente semplice per modificare i valori di sicurezza. Tutti i server COM possono essere configurati usando Dcomcnfg.exe. Per altre informazioni, vedere Impostazione della sicurezza a livello di processo tramite DCOMCNFG. Tuttavia, le applicazioni client non vengono normalmente visualizzate in Dcomcnfg.exe a meno che il client non crei un GUID e lo immetta nel Registro di sistema.
  • È possibile impostare i valori di sicurezza nella chiave AppID per l'applicazione. Nella parte restante di questo argomento viene illustrato come impostare la sicurezza nel Registro di sistema usando la chiave AppID .

AppID è un GUID che rappresenta un processo server per una o più classi. Ogni classe è associata esattamente a un Id app e gli ID app possono essere assegnati solo ad EXEs. Le DLL non ottengono id app, a meno che non siano in esecuzione in un surrogato, e quindi è il processo surrogato con l'Id app. Se più DLL vengono caricate in un surrogato, ogni surrogato ha un solo ID app.

Per alcuni server COM, il codice di registrazione genera un AppID e inserisce le voci nel Registro di sistema che eseguono il mapping dell'AppID al nome dell'eseguibile. Tuttavia, alcuni server COM non forniscono questa funzionalità. Tuttavia, se il codice di registrazione del server aggiunge una voce per HKCR\CLSID{ServerCLSID}\LocalServer32 quando viene eseguita dcomcnfg.exe, aggiungerà automaticamente un AppID per CLSID.

Per un client COM che non è un server, questo mapping non viene creato perché il client non è mai registrato. Pertanto, per impostare la sicurezza usando la chiave AppID , il client deve creare le voci del Registro di sistema necessarie, a livello di codice usando le funzioni del Registro di sistema o regedit.

Se si decide di impostare la sicurezza a livello di processo nel Registro di sistema nella chiave AppID , tenere presente che sono presenti due valori denominati nella chiave AppID che è possibile impostare senza disporre delle autorizzazioni di amministratore:

I valori AuthenticationLevel e AccessPermission vengono impostati in modo indipendente e hanno valori predefiniti separati. Se il valore AuthenticationLevel non è presente, il valore LegacyAuthenticationLevel viene usato come predefinito. Analogamente, se il valore AccessPermission non è presente, il valore DefaultAccessPermission viene usato come valore predefinito. Tuttavia, i valori AuthenticationLevel e AccessPermission sono correlati nei modi seguenti:

  • Se AuthenticationLevel non è nessuno, i valori AccessPermission e DefaultAccessPermission vengono ignorati per tale applicazione.
  • Se AuthenticationLevel non è presente e LegacyAuthenticationLevel non è presente, i valori AccessPermission e DefaultAccessPermission vengono ignorati per tale applicazione.

Impostazione della sicurezza a livello di processo