Metodo IClientSecurity::SetBlanket (objidl.h)

Imposta le informazioni di autenticazione (coperta di sicurezza) che verranno usate per effettuare chiamate sul proxy specificato.

Questa impostazione esegue l'override delle impostazioni predefinite del processo per il proxy specificato. La chiamata a questo metodo modifica i valori di sicurezza per tutti gli altri utenti del proxy specificato.

Sintassi

HRESULT SetBlanket(
  [in] IUnknown *pProxy,
  [in] DWORD    dwAuthnSvc,
  [in] DWORD    dwAuthzSvc,
  [in] OLECHAR  *pServerPrincName,
  [in] DWORD    dwAuthnLevel,
  [in] DWORD    dwImpLevel,
  [in] void     *pAuthInfo,
  [in] DWORD    dwCapabilities
);

Parametri

[in] pProxy

Puntatore al proxy.

[in] dwAuthnSvc

Servizio di autenticazione. Questo valore verrà ottenuto dall'elenco delle costanti del servizio di autenticazione. Se non è necessaria alcuna autenticazione, usare RPC_C_AUTHN_NONE. Se viene specificato RPC_C_AUTHN_DEFAULT, COM selezionerà un servizio di autenticazione seguendo il normale algoritmo di negoziazione della coperta di sicurezza.

[in] dwAuthzSvc

Servizio di autorizzazione. Si tratta di un singolo valore ottenuto dall'elenco delle costanti di autorizzazione. Se viene specificato RPC_C_AUTHZ_DEFAULT, COM selezionerà un servizio di autorizzazione seguendo il normale algoritmo di negoziazione coperta di sicurezza. Se NTLMSSP, Kerberos o Schannel viene usato come servizio di autenticazione, RPC_C_AUTHZ_NONE deve essere usato come servizio di autorizzazione.

[in] pServerPrincName

Nome dell'entità server. Se viene specificato COLE_DEFAULT_PRINCIPAL, DCOM selezionerà un nome dell'entità usando il relativo algoritmo di negoziazione coperta di sicurezza. Se Kerberos viene usato come servizio di autenticazione, questo parametro deve essere il nome dell'entità corretto del server o la chiamata avrà esito negativo.

Se Schannel viene usato come servizio di autenticazione, questo valore deve essere uno dei moduli msstd o fullsic descritti in Nomi entità o NULL se non si vuole l'autenticazione reciproca.

In genere, la specifica di NULL non reimposta il nome dell'entità server nel proxy, invece, verrà mantenuta l'impostazione precedente. È necessario prestare attenzione quando si usa NULL come pServerPrincName quando si seleziona un servizio di autenticazione diverso per il proxy, perché non esiste alcuna garanzia che il nome dell'entità impostata in precedenza sarebbe valido per il servizio di autenticazione appena selezionato.

[in] dwAuthnLevel

Livello di autenticazione. Si tratta di un singolo valore ottenuto dall'elenco delle costanti a livello di autenticazione. Se viene specificato RPC_C_AUTHN_LEVEL_DEFAULT, COM sceglierà un livello di autenticazione seguendo il normale algoritmo di negoziazione della coperta di sicurezza. Se questo valore è impostato su RPC_C_AUTHN_LEVEL_NONE, il servizio di autenticazione deve essere RPC_C_AUTHN_NONE. Ogni servizio di autenticazione può scegliere di usare un livello di autenticazione di sicurezza superiore a quello specificato.

[in] dwImpLevel

Livello di rappresentazione. Si tratta di un singolo valore tratto dall'elenco delle costanti a livello di rappresentazione. Se viene specificato RPC_C_IMP_LEVEL_DEFAULT, COM sceglierà un livello di rappresentazione seguendo il normale algoritmo di negoziazione della coperta di sicurezza. Se si usa NTLMSSP in remoto, questo valore deve essere RPC_C_IMP_LEVEL_IMPERSONATE o RPC_C_IMP_LEVEL_IDENTIFY. Quando si usa NTLMSSP nello stesso computer, è supportato anche RPC_C_IMP_LEVEL_DELEGATE. Per Kerberos, questo valore può essere RPC_C_IMP_LEVEL_IDENTIFY, RPC_C_IMP_LEVEL_IMPERSONATE o RPC_C_IMP_LEVEL_DELEGATE. Per Schannel, questo valore deve essere RPC_C_IMP_LEVEL_IMPERSONATE.

