BITS 傳輸作業的協助程式令牌

在 Windows Vista 中,背景智慧型手機傳送服務 (BITS) 服務可讓應用程式將單一安全性令牌與 BITS 傳輸作業產生關聯。 BITS 傳輸作業接著會使用此令牌進行驗證,以及存取本機和遠端資源。

在 Windows 7 中,BITS 服務會將額外的令牌與 BITS 傳輸作業產生關聯。 BITS 傳輸作業可以使用額外的安全性令牌進行設定,這是由呼叫 BITS COM API 的應用程式所建立的模擬令牌。 此協助程式令牌模型可讓應用程式同時使用兩個不同的安全性令牌來存取本機檔案、用戶端憑證、遠端檔案和 Proxy。 例如,會建立 BITS 傳輸作業,以將下載的數據寫入特殊許可權的本機目錄,然後將低許可權網域識別呈現給 HTTP 伺服器和 Proxy 伺服器。

應用程式通常是 Windows 服務,會使用新的介面 IBitsTokenOptions 來指定協助程式令牌。 這個介面是由 BITS 作業物件實作。 應用程式會呼叫 IBackgroundCopyJob::QueryInterface 來取得介面指標。 應用程式會模擬協助程式身分識別,並呼叫 IBitsTokenOptions::SetHelperToken 將令牌傳遞至 BITS 服務。 然後,應用程式會指定令牌套用的資源,方法是使用 IBitsTokenOptions::SetHelperTokenFlags 傳遞一組位旗標。 應用程式會清除所有旗標(再次使用 SetHelperTokenFlags )來還原行為。 BITS 服務會將位旗標和令牌儲存在 BITS 傳輸作業中。

當 BITS 傳輸作業的擁有者註銷時,BITS 服務會捨棄與傳輸作業相關聯的任何協助程式令牌。 如果傳輸尚未完成,BITS 服務會將作業置於錯誤狀態,並 BG_E_TOKEN_REQUIRED 錯誤碼,並捨棄協助程式令牌。 用戶端應用程式可以藉由呼叫 IBitsTokenOptions::SetHelperToken 來重新整理令牌,然後可以繼續 BITS 傳輸作業。 或者,用戶端應用程式可以使用IBitsTokenOptions::SetHelperTokenFlags 清除協助程式令牌旗標,然後在沒有協助程式令牌的情況下繼續傳輸作業。

同樣地,當終端機服務會話的擁有者註銷時,BITS 服務必須捨棄來自該會話的任何協助程式令牌,並將受影響的傳輸作業置於具有BG_E_TOKEN_REQUIRED錯誤碼的錯誤狀態

協助程式令牌模型需要變更 BITS 訪問控制原則。 舊版 BITS 會在每個方法呼叫上實作存取檢查。 從 Windows 7 開始,存取檢查必須在 IBackgroundCopyJob::QueryInterface 呼叫內執行;否則,協助程式令牌可能無法存取傳輸作業。

注意

舊版實作實際上需要 BITS 使用者具有系統管理員許可權,才能設定協助程式令牌。 從 Windows 10 版本 1607 開始,非系統管理員 BITS 使用者可以使用 IBitsTokenOptions::SetHelperToken ,在自己擁有的 BITS 作業上設定非系統管理員協助程式令牌。 這項變更可讓非系統管理員 BITS 使用者(例如在 NetworkService 帳戶執行的背景下載程式服務)設定協助程式令牌。

具體來說,只要符合下列條件,實作已變更為允許沒有系統管理員許可權的使用者設定協助程式令牌:

  • IBackgroundCopyJob::QueryInterface 呼叫期間,呼叫端線程令牌的SID與作業擁有者用戶帳戶的SID相同,以及
  • 呼叫 IBitsTokenOptions::SetHelperToken,協助程式令牌不會啟用系統管理員 SID (DOMAIN_ALIAS_RID_ADMINS)。

 

IBitsTokenOptions