IBackgroundCopyJob2::SetCredentials 方法 (bits1_5.h)
指定要用於 Proxy 或遠端伺服器使用者驗證要求的認證。
語法
HRESULT SetCredentials(
[in] BG_AUTH_CREDENTIALS *credentials
);
參數
[in] credentials
識別目標 (Proxy 或伺服器) 、驗證配置,以及要用於使用者驗證的使用者認證。 如需詳細資訊,請參閱 BG_AUTH_CREDENTIALS 結構。
傳回值
這個方法會傳回下列傳回值,以及其他傳回值。
傳回碼 | Description |
---|---|
|
Success |
|
無法辨識的目標列舉值。 |
|
無法辨識的配置列舉值。 |
|
使用者名稱太長。 如需限制,請參閱 BG_BASIC_CREDENTIALS 結構。 |
|
密碼太長。 如需限制,請參閱 BG_BASIC_CREDENTIALS 結構。 |
|
如果您指定基本或摘要配置, BG_BASIC_CREDENTIALS 結構的 UserName 和 Password 成員不能是 Null 。 |
備註
BITS 會提供 Proxy 或伺服器的認證,以回應使用者驗證的要求。 在初始呼叫 [ 繼續] 之前設定認證。
您必須針對您想要提供的每個目標和配置組呼叫這個方法。 例如,如果您想要同時指定基本和摘要式驗證的 Proxy 認證,您會呼叫此方法一次來指定基本認證,第二次指定摘要認證。
如果作業目前包含具有相同目標和配置組的認證,現有的認證會取代為新的認證。 認證會在作業的存留期間保存。 若要從作業中移除認證,請呼叫 IBackgroundCopyJob2::RemoveCredentials 方法。
如果您知道 Proxy 或伺服器將要求的配置,您只能提供這些認證。 否則,請提供所有配置的認證。
如果您未提供 Proxy 或伺服器所要求的認證,則作業會進入 BG_JOB_STATE_ERROR 狀態,或者 Proxy 或伺服器無法驗證認證。 檢查錯誤碼,以判斷驗證在伺服器 (BG_E_HTTP_ERROR_401) 或 Proxy (BG_E_HTTP_ERROR_407) 是否失敗。 若要擷取錯誤碼,請呼叫 IBackgroundCopyJob::GetError 方法來擷取 IBackgroundCopyError 介面指標。 然後,呼叫 IBackgroundCopyError::GetError 方法來擷取錯誤碼。 在您判斷驗證失敗的位置 (Proxy 或伺服器) 之後,請指定要用於 Proxy 或伺服器的新認證,並呼叫 IBackgroundCopyJob::Resume 方法來繼續作業。 因為您無法判斷哪個配置失敗,請在呼叫 Resume 方法之前,先指定所有配置的認證。
沒有方法可以擷取您已設定的認證。
您必須在作業擁有者的內容中呼叫這個方法。
呼叫 IBackgroundCopyJob::TakeOwnership 方法會從作業中移除認證。
若要指定隱含認證 (登入使用者的認證) ,請將配置設定為 NTLM,並將使用者名稱和密碼設定為 Null。 如果您指定 Proxy 的隱含認證,除非指定明確的伺服器認證,否則 BITS 也會使用隱含認證進行伺服器驗證。
範例
下列範例示範如何呼叫 SetCredentials 方法,以指定伺服器使用者驗證要求的基本認證。 此範例會使用 CredUIPromptForCredentials 函式來擷取使用者名稱和密碼。 此範例假設有效的 IBackgroundCopyJob 介面指標 pJob。 此範例會使用 SecureZeroMemory 函式來清除與敏感性資訊相關聯的記憶體位置。 SecureZeroMemory 函式定義于 WinBase.h 中。
#define MAX_STR_LENGTH 300+1 // BITS limit for user name and password
CREDUI_INFO cuiinfo;
WCHAR szUserName[MAX_STR_LENGTH];
WCHAR szPassword[MAX_STR_LENGTH];
DWORD rc;
IBackgroundCopyJob* pJob;
IBackgroundCopyJob2* pJob2 = NULL;
BG_AUTH_CREDENTIALS ac;
cuiinfo.cbSize = sizeof(CREDUI_INFO);
cuiinfo.hbmBanner = NULL;
cuiinfo.hwndParent = NULL; //Desktop is parent
cuiinfo.pszCaptionText = L"Server Authentication";
cuiinfo.pszMessageText = L"Enter user credentials for Basic authentication.";
//Initialize the UserName and Password fields. This example sets
//UserName to blank, but you could also set UserName to the owner
//of the job or the current user. For an example that retrieves the owner's
//name, see the example code for the IBackgroundCopyJob::GetOwner method.
szUserName[0] = L'\0';
szPassword[0] = L'\0';
rc = CredUIPromptForCredentials(&cuiinfo, NULL, NULL, 0,
szUserName, MAX_STR_LENGTH,
szPassword, MAX_STR_LENGTH,
NULL, CREDUI_FLAGS_DO_NOT_PERSIST | CREDUI_FLAGS_GENERIC_CREDENTIALS);
if (NO_ERROR == rc)
{
pJob->QueryInterface(__uuidof(IBackgroundCopyJob2), (void**)&pJob2);
ac.Target = BG_AUTH_TARGET_SERVER;
ac.Scheme = BG_AUTH_SCHEME_BASIC;
ac.Credentials.Basic.UserName = szUserName;
ac.Credentials.Basic.Password = szPassword;
hr = pJob2->SetCredentials(&ac);
if (FAILED(hr))
{
//Handle error
}
SecureZeroMemory(szUserName, sizeof(szUserName));
SecureZeroMemory(szPassword, sizeof(szPassword));
}
規格需求
最低支援的用戶端 | Windows Vista |
最低支援的伺服器 | Windows Server 2003 |
目標平台 | Windows |
標頭 | bits1_5.h (包含 Bits.h) |
程式庫 | Bits.lib |
Dll | BitsPrx2.dll |
可轉散發套件 | Windows XP 上的 BITS 1.5 |