[in] pAuthInfo

Valore RPC_AUTH_IDENTITY_HANDLE che indica l'identità del client. Questo parametro non viene usato per le chiamate nello stesso computer. Se pAuthInfo è NULL, COM usa l'identità proxy corrente, ovvero il token di processo, il token di rappresentazione o l'identità di autenticazione dalla funzione CoInitializeSecurity . Se l'handle non è NULL, tale identità viene usata. Il formato della struttura a cui fa riferimento l'handle dipende dal provider del servizio di autenticazione.

Per NTLMSSP o Kerberos, la struttura è una struttura SEC_WINNT_AUTH_IDENTITY o SEC_WINNT_AUTH_IDENTITY_EX . Se il client ottiene le credenziali impostate nel proxy chiamando CoQueryProxyBlanket, deve assicurarsi che la memoria rimanga valida e invariata finché non viene impostata un'identità diversa nel proxy o tutti i proxy dell'oggetto vengono rilasciati.

Se questo parametro è NULL, COM usa l'identità proxy corrente , ovvero il token di processo o il token di rappresentazione. Se l'handle fa riferimento a una struttura, tale identità viene usata.

Per Schannel, questo parametro deve essere un puntatore a una struttura CERT_CONTEXT che contiene il certificato X.509 del client o NULL se il client vuole effettuare una connessione anonima al server. Se viene specificato un certificato, il chiamante non deve liberarlo finché esiste un proxy all'oggetto nell'appartamento corrente.

Per Snego, questo membro è NULL, punta a una struttura SEC_WINNT_AUTH_IDENTITY o punta a una struttura SEC_WINNT_AUTH_IDENTITY_EX . Se è NULL, Snego selezionerà un elenco di servizi di autenticazione in base a quelli disponibili nel computer client. Se punta a una struttura SEC_WINNT_AUTH_IDENTITY_EX, il membro PackageList della struttura deve puntare a una stringa contenente un elenco delimitato da virgole dei nomi del servizio di autenticazione e il membro PackageListLength deve assegnare il numero di byte nella stringa PackageList. Se PackageList è NULL, tutte le chiamate che usano Snego avranno esito negativo.

Se viene specificato COLE_DEFAULT_AUTHINFO, COM selezionerà le informazioni di autenticazione seguendo il normale algoritmo di negoziazione coperta di sicurezza.

SetBlanket restituirà un errore se sia pAuthInfo impostato e uno dei flag di mantello è impostato in dwCapabilities.

[in] dwCapabilities

Funzionalità di questo proxy. I flag di funzionalità sono definiti nell'enumerazione EOLE_AUTHENTICATION_CAPABILITIES . Gli unici flag che possono essere impostati tramite questo metodo sono EOAC_MUTUAL_AUTH, EOAC_STATIC_CLOAKING, EOAC_DYNAMIC_CLOAKING, EOAC_ANY_AUTHORITY (questo flag è deprecato), EOAC_MAKE_FULLSIC e EOAC_DEFAULT. È possibile impostare EOAC_STATIC_CLOAKING o EOAC_DYNAMIC_CLOAKING se pAuthInfo non è impostato e Schannel non è il servizio di autenticazione. Per altre informazioni, vedere Mantello . Se vengono indicati flag di funzionalità diversi da quelli indicati qui, SetBlanket restituirà un errore.

Valore restituito

Questo metodo può restituire i valori seguenti.

Codice restituito Descrizione
S_OK
Metodo completato correttamente.
E_INVALIDARG
Uno o più argomenti non sono validi.

Commenti

SetBlanket imposta le informazioni di autenticazione che verranno usate per effettuare chiamate nel proxy di interfaccia specificato. I valori specificati qui eseguono l'override dei valori scelti dalla sicurezza automatica. La chiamata a questo metodo modifica i valori di sicurezza per tutti gli altri utenti del proxy specificato. Se si desidera che le modifiche vengano applicate solo a una determinata istanza di un proxy, chiamare IClientSecurity::CopyProxy per creare una copia privata del proxy e quindi chiamare SetBlanket nella copia.

