Impostazione della sicurezza in IWbemServices e altri proxy
Mentre in C++ è possibile impostare la sicurezza per l'intero processo chiamando CoInitializeSecurity prima di connettersi a WMI tramite IWbemLocator::ConnectServer. È anche possibile modificare il livello di autenticazione, il livello di rappresentazione o il servizio di autenticazione in una chiamata che ottiene un puntatore a un proxy WMI, ad esempio IWbemServices o IWbemCallResult. La chiamata CoSetProxyBlanket consente anche di modificare il servizio di autenticazione (Kerberos, NTLM o negotiate).
Gli script e le applicazioni Visual Basic impostano la sicurezza solo sui proxy indirettamente tramite chiamate a SWbemServices e altri oggetti di automazione. Per altre informazioni sull'impostazione e la modifica dell'autenticazione e della rappresentazione nello script, vedere Impostazione del livello di sicurezza del processo predefinito tramite VBScript.
La modifica dei livelli di sicurezza o dei servizi è principalmente un problema durante la connessione a WMI in un computer remoto che esegue un sistema operativo diverso. Per ulteriori informazioni, vedere Connessione tra diversi sistemi operativi.
Un'applicazione client si connette a un proxy WMI usando un'identità. Un'identità è un oggetto dati costituito da un nome utente, una password e le impostazioni dell'autorità. Per un'applicazione client WMI, la chiamata all'interfaccia IWbemLocator::ConnectServer crea l'identità iniziale. Il metodoConnectServeraccetta l'identità in un set di tre parametri, che è possibile impostare su NULL per indicare l'utente corrente. È anche possibile specificare un parametro diNULL non per indicare un utente e un dominio specifici. Se la chiamata ha esito positivo, ConnectServer restituisce un puntatore tramite il quale è possibile accedere a un'ampia gamma di processi remoti, ad esempio un servizio WMI o il sistema operativo Windows direttamente.
Come molte interfacce COM, ConnectServer restituisce un puntatore a un proxy. Un proxy è un oggetto dati che rappresenta un processo remoto, ad esempio WMI o un provider remoto. COM usa un proxy per consentire agli sviluppatori di accedere ai dati remoti come se i dati fossero locali.
Le interfacce WMI seguenti usano proxy:
IWbemRefresher (oggetto scripting SWbemRefresher)
L'aggiornamento WMI è un caso speciale perché viene passato un puntatore IWbemServices, le cui impostazioni di sicurezza devono essere impostate correttamente. Per altre informazioni sull'uso degli oggetti refresher, vedere Accesso ai dati sulle prestazioni in C++.
Dopo aver ricevuto un puntatore a un processo remoto, è possibile eseguire una delle due operazioni. Se si conosce il funzionamento del processo, è possibile scegliere di impostare la sicurezza sul puntatore e accedere normalmente al processo. Questo è il caso con la maggior parte dei puntatori a un servizio WMI. Per altre informazioni, vedere Impostazione dei livelli di sicurezza in una connessione WMI. In alternativa, è necessario accedere a un'interfaccia COM diversa nel proxy, ad esempio IUnknown::Release, tramite una chiamata all'interfaccia IUnknown nel proxy.
Impostazioni predefinite e raccomandazioni
La versione distribuita di Component Object Model (DCOM) negozia il servizio di autenticazione predefinito (Kerberos, NTLM o Negotiate) e non è possibile specificare il servizio di autenticazione predefinito usando CoInitializeSecurity. Specificare RPC_C_AUTHN_DEFAULT nel parametro del servizio di autenticazione di CoSetProxyBlanket consente a DCOM di selezionare il servizio appropriato. Per le connessioni remote, il servizio predefinito è Negotiate, ovvero il servizio consigliato per le applicazioni che funzionano in domini Kerberos e non Kerberos. Per le connessioni locali, il servizio di autenticazione predefinito è NT LAN Manager (NTLM).
Nell'esempio di codice seguente viene illustrato il servizio di autenticazione predefinito usato.
// The pWbemServices variable is of type IWbemServices*
HRESULT hr = CoSetProxyBlanket(
pWbemServices, //Proxy
RPC_C_AUTHN_DEFAULT, //Authentication service
RPC_C_AUTHZ_DEFAULT, //Authorization service
COLE_DEFAULT_PRINCIPAL, //Server principal name used
// by authentication service
RPC_C_AUTHN_LEVEL_DEFAULT, //Authentication level
RPC_C_IMP_LEVEL_IMPERSONATE, //Impersonation level
COLE_DEFAULT_AUTHINFO, //Client identity
EOAC_DEFAULT //Capability flags
);
L'esempio di codice in questo argomento richiede il riferimento e le istruzioni #include seguenti.
#define _WIN32_DCOM
#include <wbemidl.h>
#include <comdef.h>
#pragma comment(lib, "wbemuuid.lib")
Per la creazione di script, è consigliabile usare le impostazioni predefinite selezionate da DCOM per le chiamate remote. Nel computer locale non è possibile specificare un servizio di autenticazione per le chiamate a WMI. Per altre informazioni, vedere Impostazione del servizio di autenticazione tramite VBScript e Costruzione di una stringa moniker.