Freigeben über


IClientSecurity::SetBlanket-Methode (objidl.h)

Legt die Authentifizierungsinformationen (die Sicherheitsdecke) fest, die für Aufrufe des angegebenen Proxys verwendet werden.

Diese Einstellung überschreibt die Standardeinstellungen des Prozesses für den angegebenen Proxy. Durch Aufrufen dieser Methode werden die Sicherheitswerte für alle anderen Benutzer des angegebenen Proxys geändert.

Syntax

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
);

Parameter

[in] pProxy

Ein Zeiger auf den Proxy.

[in] dwAuthnSvc

Der Authentifizierungsdienst. Dies ist ein einzelner Wert aus der Liste der Authentifizierungsdienstkonstanten. Wenn keine Authentifizierung erforderlich ist, verwenden Sie RPC_C_AUTHN_NONE. Wenn RPC_C_AUTHN_DEFAULT angegeben ist, wählt COM einen Authentifizierungsdienst aus, der seinem normalen Algorithmus für die Aushandlung von Sicherheitsdecken folgt.

[in] dwAuthzSvc

Der Autorisierungsdienst. Dies ist ein einzelner Wert aus der Liste der Autorisierungskonstanten. Wenn RPC_C_AUTHZ_DEFAULT angegeben ist, wählt COM einen Autorisierungsdienst aus, der seinem normalen Algorithmus für die Aushandlung von Sicherheitsdecken folgt. Wenn NTLMSSP, Kerberos oder Schannel als Authentifizierungsdienst verwendet wird, sollte RPC_C_AUTHZ_NONE als Autorisierungsdienst verwendet werden.

[in] pServerPrincName

Der Serverprinzipalname. Wenn COLE_DEFAULT_PRINCIPAL angegeben ist, wählt DCOM einen Prinzipalnamen mithilfe des Aushandlungsalgorithmus für Sicherheitsdecken aus. Wenn Kerberos als Authentifizierungsdienst verwendet wird, muss dieser Parameter der richtige Prinzipalname des Servers sein, andernfalls schlägt der Aufruf fehl.

Wenn Schannel als Authentifizierungsdienst verwendet wird, muss dieser Wert eine der unter Prinzipalnamen beschriebenen msstd- oder fullsic-Formulare sein, oder NULL , wenn Sie keine gegenseitige Authentifizierung wünschen.

Die Angabe von NULL setzt den Serverprinzipalnamen im Proxy im Allgemeinen nicht zurück, sondern die vorherige Einstellung wird beibehalten. Sie müssen bei der Verwendung von NULL als pServerPrincName vorsichtig sein, wenn Sie einen anderen Authentifizierungsdienst für den Proxy auswählen, da es keine Garantie dafür gibt, dass der zuvor festgelegte Prinzipalname für den neu ausgewählten Authentifizierungsdienst gültig ist.

[in] dwAuthnLevel

Die Authentifizierungsebene. Dies ist ein einzelner Wert aus der Liste der Authentifizierungsebenenkonstanten. Wenn RPC_C_AUTHN_LEVEL_DEFAULT angegeben ist, wählt COM eine Authentifizierungsebene aus, die dem normalen Aushandlungsalgorithmus für Sicherheitsdecken folgt. Wenn dieser Wert auf RPC_C_AUTHN_LEVEL_NONE festgelegt ist, muss der Authentifizierungsdienst RPC_C_AUTHN_NONE werden. Jeder Authentifizierungsdienst kann eine höhere Sicherheitsauthentifizierungsstufe als die angegebene verwenden.

[in] dwImpLevel

Die Identitätswechselebene. Dies ist ein einzelner Wert aus der Liste der Konstanten auf Identitätswechselebene. Wenn RPC_C_IMP_LEVEL_DEFAULT angegeben ist, wählt COM eine Identitätswechselebene aus, die dem normalen Aushandlungsalgorithmus für Sicherheitsdecken folgt. Wenn Sie NTLMSSP remote verwenden, muss dieser Wert RPC_C_IMP_LEVEL_IMPERSONATE oder RPC_C_IMP_LEVEL_IDENTIFY sein. Bei Verwendung von NTLMSSP auf demselben Computer wird auch RPC_C_IMP_LEVEL_DELEGATE unterstützt. Für Kerberos kann dieser Wert RPC_C_IMP_LEVEL_IDENTIFY, RPC_C_IMP_LEVEL_IMPERSONATE oder RPC_C_IMP_LEVEL_DELEGATE sein. Für Schannel muss dieser Wert RPC_C_IMP_LEVEL_IMPERSONATE sein.

[in] pAuthInfo

