CoSetProxyBlanket 函式 (combaseapi.h)

設定將用來在指定 Proxy 上呼叫的驗證資訊。 這是 IClientSecurity::SetBlanket 的協助程式函式。

語法

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

參數

[in] pProxy

要設定的 Proxy。

[in] dwAuthnSvc

要使用的驗證服務。 如需可能值的清單,請參閱 驗證服務常數。 如果不需要驗證,請使用 RPC_C_AUTHN_NONE。 如果指定RPC_C_AUTHN_DEFAULT,DCOM 會遵循其一般安全性交涉演算法來挑選驗證服務。

[in] dwAuthzSvc

要使用的授權服務。 如需可能值的清單,請參閱 授權常數。 如果指定RPC_C_AUTHZ_DEFAULT,DCOM 會在其一般安全性交涉演算法之後挑選授權服務。 如果 NTLMSSP、Kerberos 或 Schannel 做為驗證服務,則RPC_C_AUTHZ_NONE應作為授權服務使用。

[in, optional] pServerPrincName

要與驗證服務搭配使用的伺服器主體名稱。 如果指定COLE_DEFAULT_PRINCIPAL,DCOM 會使用其安全性交涉演算法來挑選主體名稱。 如果使用 Kerberos 作為驗證服務,此值不得為 NULL。 它必須是伺服器的正確主體名稱,否則呼叫將會失敗。

如果使用 Schannel 做為驗證服務,此值必須是 主體名稱中所述的其中一個 msstd 或 fullsic 表單,或者如果您不想要相互驗證,則 為 NULL

一般而言,指定 NULL 不會重設 Proxy 上的伺服器主體名稱;相反地,將會保留先前的設定。 在為 Proxy 選取不同的驗證服務時,您必須小心使用 NULL 作為 pServerPrincName ,因為不保證先前設定的主體名稱對新選取的驗證服務有效。

[in] dwAuthnLevel

要使用的驗證層級。 如需可能值的清單,請參閱 驗證層級常數。 如果指定RPC_C_AUTHN_LEVEL_DEFAULT,DCOM 會在其一般安全性交涉演算法之後挑選驗證層級。 如果這個值不是,驗證服務也必須是無。

[in] dwImpLevel

要使用的模擬層級。 如需可能值的清單,請參閱 模擬層級常數。 如果指定RPC_C_IMP_LEVEL_DEFAULT,DCOM 會在其一般安全性交涉演算法之後挑選模擬層級。 如果 NTLMSSP 是驗證服務,則此值必須RPC_C_IMP_LEVEL_IMPERSONATE或RPC_C_IMP_LEVEL_IDENTIFY。 NTLMSSP 也支援同一部計算機上的委派層級模擬 (RPC_C_IMP_LEVEL_DELEGATE) 。 如果 Schannel 是驗證服務,則必須RPC_C_IMP_LEVEL_IMPERSONATE此參數。

[in, optional] pAuthInfo

建立用戶端身分識別 之RPC_AUTH_IDENTITY_HANDLE 值的指標。 句柄所參考的結構格式取決於驗證服務的提供者。

針對同一部電腦上的呼叫,RPC 會以提供的認證登入使用者,並使用方法呼叫產生的令牌。

針對 NTLMSSP 或 Kerberos,結構是 SEC_WINNT_AUTH_IDENTITYSEC_WINNT_AUTH_IDENTITY_EX 結構。 用戶端可以在呼叫 API 之後捨棄 pAuthInfo 。 RPC 不會保留 pAuthInfo 指標的複本,而且用戶端稍後無法在 CoQueryProxyBlanket 方法中擷取它。

如果此參數為 NULL,DCOM 會使用目前的 Proxy 身分識別 (,也就是進程令牌或模擬令牌) 。 如果句柄參考結構,則會使用該身分識別。

針對 Schannel,此參數必須是包含用戶端 X.509 憑證 之CERT_CONTEXT 結構的指標,如果用戶端想要建立與伺服器的匿名連線,則為 NULL 。 如果指定憑證,只要物件的任何 Proxy 存在於目前 Apartment 中,呼叫端就不得釋出該憑證。

針對 Snego,此成員為 NULL、指向 SEC_WINNT_AUTH_IDENTITY 結構,或指向 SEC_WINNT_AUTH_IDENTITY_EX 結構。 如果是 NULL,Snego 會根據用戶端電腦上可用的驗證服務來挑選驗證服務清單。 如果指向 SEC_WINNT_AUTH_IDENTITY_EX 結構,結構的 PackageList 成員必須指向包含驗證服務名稱逗號分隔清單的字串, 而 PackageListLength 成員必須提供 PackageList 字串中的位元組數目。 如果 PackageListNULL,則所有使用 Snego 的呼叫都會失敗。

如果為此參數指定COLE_DEFAULT_AUTHINFO,DCOM 會在其一般安全性交涉演算法之後挑選驗證資訊。

如果已設定 pAuthInfo 且其中一個遮罩旗標是在 dwCapabilities 參數中設定,CoSetProxyBlanket 將會失敗。

[in] dwCapabilities

此 Proxy 的功能。 如需可能值的清單,請參閱 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。 (如需詳細資訊,請參閱 Cloaking 。) 如果已設定此處所述的功能旗標, CoSetProxyBlanket 將會失敗。

傳回值

此函式可以傳回下列值。

傳回碼 描述
S_OK
函式成功。
E_INVALIDARG
一或多個自變數無效。

備註

CoSetProxyBlanket 會設定將用來在指定 Proxy 上進行呼叫的驗證資訊。 此函式會封裝下列一連串的常見呼叫, (排除的錯誤處理) 。

    pProxy->QueryInterface(IID_IClientSecurity, (void**)&pcs);
    pcs->SetBlanket(pProxy, dwAuthnSvc, dwAuthzSvc, pServerPrincName, 
        dwAuthnLevel, dwImpLevel, pAuthInfo, dwCapabilities);
    pcs->Release();

此序列會呼叫 Proxy 上的 QueryInterface 以取得 IClientSecurity 的指標,並使用產生的指標呼叫 IClientSecurity::SetBlanket ,然後釋放指標。

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 combaseapi.h (包含 Objbase.h)
程式庫 Ole32.lib
Dll Ole32.dll

另請參閱

CoQueryProxyBlanket

IClientSecurity::SetBlanket

COM 中的安全性

在介面 Proxy 層級設定安全性