Вспомогательные маркеры для заданий передачи BITS

В Windows Vista служба фоновой интеллектуальной передачи (BITS) позволяет приложению связать один маркер безопасности с заданием передачи BITS. Затем задание передачи BITS использует этот маркер для проверки подлинности и для доступа к локальным и удаленным ресурсам.

В Windows 7 служба BITS связывает дополнительный маркер с заданием передачи BITS. Задание передачи BITS можно настроить с помощью дополнительного маркера безопасности, который является маркером олицетворения, созданным приложением, вызывающим COM-API BITS. Эта модель вспомогательного маркера позволяет приложениям одновременно использовать два разных маркера безопасности для доступа к локальным файлам, сертификатам на стороне клиента, удаленным файлам и прокси-серверу. Например, создается задание передачи BITS, которое записывает скачанные данные в привилегированный локальный каталог, а затем представляет удостоверение домена с низким уровнем прав на HTTP-сервер и прокси-сервер.

Приложение, как правило, служба 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 идентификатор безопасности маркера потока вызова совпадает с идентификатором безопасности учетной записи пользователя владельца задания и
  • При вызове IBitsTokenOptions::SetHelperToken вспомогательный маркер не включает идентификатор безопасности администратора (DOMAIN_ALIAS_RID_ADMINS).

 

IBitsTokenOptions