IClientSecurity::SetBlanket メソッド (objidl.h)

指定したプロキシで呼び出しを行うために使用される認証情報 (セキュリティ ブランケット) を設定します。

この設定は、指定したプロキシのプロセスの既定の設定をオーバーライドします。 このメソッドを呼び出すと、指定したプロキシの他のすべてのユーザーのセキュリティ値が変更されます。

構文

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

パラメーター

[in] pProxy

プロキシへのポインター。

[in] dwAuthnSvc

認証サービス。 これは、 認証サービス定数の一覧から取得された 1 つの値になります。 認証が必要ない場合は、RPC_C_AUTHN_NONEを使用します。 RPC_C_AUTHN_DEFAULTが指定されている場合、COM は通常のセキュリティ ブランケット ネゴシエーション アルゴリズムに従って認証サービスを選択します。

[in] dwAuthzSvc

承認サービス。 これは、 承認定数の一覧から取得された 1 つの値になります。 RPC_C_AUTHZ_DEFAULTが指定されている場合、COM は通常のセキュリティ ブランケット ネゴシエーション アルゴリズムに従って承認サービスを選択します。 NTLMSSP、Kerberos、または Schannel を認証サービスとして使用する場合は、RPC_C_AUTHZ_NONEを承認サービスとして使用する必要があります。

[in] pServerPrincName

サーバー プリンシパル名。 COLE_DEFAULT_PRINCIPALが指定されている場合、DCOM はセキュリティ ブランケット ネゴシエーション アルゴリズムを使用してプリンシパル名を選択します。 Kerberos が認証サービスとして使用されている場合、このパラメーターはサーバーの正しいプリンシパル名である必要があります。または、呼び出しは失敗します。

認証サービスとして Schannel を使用する場合、この値は「 プリンシパル名」で説明されている msstd または fullsic 形式のいずれかであるか、相互認証が必要ない場合は NULL である 必要があります。

通常、 NULL を 指定した場合、プロキシのサーバー プリンシパル名はリセットされず、前の設定は保持されます。 プロキシ用に別の認証サービスを選択する場合は、pServerPrincName として NULL を使用する場合は注意が必要です。これは、以前に設定したプリンシパル名が新しく選択された認証サービスに対して有効であるという保証がないためです。

[in] dwAuthnLevel

認証レベル。 これは、 認証レベルの定数の一覧から取得された 1 つの値になります。 RPC_C_AUTHN_LEVEL_DEFAULTが指定されている場合、COM は通常のセキュリティ ブランケット ネゴシエーション アルゴリズムに従って認証レベルを選択します。 この値が RPC_C_AUTHN_LEVEL_NONE に設定されている場合は、認証サービスをRPC_C_AUTHN_NONEする必要があります。 各認証サービスは、指定された認証レベルよりも高いセキュリティ認証レベルを使用することを選択できます。

[in] dwImpLevel

偽装レベル。 これは、 偽装レベル定数の一覧から取得された 1 つの値になります。 RPC_C_IMP_LEVEL_DEFAULTが指定されている場合、COM は通常のセキュリティ ブランケット ネゴシエーション アルゴリズムに従って偽装レベルを選択します。 NTLMSSP をリモートで使用している場合、この値はRPC_C_IMP_LEVEL_IMPERSONATEまたはRPC_C_IMP_LEVEL_IDENTIFYである必要があります。 同じコンピューターで NTLMSSP を使用する場合は、RPC_C_IMP_LEVEL_DELEGATEもサポートされます。 Kerberos の場合、この値はRPC_C_IMP_LEVEL_IDENTIFY、RPC_C_IMP_LEVEL_IMPERSONATE、またはRPC_C_IMP_LEVEL_DELEGATEできます。 Schannel の場合、この値はRPC_C_IMP_LEVEL_IMPERSONATEする必要があります。

[in] pAuthInfo

