Condividi tramite


Impostazione della sicurezza a livello di processo 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. La chiamata a questi metodi e funzioni è descritta in Impostazione 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 none e il parametro pVoid su 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 a livello di proxy e alle funzioni descritte in Impostazione della sicurezza a livello di proxy di interfaccia.

CoInitializeSecurity offre un set completo di funzionalità. Se si chiama CoInitializeSecurity, i valori del Registro di sistema vengono ignorati e vengono invece usati 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 edizione StandardCURITY_DESCRIPTOR , un oggetto IAccessControl o un puntatore a un AppID. Nella maggior parte dei casi, si useranno le funzioni di Windows per creare un edizione StandardCURITY_DESCRIPTOR a cui pVoid farà riferimento.

Tuttavia, pVoid può anche puntare a un oggetto IAccessControl.

Per indicare a 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 in CoInitializeSecurity.

Impostazione della sicurezza a livello di processo