Ein RPC_AUTH_IDENTITY_HANDLE Wert, der die Identität des Clients angibt. Dieser Parameter wird nicht für Aufrufe auf demselben Computer verwendet. Wenn pAuthInfoNULL ist, verwendet COM die aktuelle Proxyidentität, bei der es sich entweder um das Prozesstoken, das Identitätswechseltoken oder die Authentifizierungsidentität der Funktion CoInitializeSecurity handelt. Wenn das Handle nicht NULL ist, wird diese Identität verwendet. Das Format der Struktur, auf die im Handle verwiesen wird, hängt vom Anbieter des Authentifizierungsdiensts ab.

Für NTLMSSP oder Kerberos ist die Struktur eine SEC_WINNT_AUTH_IDENTITY- oder SEC_WINNT_AUTH_IDENTITY_EX-Struktur . Wenn der Client die auf dem Proxy festgelegten Anmeldeinformationen durch Aufrufen von CoQueryProxyBlanket abruft, muss er sicherstellen, dass der Arbeitsspeicher gültig bleibt und unverändert bleibt, bis eine andere Identität für den Proxy festgelegt ist oder alle Proxys für das Objekt freigegeben werden.

Wenn dieser Parameter NULL ist, verwendet COM die aktuelle Proxyidentität (bei der es sich entweder um das Prozesstoken oder das Identitätswechseltoken handelt). Wenn das Handle auf eine -Struktur verweist, wird diese Identität verwendet.

Für Schannel muss dieser Parameter entweder ein Zeiger auf eine CERT_CONTEXT-Struktur sein, die das X.509-Zertifikat des Clients enthält, oder NULL , wenn der Client eine anonyme Verbindung mit dem Server herstellen möchte. Wenn ein Zertifikat angegeben wird, darf der Aufrufer es nicht freigeben, solange ein Proxy für das Objekt im aktuellen Apartment vorhanden ist.

Bei Snego ist dieser Member entweder NULL, zeigt auf eine SEC_WINNT_AUTH_IDENTITY-Struktur oder auf eine SEC_WINNT_AUTH_IDENTITY_EX-Struktur . Wenn der Wert NULL ist, wählt Snego eine Liste der Authentifizierungsdienste aus, die auf den auf dem Clientcomputer verfügbaren Diensten basieren. Wenn es auf eine SEC_WINNT_AUTH_IDENTITY_EX-Struktur zeigt, muss das PackageList-Element der Struktur auf eine Zeichenfolge verweisen, die eine durch Trennzeichen getrennte Liste von Authentifizierungsdienstnamen enthält, und das PackageListLength-Element muss die Anzahl der Bytes in der PackageList-Zeichenfolge geben. Wenn PackageListNULL ist, schlagen alle Aufrufe mit Snego fehl.

Wenn COLE_DEFAULT_AUTHINFO angegeben ist, wählt COM die Authentifizierungsinformationen gemäß dem normalen Aushandlungsalgorithmus für Sicherheitsdecken aus.

SetBlanket gibt einen Fehler zurück, wenn sowohl pAuthInfo als auch eines der Cloaking-Flags in dwCapabilities festgelegt ist.

[in] dwCapabilities

Die Funktionen dieses Proxys. Funktionsflags werden in der EOLE_AUTHENTICATION_CAPABILITIES-Enumeration definiert. Die einzigen Flags, die über diese Methode festgelegt werden können, sind EOAC_MUTUAL_AUTH, EOAC_STATIC_CLOAKING, EOAC_DYNAMIC_CLOAKING, EOAC_ANY_AUTHORITY (dieses Flag ist veraltet), EOAC_MAKE_FULLSIC und EOAC_DEFAULT. Es kann entweder EOAC_STATIC_CLOAKING oder EOAC_DYNAMIC_CLOAKING festgelegt werden, wenn pAuthInfo nicht festgelegt ist und Schannel nicht der Authentifizierungsdienst ist. (Weitere Informationen finden Sie unter Cloaking .) Wenn andere Als die hier genannten Funktionenflags angegeben werden, gibt SetBlanket einen Fehler zurück.

Rückgabewert

Diese Methode kann die folgenden Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Die Methode wurde erfolgreich abgeschlossen.
E_INVALIDARG
Mindestens ein Argument ist ungültig.

Hinweise

SetBlanket legt die Authentifizierungsinformationen fest, die für Aufrufe des angegebenen Schnittstellenproxys verwendet werden. Die hier angegebenen Werte setzen die von der automatischen Sicherheit ausgewählten Werte außer Kraft. Durch Aufrufen dieser Methode werden die Sicherheitswerte für alle anderen Benutzer des angegebenen Proxys geändert. Wenn die Änderungen nur für eine bestimmte instance eines Proxys gelten sollen, rufen Sie IClientSecurity::CopyProxy auf, um eine private Kopie des Proxys zu erstellen, und rufen Sie dann SetBlanket für die Kopie auf.