クライアントの ID を示すRPC_AUTH_IDENTITY_HANDLE値。 このパラメーターは、同じコンピューターでの呼び出しには使用されません。 pAuthInfoNULL の場合、COM は現在のプロキシ ID (プロセス トークン、偽装トークン、または CoInitializeSecurity 関数からの認証 ID) を使用します。 ハンドルが NULL でない場合は、その ID が使用されます。 ハンドルによって参照される構造体の形式は、認証サービスのプロバイダーによって異なります。

NTLMSSP または Kerberos の場合、構造体は SEC_WINNT_AUTH_IDENTITY または SEC_WINNT_AUTH_IDENTITY_EX 構造体です。 クライアントが CoQueryProxyBlanket を呼び出してプロキシに設定された資格情報を取得する場合は、プロキシに別の ID が設定されるか、オブジェクト上のすべてのプロキシが解放されるまで、メモリが有効であり、変更されていないことを確認する必要があります。

このパラメーターが NULL の場合、COM は現在のプロキシ ID (プロセス トークンまたは偽装トークン) を使用します。 ハンドルが構造体を参照している場合は、その ID が使用されます。

Schannel の場合、このパラメーターは、クライアントの X.509 証明書を含む CERT_CONTEXT 構造体へのポインターであるか、クライアントがサーバーへの匿名接続を行う場合は NULL である必要があります。 証明書が指定されている場合、オブジェクトへのプロキシが現在のアパートメントに存在する限り、呼び出し元はそれを解放することはできません。

Snego の場合、このメンバーは NULLSEC_WINNT_AUTH_IDENTITY 構造体、または SEC_WINNT_AUTH_IDENTITY_EX 構造体を指します。 NULL の場合、Snego はクライアント コンピューターで使用可能な認証サービスに基づいて認証サービスの一覧を選択します。 SEC_WINNT_AUTH_IDENTITY_EX構造体を指す場合、構造体の PackageList メンバーは、認証サービス名のコンマ区切りのリストを含む文字列を指す必要があり、PackageListLength メンバーは PackageList 文字列のバイト数を指定する必要があります。 PackageListNULL の場合、Snego を使用するすべての呼び出しは失敗します。

COLE_DEFAULT_AUTHINFOが指定されている場合、COM は通常のセキュリティ ブランケット ネゴシエーション アルゴリズムに従って認証情報を選択します。

両方の pAuthInfo が設定され、クローキング フラグの 1 つが dwCapabilities で設定されている場合、SetBlanket はエラーを返します。

[in] dwCapabilities

このプロキシの機能。 機能フラグは、 EOLE_AUTHENTICATION_CAPABILITIES 列挙で定義されます。 このメソッドを使用して設定できるフラグは、EOAC_MUTUAL_AUTH、EOAC_STATIC_CLOAKING、EOAC_DYNAMIC_CLOAKING、EOAC_ANY_AUTHORITY (このフラグは非推奨)、EOAC_MAKE_FULLSIC、およびEOAC_DEFAULTのみです。 pAuthInfo が設定されておらず、Schannel が認証サービスでない場合は、EOAC_STATIC_CLOAKINGまたはEOAC_DYNAMIC_CLOAKINGを設定できます。 (詳細については、「 クローキング 」を参照してください)。ここで説明した機能フラグ以外の機能フラグが示されている場合、 SetBlanket はエラーを返します。

戻り値

このメソッドは、次の値を返すことができます。

リターン コード 説明
S_OK
メソッドは正常に完了しました。
E_INVALIDARG
1 つ以上の引数が無効です。

注釈

SetBlanket は、指定されたインターフェイス プロキシで呼び出しを行うために使用される認証情報を設定します。 ここで指定する値は、自動セキュリティによって選択された値よりも優先されます。 このメソッドを呼び出すと、指定したプロキシの他のすべてのユーザーのセキュリティ値が変更されます。 変更をプロキシの特定のインスタンスにのみ適用する場合は、 IClientSecurity::CopyProxy を呼び出してプロキシのプライベート コピーを作成し、コピーで SetBlanket を呼び出します。

