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_IDENTITY 或 SEC_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 字串中的位元組數目。 如果 PackageList 是 NULL,則所有使用 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 將會失敗。
傳回值
此函式可以傳回下列值。
傳回碼 | 描述 |
---|---|
|
函式成功。 |
|
一或多個自變數無效。 |
備註
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 |