Wenn diese Methode aufgerufen wird, legt DCOM die Identität auf dem Proxy fest, und zukünftige Aufrufe, die mit diesem Proxy ausgeführt werden, verwenden diese Identität. Aufrufe, die ausgeführt werden, wenn SetBlanket aufgerufen wird, verwenden die Authentifizierungsinformationen auf dem Proxy zum Zeitpunkt des Aufrufs. Wenn pAuthInfoNULL ist, verwendet die Proxyidentität standardmäßig das aktuelle Prozesstoken (es sei denn, bei einem Aufruf von CoInitializeSecurity wurde eine Authentifizierungsidentität angegeben). Unter Cloaking erfahren Sie, wie sich die Cloaking-Flags auf den Proxy auswirken, wenn pAuthInfoNULL ist.

Standardmäßig wählt COM den ersten verfügbaren Authentifizierungsdienst und Autorisierungsdienst aus, der sowohl auf dem Client- als auch auf dem Servercomputer verfügbar ist, sowie den Prinzipalnamen, den der Server für diesen Authentifizierungsdienst registriert hat. Derzeit versucht COM keinen anderen Authentifizierungsdienst, wenn der erste fehlert.

Wenn die Standardkonstante für dwImpLevel in SetBlanket angegeben wird, wird für den Parameter standardmäßig der Wert von CoInitializeSecurity angegeben. Wenn CoInitializeSecurity nicht aufgerufen wird, wird standardmäßig RPC_C_IMP_LEVEL_IDENTIFY.

Der Anfangswert für dwAuthnLevel auf einem Proxy ist der höhere wert, der für den Aufruf des Clients auf CoInitializeSecurity und den Aufruf des Servers an CoInitializeSecurity festgelegt wurde. Für alle Prozesse, die CoInitializeSecurity nicht aufgerufen haben, ist die Standardauthentifizierungsebene RPC_C_AUTHN_CONNECT.

Die Standardauthentifizierungs- und Identitätswechselebene für Prozesse, die CoInitializeSecurity nicht aufrufen, kann mit DCOMCNFG festgelegt werden.

Wenn EOAC_DEFAULT für dwCapabilities angegeben ist, werden die gültigen Funktionen von CoInitializeSecurity verwendet. Wenn CoInitializeSecurity nicht aufgerufen wurde, wird EOAC_NONE für das Capabilities-Flag verwendet.

Wenn SetBlanket gleichzeitig auf zwei Threads auf demselben Proxy aufgerufen wird, wird nur ein Satz von Änderungen angewendet. Wenn SetBlanket und CRpcOptions::Set gleichzeitig auf zwei Threads auf demselben Proxy aufgerufen werden, können beide Änderungen angewendet werden oder nur eine.

Sicherheitsinformationen können nicht auf lokalen Schnittstellen wie der IClientSecurity-Schnittstelle festgelegt werden. Da diese Schnittstelle jedoch nur lokal unterstützt wird, ist keine Sicherheitsanforderung erforderlich. IUnknown und IMultiQI sind Sonderfälle. Die Standortimplementierung führt Remoteaufrufe aus, um diese Schnittstellen zu unterstützen. SetBlanket kann für IUnknown verwendet werden. IMultiQI verwendet die Sicherheitseinstellungen für IUnknown.

Um einen SetBlanket-Parameter zu ändern, ohne mit den anderen parametern umgehen zu müssen, kann man die Standardkonstanten für die anderen Parameter angeben. Anwendungen können einen Parameter (z. B. die Authentifizierungsebene) ändern und die anderen Parameter, einschließlich des Authentifizierungsdiensts, ignorieren, indem sie alle anderen Parameter auf die Standardkonstanten festlegen.

Beachten Sie, dass es wichtig ist, alle nicht verwendeten Parameter auf die Standardkonstanten festzulegen, da der Standardwert häufig nicht offensichtlich ist. Wenn Sie den Authentifizierungsdienst auf den Standardwert festlegen, sollten Sie die Authentifizierungsinformationen und den Prinzipalnamen auf den Standardwert festlegen. Dies hat zwei Gründe: Erstens hängt der Typ der Authentifizierungsinformationen vom Authentifizierungsdienst ab, den DCOM auswählt. Zweitens, da DCOM einige komplexe Authentifizierungsinformationen für bestimmte Authentifizierungsdienste übergeben muss, wenn Sie den Authentifizierungsdienst auf Standard und die Authentifizierungsinformationen auf NULL festlegen, erhalten Sie möglicherweise eine Sicherheitseinstellung, die nicht funktioniert.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile objidl.h (include ObjIdl.h)

Weitere Informationen

CoQueryProxyBlanket

CoSetProxyBlanket

IClientSecurity