このメソッドが呼び出されるたびに、DCOM によってプロキシに ID が設定され、このプロキシを使用して今後呼び出された呼び出しではこの ID が使用されます。 SetBlanket が呼び出されたときに進行中の呼び出しでは、呼び出しの開始時にプロキシの認証情報が使用されます。 pAuthInfoNULL の場合、プロキシ ID は既定で現在のプロセス トークンに設定されます (CoInitializeSecurity の呼び出しで認証 ID が指定されていない場合)。 pAuthInfo が NULL の場合にクローキング フラグがプロキシに与える影響については、「クローキングを参照してください

既定では、COM は、クライアント コンピューターとサーバー コンピューターの両方で使用できる最初の使用可能な認証サービスと承認サービスと、その認証サービスにサーバーが登録したプリンシパル名を選択します。 現時点では、最初の認証サービスが失敗した場合、COM は別の認証サービスを試しません。

SetBlanketdwImpLevel の既定の定数を指定すると、パラメーターの既定値は CoInitializeSecurity に指定された値になります。 CoInitializeSecurity が呼び出されない場合、既定では RPC_C_IMP_LEVEL_IDENTIFY になります。

プロキシ上の dwAuthnLevel の初期値は、クライアントによる CoInitializeSecurity の呼び出しと、サーバーによる CoInitializeSecurity の呼び出しで設定された値の方が大きくなります。 CoInitializeSecurity を呼び出さなかったプロセスの場合、既定の認証レベルはRPC_C_AUTHN_CONNECT。

CoInitializeSecurity を呼び出さないプロセスの既定の認証および偽装レベルは、DCOMCNFG で設定できます。

dwCapabilities にEOAC_DEFAULTが指定されている場合は、CoInitializeSecurity の有効な機能が使用されます。 CoInitializeSecurity が呼び出されなかった場合は、capabilities フラグにEOAC_NONEが使用されます。

SetBlanket が同じプロキシ上の 2 つのスレッドで同時に呼び出される場合、変更のセットは 1 つだけ適用されます。 SetBlanketCRpcOptions::Set が同じプロキシ上の 2 つのスレッドで同時に呼び出される場合は、両方の変更を適用するか、1 つだけを適用できます。

IClientSecurity インターフェイスなどのローカル インターフェイスでは、セキュリティ情報を設定できません。 ただし、そのインターフェイスはローカルでのみサポートされているため、セキュリティは必要ありません。 IUnknownIMultiQI は特殊なケースです。 場所の実装では、これらのインターフェイスをサポートするためにリモート呼び出しを行います。 SetBlanketIUnknown に使用できます。 IMultiQI では、 IUnknown のセキュリティ設定が使用されます。

1 つの SetBlanket パラメーターを他のパラメーターに対処せずに変更するには、他のパラメーターの既定の定数を指定できます。 アプリケーションでは、パラメーター (認証レベルなど) を変更し、他のすべてのパラメーターを既定の定数に設定することで、認証サービスを含む他のパラメーターを無視できます。

既定値が明確でないことが多いため、使用されていないすべてのパラメーターを既定の定数に設定することが重要であることに注意してください。 特に、認証サービスを既定値に設定する場合は、認証情報とプリンシパル名を既定値に設定する必要があります。 その理由は 2 つあります。まず、認証情報の種類は、DCOM が選択する認証サービスによって異なります。 2 つ目は、DCOM が特定の認証サービスに対して複雑な認証情報を渡す必要があるため、認証サービスを既定値に設定し、認証情報を NULL に設定すると、機能しないセキュリティ設定が得られる場合があります。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー objidl.h (ObjIdl.h を含む)

こちらもご覧ください

CoQueryProxyBlanket

CoSetProxyBlanket

IClientSecurity