Condividi tramite


Impostazione Process-Wide sicurezza con CoInitializeSecurity

La funzione CoInitializeSecurity consente di controllare scenari di sicurezza complessi impostando la sicurezza per un'applicazione a livello di codice. Questo argomento descrive gli scenari in cui è possibile usare CoInitializeSecurity e fornisce alcuni dettagli su come usarlo.

Esistono diversi motivi per cui è consigliabile usare CoInitializeSecurity per impostare la sicurezza a livello di processo all'interno del programma. Ad esempio, anche se è possibile impostare il livello di autenticazione e le autorizzazioni di accesso per l'applicazione usando dcomcnfg.exe, il livello di rappresentazione predefinito per il computer potrebbe non essere quello desiderato per il processo. L'unico modo per modificare questa impostazione per il processo consiste nel chiamare CoInitializeSecurity.

Se si vuole usare il provider di sicurezza Schannel, è necessario specificarlo come servizio di autenticazione in una chiamata a CoInitializeSecurity.

Un altro scenario comune in cui è possibile impostare la sicurezza a livello di processo a livello di codice è quando si vuole impostare la sicurezza predefinita per l'intero processo, ma si dispone di uno o più oggetti all'interno di tale processo che espongono interfacce con requisiti di sicurezza speciali. In questo caso, è possibile chiamare CoInitializeSecurity per impostare la sicurezza per il processo, consentendo a COM di gestire la maggior parte dei controlli di sicurezza ed è possibile chiamare altri metodi per impostare la sicurezza per gli oggetti con esigenze di sicurezza speciali. L'invocazione di questi metodi e funzioni è descritta in Configurazione della sicurezza a livello di proxy di interfaccia.

Se l'applicazione ha requisiti di sicurezza molto specializzati, ad esempio per consentire a determinati gruppi di accedere a oggetti diversi a seconda dell'ora del giorno, potrebbe essere necessario gestire tutta la sicurezza a livello di codice, assicurandosi che COM non esequisi automaticamente. A tale scopo, è necessario chiamare CoInitializeSecurity, impostando il parametro dwAuthnLevel su nessuno e il parametro pVoid per NULL. Se si dispone di un pacchetto di sicurezza personalizzato, è necessario registrarlo anche nel parametro pAuthnSvc. È quindi possibile gestire tutta la sicurezza a livello di codice tramite chiamate all'interfaccia e alle funzioni a livello di proxy descritte in Impostazione della sicurezza a livello di proxy di interfaccia.

CoInitializeSecurity offre una vasta gamma di funzionalità. Se si chiama CoInitializeSecurity, i valori del registro vengono ignorati e vengono utilizzati invece i valori di inizializzazione della sicurezza passati alla chiamata. A seconda del risultato desiderato, il primo parametro, pVoid, può puntare a tre diversi tipi di valori: un SECURITY_DESCRIPTOR , un oggetto IAccessControl o un puntatore a un AppID. Nella maggior parte dei casi, utilizzerai le funzioni di Windows per creare un SECURITY_DESCRIPTOR a cui pVoid punterà.

Tuttavia, pVoid può anche puntare a un oggettoIAccessControl.

Per indicare CoInitializeSecurity che si passa un oggetto IAccessControl a pVoid, è necessario passare il valore EOAC_ACCESS_CONTROL al parametro dwCapabilities. Poiché CoInitializeSecurity memorizza nella cache i risultati dei controlli di accesso, l'elenco di controllo di accesso non deve essere modificato dopo aver chiamato CoInitializeSecurity.

Un altro tipo di valore che è possibile passare al parametro pVoid è un puntatore a un GUID, ovvero l'AppID dell'applicazione. Se pVoid è un puntatore a un AppID, è necessario specificare EOAC_APPID nel parametro pCapabilities in modo che la funzione sappia quale valore aspettarsi in pVoid. Se pVoid punta a un AppID, CoInitializeSecurity usa solo il Registro di sistema per i valori di autenticazione e ignora tutti gli altri parametri per CoInitializeSecurity.

Impostazione Process-Wide Sicurezza