Ogni volta che viene chiamato questo metodo, DCOM imposterà l'identità sul proxy e le chiamate future effettuate usando questo proxy useranno questa identità. Le chiamate in corso quando viene chiamato SetBlanket useranno le informazioni di autenticazione nel proxy al momento dell'avvio della chiamata. Se pAuthInfo è NULL, l'identità proxy viene predefinita nel token di processo corrente(a meno che non sia stata specificata un'identità di autenticazione in una chiamata a CoInitializeSecurity). Per informazioni su come i flag di mascheramento influiscono sul proxy quando pAuthInfo è NULL.

Per impostazione predefinita, COM sceglierà il primo servizio di autenticazione e il servizio di autorizzazione disponibili nei computer client e server e sul nome principale registrato per tale servizio di autenticazione. Attualmente, COM non tenterà un altro servizio di autenticazione se il primo ha esito negativo.

Quando la costante predefinita per dwImpLevel viene specificata in SetBlanket, il parametro viene impostato per impostazione predefinita sul valore specificato in CoInitializeSecurity. Se CoInitializeSecurity non viene chiamato, viene predefinito RPC_C_IMP_LEVEL_IDENTIFY.

Il valore iniziale per dwAuthnLevel in un proxy sarà maggiore del valore impostato nella chiamata del client a CoInitializeSecurity e alla chiamata del server a CoInitializeSecurity. Per qualsiasi processo che non ha chiamato CoInitializeSecurity, il livello di autenticazione predefinito è RPC_C_AUTHN_CONNECT.

L'autenticazione predefinita e il livello di rappresentazione per i processi che non chiamano CoInitializeSecurity possono essere impostati con DCOMCNFG.

Se EOAC_DEFAULT viene specificato per dwCapabilities, verranno usate le funzionalità valide di CoInitializeSecurity . Se CoInitializeSecurity non è stato chiamato, EOAC_NONE verrà usato per il flag delle funzionalità.

Se SetBlanket viene chiamato simultaneamente in due thread nello stesso proxy, verrà applicato un solo set di modifiche. Se SetBlanket e CRpcOptions::Set vengono chiamati simultaneamente in due thread nello stesso proxy, entrambe le modifiche possono essere applicate o solo una può essere applicata.

Le informazioni di sicurezza non possono essere impostate su interfacce locali, ad esempio l'interfaccia IClientSecurity . Tuttavia, poiché tale interfaccia è supportata solo in locale, non è necessaria alcuna sicurezza. IUnknown e IMultiQI sono casi speciali. L'implementazione della posizione effettua chiamate remote per supportare queste interfacce. SetBlanket può essere usato per IUnknown. IMultiQI userà le impostazioni di sicurezza in IUnknown.

Per modificare un parametro SetBlanket senza dover gestire gli altri, è possibile specificare le costanti predefinite per gli altri parametri. Le applicazioni possono modificare un parametro (ad esempio il livello di autenticazione) e ignorare gli altri parametri, incluso il servizio di autenticazione, impostando tutti gli altri parametri sulle costanti predefinite.

Si noti che è importante impostare tutti i parametri inutilizzati sulle costanti predefinite perché il valore predefinito non è spesso ovvio. In particolare, se si imposta il servizio di autenticazione sul valore predefinito, è necessario impostare le informazioni di autenticazione e il nome dell'entità sul valore predefinito. I motivi di questa operazione sono due: innanzitutto, il tipo di informazioni di autenticazione dipende dalla scelta del servizio di autenticazione DCOM. In secondo luogo, poiché DCOM deve passare alcune informazioni di autenticazione complesse per determinati servizi di autenticazione, se si imposta il servizio di autenticazione su impostazione predefinita e le informazioni di autenticazione su NULL, è possibile ottenere un'impostazione di sicurezza che non funzionerà.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [app desktop | App UWP]
Server minimo supportato Windows 2000 Server [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione objidl.h (include ObjIdl.h)

Vedi anche

CoQueryProxyBlanket

CoSetProxyBlanket

IClientSecurity