Для чего нужна служба фоновая интеллектуальная служба передачи
Background Intelligent Transfer Service
Вы все еще не знаете, как лучше организовать передачу файлов по сети на компьютеры под управлением Windows? Тогда вам сюда!
Background Intelligent Transfer Service (BITS) – служба ОС Windows, которая может передавать файлы в фоновом режиме. Она используется, в основном, для Windows Update.
Какой же интерес BITS представляет для разработчиков?
1. Возможность закачки файлов в фоновом режиме, незаметно для пользователя
2. Высокий уровень отказоустойчивости. Если сетевой кабель перерубят, или комп выпадет в «синий экран», то BITS докачает файлы, как только это станет возможно.
3. Intelligent сказано не зря. Если пользователь в данный момент ничего не качает и комп простаивает, BITS воспользуется освободившимися ресурсами. Эту фичу можно использовать, назначая различные приоритеты закачек.
Работать с BITS можно через специальный API
Ключевым объектом BITS является Job (не надо дословного перевода, назовем это «закачкой»).
Жизненный цикл «закачки» следующий:
1. Создание Job. Указываем название, описание, тип (Upload\Download) и приоритет
2. Добавление файлов. Job может содержать несколько файлов, если выбран тип Download.
3. Подписываемся на события закачки, если необходимо отслеживать прогресс в реальном времени.
4. Запуск закачки. Далее BITS все делает сам.
Важной особенностью BITS является то, что создать закачку может только пользователь, совершивший вход в систему, либо системная учетная запись. Тем, кто собирается использовать BITS, советую не забывать об этом.
Я сознательно не привожу примеров кода, они есть здесь и здесь.
Для дополнительного ознакомления есть замечательная статья на английском.
BITS что это за служба в Windows?

Но где эта служба применяется? Самое главное применение — загрузка обновлений с серверов Microsoft. Обновления могут быть большие и вот чтобы загрузка их не мешала пользователю в плане скорости — то и нужна служба BITS. Вот поэтому то он и интеллектуальная — качает с такой скоростью, чтобы вам не мешать сидеть на сайтах, или например играть в онлайн игру..)
Как я понимаю, основная фишка службы BITS — фоновая загрузка данных, при которой используется не вся скорость интерната, а только неиспользуемая.
Кроме обновлений служба также используется и в антивирусе Microsoft Security Essentials (Windows Defender).
Как я понимаю, эту службу могут использовать и другие программы. Они могут загружать файлы из интернета при помощи этой службы. Для этого программа создает задание, в котором указаны файлы, и потом это задание идет или в очередь или сразу выполняется. В общем это уже больше для разработчиков, вряд ли вам интересно)
Нужно ли отключать службу BITS? Судя по тому где она используется — нет, отключать не стоит, иначе могут быть проблемы со встроенным антивирусом или с обновлениями. Но если вы ни первым ни другим не пользуетесь — то получается отключить можно. Но опять же, а если еще какая-то программа использует эту службу? Нельзя ведь точно знать какие проги используют, а какие нет. Поэтому.. нет, лучше все таки ее не отключать. Тем более что вряд ли она может грузить ПК — разве что совсем немного и только когда идет передача данных.
Чтобы отключить службу или посмотреть, включена она или нет, то нужно открыть окошко свойств — там есть вся необходимая информация. Как это сделать? А вот как — зажимаете Win + R, вставляете эту команду:
Нажимаете ОК и потом в списке служб находите Фоновая интеллектуальная, нажимаете два раза и будет окошко свойств. Там все будет сказано. Чтобы отключить — в Тип запуска выбираете Отключена и нажимаете кнопку Остановить. Но отключать в итоге все таки думаю что не стоит.
Как и многие системные службы, BITS работает под процессом svchost.exe, тут ничего удивительного нет.
Проверка состояния службы BITS

BITS Administration Utility (bitsadmin.exe)
BITS Administration Utility — инструмент управления службой BITS. Возможно что инструмент из себя представляет команду, так как имеет параметры для запуска из командной строки:
Да, bitsadmin.exe — это команда:
Я точно не знаю — но если интересно, то можете попробовать ввести в командную строку:
И в результате может отобразиться справка по этой команде.
Вирус может использовать BITS
Но я нашел еще кое-что интересное. Впрочем ничего странного нет.. в общем вирусы тоже могут использовать службу BITS. На одном сайте читаю, что некий троян в 2016 году использовал функционал службы для загрузки вирусов на ПК. Ну тут просто без комментариев, я то думал что там в Microsoft это учли и сделали так, что загрузка могла бы быть только с безопасных источников. Но как видим — нет.
Сегодня тот вирус уже вряд ли опасен — информация за 2016 год, а сейчас конец 2018, и скорее всего вирус уже внесен в антивирусные базы.
Нашел даже более точную информацию — вирус назывался Zlob.Q и он использовал BITS для связи с командным центром (C&C). И как обнаружили этот вирус? Все очень просто — была подозрительная активность службы BITS, ну и начали копать, и в итоге докопались.
Возможно у вас тоже есть подозрительная активность? В любом случае, при малейшем подозрении — проверьте ПК на вирусы. Чем? Я перечислю две основные утилиты, которыми стоит проверять регулярно ПК:
Вот этими двумя утилитами я оч советую проверить ПК при малейшем подозрении на вирус. На этом все — удачи, надеюсь информация помогла.
Какие службы в Windows нужны, а какие можно отключить.
Здравствуйте дорогие читатели, сегодня я хотел бы поговорить:
1. О службах Windows, что это, для чего нужны и какие за что отвечают.
2. И как же повысить быстродействия компьютера?
И так что это за службы Windows?
Службы — приложения, автоматически или вручную запускаемые системой при запуске Windows и выполняющиеся вне зависимости от статуса пользователя различные задачи.
Открыть список служб можно несколькими способами:
1. Удерживая кнопку windows нажимаем R, откроется окно выполнить, там введите services.msc
2. Пуск > Панель управления > Администрирование > Службы
3. Пуск > правой кнопкой мыши по моему компьютеру > Управление > Службы и приложения > Службы
Как видите в Windows их достаточно много и скачав справочник служб, Вы можете ознакомиться какие службы существуют и за что каждая из них отвечает.
Так как службы это приложения, следовательно они работают и используют часть ресурсов компьютера. Отключив не нужные можно повысить его быстродействие. Посмотрим что можно отключить.
Какие службы можно отключить в Windows 7, 8
Я не стал составлять список тех служб которые можно отключить, т.к. многие службы индивидуальны. Я просто постарался описать каждую службу и в каких ситуациях их можно отключить. Если вам нужно что-нибудь отключить бездумно, то просто воспользуйтесь программой для автоматического отключения служб.
* BranchCache — Служба кэширует сетевое содержимое. Если не пользуетесь домашней сетью, то вообще можете отключить.
* DHCP-клиент — Если пользуетесь интернетом не трогайте ни в коем случае. Именно эта служба присваивает вам ip адрес.
* DNS-клиент — Так же необходимая служба для использования интернета. Работает с вашими DNS (служит для правильных направлений).
* KtmRm для координатора распределенных транзакций — системная функция транзакций. Её так же оставляем.
* Parental Controls — Служба для родительского контроля. Если не используете, можно отключить.
* Plug-and-Play — служит для автоматического распознавания изменений в системе. Например когда вы подключаете флешку, просыпается эта служба… Так что оставляем как есть.
* Quality Windows Audio Video Experience — передача аудио и видео по сети в режиме реального времени. Не нужна только если нет сети (или интернета) в остальных случаях оставляем.
* Remote Desktop Configuration — Для удаленного рабочего стола. Если не пользуетесь удаленными подключениями, отключаем.
* Superfetch — Полезная функция, работает с кэшем. Ускоряет работу Windows, так что оставляем.
* Windows Audio — Управляет звуком. Если не нужен звук отключаем. В остальных случаях оставляем.
* Windows CardSpace — ненужная и небезопасная служба. По этому отключаем.
* Windows Driver Foundation — User-mode Driver Framework — для нормальной работы драйверов, не трогайте. Пусть остается как есть.
* Windows Search — Индексирование файлов для поиска. Если не пользуетесь и есть время подождать пока найдется файл, то отключаем. На ssd обязательно отключаем!
* WMI Performance Adapter — нужна для служб требующие wmi, ставим вручную. Если каким-то приложениям понадобятся, те сами запустят)
* Автонастройка WWAN — служба для использования мобильного интернета. Если пользуетесь usb модемом, сим картой в ноуте, то не отключайте.
* Автономные файлы — помогает работать, автономно с недоступными файлами, которые загрузились до этого. Ставим вручную.
* Агент защиты сетевого доступа — Ставим вручную, т.к. при необходимости служба запустится, если какая-то программа запросит необходимую информацию.
* Агент политики IPsec — Нужна при наличии сети и интернета.
* Адаптивная регулировка яркости — Оставляем если есть датчик освещения.
* Архивация Windows — Если не пользуетесь отключайте. Но лучше почитайте про архивацию в windows мало ли, будете пользоваться.
* Биометрическая служба Windows — нужна лишь при использовании биометрических устройств. В остальных случаях отключаем.
* Брандмауэр Windows — Я если честно всегда отключаю, т.к. воровать у меня нечего) А если и зашифруют данные, то восстановлю) Но вам посоветую обзавестись например касперским интернет секьюрити, которого есть и антивирус и брандмауэр. А этот отключите нафиг, т.к. он иногда блокирует что не нужно) Вообщем он следит за безопасностью вашего компьютера и закрывает порты, чтобы ворюги не смогли залезть к вам в компьютер)
* Браузер компьютера — В домашней сети не нужна. Вручную.
* Веб-клиент — Нудна если нет интернета. Служит для работы с файлами в интернете. Оставляем.
* Виртуальный диск — Служба для работы с запоминающими устройствами. Ставим вручную.
* Вспомогательная служба IP — Работает с протоколом версии 6. Я всегда отключаю его самого, так что и службу можно вообще отключить.
* Вторичный вход в систему — Ставьте вручную, т.к. некоторые игры или программы включат её по необходимости.
* Группировка сетевых участников — Нужна для домашней группы. Ставьте вручную, мало ли понадобится…
* Дефрагментация диска — В принципе она не мешает. Можете оставить или отключить. Если отключите, то рекомендую делать раз в месяц. А для ssd дисков, вообще отключаем!
* Диспетчер автоматических подключений удаленного доступа — Ставим вручную. Нужна для удаленных подключений.
* Диспетчер печати — Нужна если есть с чего печатать. В остальных случаях отключаем.
* Диспетчер подключений удаленного доступа — вручную. Один раз вообще отключил и не смог создать подключение. Так что лучше вручную.
* Диспетчер сеансов диспетчера окон рабочего стола — Если не используете прозрачность от Aero, то можно отключить, даст большой прирост.
* Диспетчер удостоверения сетевых участников — Ставим лучше вручную.
* Диспетчер учетных данных — Лучше вручную. Хранит ваши данные, например логины и пароли.
* Диспетчер учетных записей безопасности — Лучше оставить как есть. Если отключить данную службу, то все изменения в локально политике безопасности пропадут.
* Доступ к HID-устройствам — Доступ к быстрым клавишам. Отключите, если какие-то комбинации перестанут работать, то поставьте обратно.
* Журнал событий Windows — записывает все события. Полезный инструмент для опытного пользователя. Отключить невозможно.
* Журналы и оповещения производительности — системная служба, оставляем как есть.
* Защита программного обеспечения — так же системная служба, оставляем как есть.
* Защитник Windows — Защита от шпионских и вредных программ. Установите нормальный антивирус, а эту службу отключите.
* Изоляция ключей CNG — Вручную.
* Инструментарий управления Windows — Системная служба, без неё, некоторые приложения могут работать некорректно, так что лучше оставить.
* Информация о совместимости приложений — Полезная штука, помогает запустится приложениям, которые отказываются работать на вашей ос. Ставим вручную.
* Клиент групповой политики — Оставляем. Отвечает за настройками политики безопасности.
* Клиент отслеживания изменившихся связей — Отслеживание файлов ntfs, не нужно. Отключаем.
* Координатор распределенных транзакций — Ставим вручную.
* Кэш шрифтов Windows Presentation Foundation — Ставим вручную. При необходимости её запустят приложения.
* Ловушка SNMP — Некоторые программы будут собирать о вас информацию. Так что отключайте.
* Локатор удаленного вызова процедур (RPC) — Вручную, при необходимости приложения её запустят.
* Маршрутизация и удаленный доступ — Не нужна. Отключаем.
* Модули ключей IPsec для обмена ключами в Интернете и протокола IP с проверкой подлинности — Не нужна, но лучше вручную.
* Модуль запуска процессов DCOM-сервера — Системная служба, оставляем как есть.
* Модуль поддержки NetBIOS через TCP/IP — Если нет других компьютеров в сети, то вручную.
* Немедленные подключения Windows — регистратор настройки — Вручную.
* Обнаружение SSDP — Оставьте как есть. Необходима для новых устройств.
* Обнаружение интерактивных служб — Вручную.
* Общий доступ к подключению к Интернету (ICS) — Не нужна, если вы не расшариваете ваш интернет в сетевых подключениях.
* Определение оборудования оболочки — необходима для диалогового окна автозапуска диска или флешки. Кому как удобно, большинству это нужно. Я оставил.
* Основные службы доверенного платформенного модуля — Нужно только для использования чипов ТМР и/или BitLocker.
* Перенаправитель портов пользовательского режима служб удаленных рабочих столов — Если не используете удаленные соединения, то не нужно. Лучше поставьте вручную.
* Перечислитель IP-шин PnP-X — Лучше поставить вручную.
* Питание — Не отключается. Оставляем.
* Планировщик заданий — Желательно оставить как есть, т.к. сейчас много программ его использует.
* Планировщик классов мультимедиа — Оставляем, для кого важен звук.
* Поддержка элемента панели управления «Отчеты о проблемах и их решениях» — Вручную.
* Политика удаления смарт-карт — для пользователей смарт-карт, лучше вручную.
* Поставщик домашней группы — Для использования домашних групп. Лучше вручную.
* Проводная автонастройка — Вручную.
* Программный поставщик теневого копирования (Microsoft) — Вручную.
* Прослушиватель домашней группы — Вручную.
* Протокол PNRP — Тоже оставляем вручную. Некоторые приложения могут использовать службу.
* Публикация ресурсов обнаружения функции — Нужна если вы хотите показывать свои файлы другим компьютерам по сети. Если не хотите, то вручную или отключить.
* Рабочая станция — лучше оставить, т.к. некоторые приложения задействуют данную службу.
* Распространение сертификата — Лучше вручную.
* Расширяемый протокол проверки подлинности (EAP) — Вручную.
* Сборщик событий Windows — Вручную.
* Сведения о приложении — Вручную.
* Сервер — Если компьютер не используется как сервер или не использует общий доступ к файлам и принтерам, то отключайте.
* Сервер упорядочения потоков — Отключаем если нет домашней группы.
* Сетевой вход в систему — Вручную.
* Сетевые подключения — Оставьте как есть. Если нет сети или интернета, то можете отключить.
* Система событий COM+ — ставим вручную. Приложения зависящие от это службы сами её запустят при необходимости.
* Системное приложение COM+ — Так же вручную.
* Служба SSTP — Оставляем как есть, нужна служба если есть интернет на компьютере.
* Служба автоматического обнаружения веб-прокси WinHTTP — Если нужен интернет, то оставьте как есть.
* Служба автонастройки WLAN — служба для беспроводных сетей. Соответственно если их нет, она не нужна.
* Служба базовой фильтрации — с одной стороны, она не нужна (если не нужна безопасность), но с другой, некоторые программы, могут выдавать ошибки. Так что оставляем.
* Служба ввода планшетного ПК — если экран не сенсорный, то не нужна.
* Служба времени Windows — нужна для синхронизации времени с интернетом.
* Служба загрузки изображений Windows (WIA) — Нужна служба, только если есть сканер. Она отвечает за получение изображений со сканеров и камер.
* Служба инициатора Майкрософт iSCSI — Ставим вручную, если программам понадобится, они сами её запустят.
* Служба интерфейса сохранения сети — Нужна для нормальной работы сети.
* Служба кэша шрифтов Windows — служит для повышения производительности, кэширует шрифты и не тратит время на загрузку.
* Служба медиаприставки Media Center — Если не используете никаких приставок, она не нужна.
* Служба модуля архивации на уровне блоков — Ставим вручную. Если понадобится архивация или восстановление, то служба сама запуститься.
* Служба общего доступа к портам Net.Tcp — По умолчанию выключена. Нужна если только понадобится протокол Net.Tcp.
* Служба общих сетевых ресурсов проигрывателя Windows Media — Вручную. Понадобится, включится.
* Служба перечислителя переносных устройств — Служит для синхронизации музыки, видео и т.д. со съемными носителями. Я бы поставил вручную. Не всегда это нужно.
* Служба планировщика Windows Media Center — Нужна если только смотрите передачи в Windows Media Player.
* Служба поддержки Bluetooth — Нужна если есть Bluetooth.
* Служба политики диагностики — Нужна для диагностики неполадок… Она если честно помогает редко. По этому можете по-экспериментировать, отключив её. Если понадобится — включите.
* Служба помощника по совместимости программ — служба нужна для запуска программ, несовместимый с вашей ОС. Если нет таковых поставьте вручную.
* Служба профилей пользователей — Лучше оставить. Она работает с профилями пользователей компьютера.
* Служба публикации имен компьютеров PNRP — Нужна для домашних групп.
* Служба регистрации ошибок Windows — Регистрирует ошибки. Лучше поставить вручную.
* Служба ресивера Windows Media Center — для просмотра телерадио передач в плеере.
* Служба сведений о подключенных сетях — Лучше оставить как есть, для нормальной работы сети.
* Служба списка сетей — Так же лучше оставить.
* Служба уведомления SPP — Для лицензирования. Оставьте вручную.
* Служба уведомления о системных событиях — Если не собираетесь смотреть сообщения Windows, то она вам не нужна.
* Служба удаленного управления Windows (WS-Management) — Поставьте вручную.
* Служба шифрования дисков BitLocker — Шифрует диски. Если не пользуетесь, то лучше отключите.
* Служба шлюза уровня приложения — Служба нужна только для работы с брандмауэром. Вручную.
* Службы криптографии — Для установки новых программ, лучше оставьте как есть.
* Службы удаленных рабочих столов — Если не пользуетесь удаленными рабочими столами, то отключайте.
* Смарт-карта — Если ими не пользуетесь, то она вам не нужна.
* Сопоставитель конечных точек RPC — Служба нужна для входящего трафика. С ней ничего нельзя сделать. По этому оставляем.
* Средство построения конечных точек Windows Audio — Если нужен звук, оставьте.
* Телефония — Оставьте вручную. Если понадобится, запустится.
* Темы — Едят много ресурсов памяти. Если не нужны, отключайте.
* Теневое копирование тома — Создает точки восстановления, архивация в фоновом режиме. Поставьте вручную. Если нужно будет запустится.
* Тополог канального уровня — Тоже вручную. Если понадобится, запустится.
* Удаленный вызов процедур (RPC) — Системная служба. Оставьте как есть.
* Удаленный реестр — Позволяет удаленным пользователям, манипулировать вашим реестром. Отключайте.
* Удостоверение приложения — Вручную.
* Узел системы диагностики — Диагностика проблем. Поставьте вручную.
* Узел службы диагностики — Так же вручную.
* Узел универсальных PNP-устройств — Ставьте вручную. Не все устройства PnP.
* Управление приложениями — Ставьте вручную. Служба позволяет настроить политики для приложений.
* Управление сертификатами и ключом работоспособности — Ставьте вручную, понадобится, запустится сама.
* Установщик ActiveX — Так же вручную. Понадобится установить такой объект, она сама запустится.
* Установщик модулей Windows — Устанавливает и удаляет компоненты и обновления. Вручную.
* Факс — Нужна если только есть факс.
* Фоновая интеллектуальная служба передачи (BITS) — Оставляем вручную. Служба полезная.
* Хост поставщика функции обнаружения — Оставляем вручную. Нужно будет запустится.
* Цветовая система Windows (WCS) — Вручную. Нужна будет устройствам, запустят.
* Центр обеспечения безопасности — Следит за безопасностью Windows. Меня она бесит со своими уведомлениями. Так что отключать или нет, выбирать вам.
* Центр обновления Windows — С одной стороны полезная функция. Заделывает дыры в системе, обновляет драйвера, но с другой стороны, активно использует интернет, ресурсы памяти и если при обновлении выключить компьютер, может рухнуть ОС. Так что так же вам выбирать что важнее, безопасность или быстродействие.
* Шифрованная файловая система (EFS) — Для безопасности файлов. Лучше оставьте как есть вручную.
Я постарался представить весь список служб. Отключив некоторые, вы повысите быстродействие компьютера. Можно так же по своему усмотрению решить какие нужны, а какие нет. Например если нет интернета, то тут половину смело рубить можно, если нет принтера, то тоже можно много выключить. Таким образом в зависимости от ваших потребностей, можно существенно взбодрить старый компьютер.
Служба передачи данных
Незаметная, но интеллектуальная служба BITS
Объемы данных, передаваемых по сети современными приложениями, нередко достигают десятков или сотен мегабайт, а порой измеряются и гигабайтами. Это подчас приводит к заметному снижению пропускной способности сети. С другой стороны, постоянно растущее число мобильных пользователей или пользователей, вынужденных работать в условиях отсутствия надежных каналов связи с высокой пропускной способностью, заставляет задумываться над проблемой передачи больших объемов информации в сетях с неустойчивым или прерывающимся соединением. Например, вы можете начать передавать файл во время полета на самолете, но не успеть завершить процесс, а продолжить его из гостиничного номера. Или передача данных с буровой вышки может быть прервана из-за резкого ухудшения погодных условий.
Для решения этих и ряда других задач в состав Microsoft Windows 2003 Server включена новая служба — Background Intelligent Transfer Service (BITS). Она предназначена для передачи информации в фоновом режиме по ненадежным соединениям. Основные преимущества, предоставляемые этой службой, описаны во врезке «Зачем нужна BITS»
Специалисты Microsoft позаботились о разработчиках программного обеспечения и предложили специальный SDK, предназначенный для написания приложений, которые используют новую службу. Данная статья посвящена технологии и архитектуре BITS, а также интерфейсам программирования и приемам работы с ними, необходимым для использования возможностей службы BITS в приложениях. Материал, посвященный службе BITS, «Background Intelligent Transfer Service», можно найти на сайте MSDN по адресу http://msdn.microsoft.com/library/default.asp?url=/ library/en-us/bits/bits/bits_start_page.asp
Знакомство
BITS — это служба, предназначенная для передачи данных между клиентом и сервером. В отличие от других протоколов, BITS по умолчанию передает файлы в фоновом режиме, использующем для передачи информации только ситуации низкого сетевого трафика. Для реализации этой функции служба проверяет состояние сети и использует ее в моменты наименьшей загрузки. Также существенным отличием BITS от других механизмов передачи является асинхронный алгоритм работы, который позволяет приложению, инициировавшему передачу файлов, прекратить работу в то время, когда информация еще не передана. После генерации задания на передачу файла пользователь может прекратить выполнение приложения, а уже BITS осуществит передачу данных. Если пользователь, инициировавший передачу файла, закроет свою сессию работы на компьютере, процесс передачи будет приостановлен и возобновлен только после следующей регистрации пользователя в системе. Если задание создано системной службой, выполняющейся под определенной учетной записью (например, LocalSystem) и не требующей регистрации пользователя, то оно будет выполняться во время работы службы.
В операционную систему Microsoft Windows XP включена поддержка BITS версии 1.0, которая поддерживает только получение файлов (download), но не их передачу (upload). Версия BITS 1.5, поддержка которой включена в операционную систему Windows Server 2003, поддерживает двунаправленную передачу файлов. Также версия 1.5 может быть дополнительно установлена для Windows 2000 и Windows XP. В этой статье будет рассматриваться версия BITS 1.5.
Для осуществления передачи файлов должен быть установлен сервер Internet Information Services (IIS) версии 5.0 или 6.0 с серверными расширениями BITS. Версия IIS 5.1, входящая в поставку Windows XP, не поддерживается. Соответствующие обновления можно получить на сайте Microsoft.
Программный интерфейс ориентирован на использование в программах, разрабатываемых на языке C++, и входящие в него заголовочные и библиотечные файлы, а также справочные материалы входят в поставку SDK.
Служба BITS поддерживает протоколы HTTP и HTTPS для получения и загрузки файлов и требует сервера HTTP версии 1.1. Для получения файлов HTTP серверный метод Head должен возвращать размер файла в байтах, а метод Get должен поддерживать заголовки Content-Range и Content-Length. Для передачи динамической информации приложения ASP, ISAPI или CGI также должны поддерживать заголовки Content-Range и Content-Length. В противном случае возможна передача только статической информации. В табл. 1 приведено сравнение BITS и других механизмов, используемых для передачи файлов.
Конечно же, служба BITS может осуществлять и простую передачу файлов между каталогами. На листинге 1 приведен пример функции, которая выполняет простое копирование файлов. Приложение контролирует весь процесс передачи данных, т. е. не является асинхронным.
Перед тем как вкратце описать принципы действия программы, определим терминологию, используемую в API службы BITS. Основной термин, который применяется при описании работы BITS, — «задание» (Job). Это логический контейнер, объединяющий один или несколько файлов, предназначенных для передачи. Все файлы, входящие в задание, имеют одинаковый приоритет. Все задания объединяются в одну очередь заданий (Queue). Задания, помещенные в очередь, выполняются последовательно, т. е. одновременно не может передаваться более одного файла. Если выполнение задания по той или иной причине приостановлено, выполняется следующее задание с наиболее высоким приоритетом. Под файлом (File) понимается объект, имеющий два основных параметра — удаленное (Remote) и локальное (Local) имена. В зависимости от типа задания файл будет либо передан на удаленный ресурс, либо скопирован оттуда.
Программные интерфейсы BITS
Для разработки клиентских приложений специалисты Microsoft создали API, представляющий собой несколько COM-интерфейсов. Это делает API независимым от применяемых средств разработки. В том числе возможно использование функций, представляемых службой BITS в сценариях. Интерфейсы API, необходимые для передачи файлов и обеспечения управления процессом их копирования, приведены в табл. 2.
Рассмотрим пример из листинга 1. В первую очередь создается экземпляр интерфейса IBackgroundCopyManager. Он обеспечит доступ ко всем прочим необходимым интерфейсам. Далее используется метод IBackground CopyManager::CreateJob для создания задания и метод AddFile интерфейса IBackgroundCopyJob для инициализации процесса передачи файла. При создании задания указывается, каким образом оно будет применяться. Возможны три варианта значения параметра Type, имеющего тип BG_JOB_TYPE:
BG_JOB_TYPE_DOWNLOAD — определяет, что задание будет использовано для получения данных на стороне клиентского приложения.
BG_JOB_TYPE_UPLOAD — определяет, что задание будет использовано для передачи (загрузки) данных на сервер. Это значение доступно в версии BITS 1.5.
BG_JOB_TYPE_UPLOAD_REPLY — определяет, что задание будет использовано для передачи (загрузки) данных на сервер и получения файла ответа от серверного приложения. Это значение также доступно в версии BITS 1.5.
Также замечу, что выполнение задания после создания приостанавливается. Для продолжения и наблюдения за ходом выполнения задания используется периодический опрос его состояния. Текущий статус задания возвращает метод GetState интерфейса IBackgroundCopyJob. Статус может принимать следующие значения:
BG_JOB_STATE_QUEUED — показывает, что задание находится в очереди и ожидает выполнения. Если пользователь выйдет из системы до завершения задания, оно будет переведено в это состояние.
BG_JOB_STATE_CONNECTING — показывает, что служба BITS пытается установить соединение с сервером. Если соединение успешно установлено, состояние задания переходит в состояние BG_JOB_STATE_TRANSFERRING, в противном случае будет возвращено значение BG_JOB_STATE_TRANSIENT_ERROR.
BG_JOB_STATE_TRANSFERRING — показывает, что BITS передает информацию, помещенную в задание.
BG_JOB_STATE_SUSPENDED — показывает, что выполнение задания приостановлено. Для перевода в это состояние вызывается метод IBackgroundCopyJob::Suspend. Как я уже отметил выше, служба BITS автоматически приостанавливает задание после его создания. Задание будет находиться в приостановленном состоянии, пока не будет вызван один из методов: IBackgroundCopyJob::Resume, IBackgroundCopyJob::Complete или IBackgroundCopyJob::Cancel.
BG_JOB_STATE_ERROR — показывает, что при выполнении задания возникла критическая ошибка, приводящая к невозможности передачи файла. Когда ошибка будет исправлена, например изменены настройки системы, приводящие к запрещению доступа, вызов метода IBackgroundCopyJob::Resume продолжит выполнение задания. Если ошибка не может быть исправлена, вызов метода IBackgroundCopyJob:
:Cancel прервет выполнение задания, а вызов метода IBackground CopyJob::Complete позволит продолжить передачу других файлов, входящих в задание, и посчитать эту часть успешно завершенной.
BG_JOB_STATE_TRANSIENT_ERROR — показывает, что возникла некритическая ошибка. Служба BITS будет пытаться продолжить передачу данных в течение времени, установленного при вызове метода IBackgroundCopyJob::SetNoProgressTimeout. Если в течение этого времени передача не продолжится, статус задания поменяется на BG_JOB_STATE_ERROR.
BG_JOB_STATE_TRANSFERRED — показывает, что задание успешно завершено. Для заданий, предполагающих получение файлов клиентом, после перехода в это состояние необходимо вызвать метод IBackgroundCopyJob::Complete для предоставления клиентам доступа к полученным файлам.
BG_JOB_STATE_ACKNOWLEDGED — показывает, что клиентским приложением был вызван метод IBackgroundCopyJob::Complete, подтверждающий, что задание успешно выполнено.
BG_JOB_STATE_CANCELLED — показывает, что выполнение задания было прервано клиентским приложением с помощью вызова метода IBackgroundCopyJob::Cancel, который прерывает выполнение задания и удаляет его из очереди.
На рис. 1 показан жизненный цикл задания. Он начинается с генерации задания, это функция клиентского приложения. Задание представляет собой логический контейнер, содержащий файлы для передачи. После создания задания к нему добавляется один или несколько файлов для передачи. Важно! Обращаю внимание читателей на то, что в задание, предназначенное для передачи файлов на сервер, может быть помещен лишь один файл.
![]() |
| Рисунок 1. Жизненный цикл задания |
Служба BITS автоматически приостанавливает задание после его создания. После активизации задания начинается передача информации. Задание выполняется успешно в случае передачи файлов, но может быть и прервано клиентским приложением.
Приведенной информации вполне достаточно для написания простых приложений, использующих службу BITS для передачи и получения файлов.
Но, безусловно, больший интерес представляет возможность осуществлять обмен информацией с HTTP-сервером. Рассмотрим, как происходит такой обмен, каким образом настраивается сервер для реализации этих возможностей, как реализуются серверные и клиентские приложения.
Для использования возможности загрузки файлов на сервер необходимо создать на сервере виртуальную папку, в которую клиенты будут передавать информацию. Виртуальные каталоги создаются для каждого типа обслуживаемых сервером клиентов. Например, для мобильных клиентов, использующих медленные каналы передачи данных, может потребоваться большее время ожидания, чем для клиентов из локальной сети, или может понадобиться ограничение размера данных, которые пользователи смогут размещать на сервере.
Компоненты службы BITS добавляют свойства в базу метаданных IIS. Для создаваемых виртуальных папок эти свойства используются для определения порядка размещения файлов.
Чтобы использовать службу BITS для передачи данных на сервер, необходимо настроить серверные расширения BITS для IIS и разрешить запись в каталоги. Для этого можно воспользоваться предоставляемыми BITS программными API или произвести настройки вручную, открыв окно настройки свойств виртуального каталога в консоли управления IIS.
В табл. 3 приведены параметры, используемые службой Background Intelligent Transfer Service для расширения возможностей IIS по поддержке функций загрузки файлов. В таблице описаны параметры, добавляемые BITS в базу метаданных IIS, относящиеся к виртуальному каталогу. Служба BITS использует эти параметры для определения правил загрузки файлов. Отметим, что под серверным приложением подразумевается приложение CGI, ASP или ISAPI, которое используется при обмене.
Пример, приведенный в листинге 2, включен в SDK и показывает, как установить свойства расширений IIS, используя Windows Scripting Host. Если виртуальный каталог является ссылкой на удаленный ресурс, то кроме приведенных еще устанавливаются значения свойств UNCUserName и UNCPassword.
Взаимодействие с серверными приложениями
Служба BITS использует приведенные в табл. 4 заголовки запросов HTTP для передачи информации серверным приложениям. BITS с помощью параметра BITSServerNotificationType определяет заголовок (header), который будет использоваться. Если параметр BITSServerNotificationType имеет значение 1, BITS передает местоположение загружаемого файла в заголовке. Если параметр BITSServerNotificationType имеет значение 2, BITS передает тело файла в заголовке запроса.
Передача загружаемого файла в теле запроса позволяет существующим приложениям работать с минимальной модификацией кода. Загружаемый и получаемый файлы передаются соответственно в теле запроса и ответа. В следующем примере показано, как служба BITS передает загружаемый файл на серверное приложение в теле запроса.
и далее следуют 80 000 байт передаваемого файла
А так выглядит ответ серверного приложения:
HTTP/1.1 200 — OK
Content-Length: 100
и далее идут 100 байт возвращаемой информации.
Служба BITS передает расположение загружаемого файла и файла ответа в параметрах. Серверное приложение открывает загружаемый файл, обрабатывает данные и создает файл ответа. Затем BITS удаляет загружаемый файл и файл ответа после получения ответа от серверного приложения. Если серверному приложению требуются эти файлы в дальнейшем, они должны быть скопированы в другое место. В следующем примере запроса показано, как BITS передает адрес загружаемого файла серверному приложению:
POST http://myserver/myvdir/handle_upload.asp?ACCOUNT=873112 HTTP/1.1
Host: myserver
BITS-Original-Request-URL: http://front-end-server/vdir
BITS-Request-DataFile-Name: c:physical-pathBITS-Sessions <5e53c221-f2d6-4bf2-
b994-1dc43ceaca8d> equest
BITS-Response-DataFile-Name: c:physical-pathBITS-Sessions <5e53c221-f2d6-4bf2-
b994-1dc43ceaca8d> esponse
Content-Length: 0
А это текст ответа серверного приложения службе BITS; возвращаемая информация находится в файле, определенном параметром BITS-Response-DataFile-Name запроса.
HTTP/1.1 200 — OK
Content-Length: 0
Заметим, что BITS не может осуществить запись файлов в виртуальную папку, для которой разрешены запуск сценариев и программ. Если попытаться записать файлы в такую папку, будет возвращена ошибка. BITS не требует разрешения на запись в виртуальный каталог; более того, рекомендуется вводить запрет на запись.
Настройки, устанавливаемые по умолчанию, позволяют осуществлять запись файлов на сервер. Для записи файлов на сервер и отправки последующего уведомления о завершении процесса необходимо разрешить BITS уведомлять о событиях и указать URL серверного приложения, которое должно быть вызвано. Как правило, это расширение ISAPI. Служба BITS осуществит передачу данных и оповестит сервер. Для этого она использует запросы и ответы, предусмотренные протоколом HTTP для связи с серверным приложением.
Обмен информацией
Выше рассматривалось простое приложение, позволяющее передать файлы. Теперь можно рассмотреть другие интерфейсы, предоставляемые службой BITS. Размещение файла в очереди заданий происходит одним способом, и он уже был рассмотрен. Но получение информации о ходе передачи может осуществляться не только с помощью опроса состояния задания, как было показано в листинге 2.
Реализация интерфейса IBackgroundCopyCallback позволяет получать уведомления о завершении задания, возникших ошибках или изменении его статуса. Клиентское приложение может использовать это решение вместо опроса состояния очереди. Я написал класс, описание которого можно найти в листинге 3, реализующий необходимый интерфейс. Для получения уведомлений нужно передать указатель на объект этого класса с помощью метода IBackgroundCopyJob::SetNotifyInterface. Служба BITS будет использовать этот указатель в течение всего срока жизни приложения. Когда приложение будет запущено вновь, указатель необходимо восстановить. Гарантирован как минимум один вызов после повторной регистрации. Например, если приложение было завершено до завершения задания, то после его повторного старта, даже если он имел место после выполнения задания, произойдет уведомление о завершении. Необходимо реализовать все методы интерфейса IBackground
CopyCallback. Если метод ничего не делает, он должен возвращать значение S_OK. Чтобы определить, оповещения о каких событиях необходимо доставлять в приложение, используется метод IBackgroundCopyJob:
:SetNotifyFlags, которому передается один параметр, состоящий из одного или нескольких флагов:
BG_NOTIFY_JOB_TRANSFERRED — флаг показывает, что оповещение должно быть передано, когда все файлы в задании успешно переданы.
BG_NOTIFY_JOB_ERROR — оповещение об ошибках.
BG_NOTIFY_DISABLE — это значение запрещает службе BITS передавать уведомления о событиях. Все остальные флаги будут проигнорированы.
BG_NOTIFY_JOB_MODIFICATION — состояние задания изменилось. Например, изменился приоритет задания, статус задания или произошло изменение объема переданной информации. Этот флаг игнорируется, если оповещения передаются внешнему приложению (см. ниже).
В листинге 4 показана простая реализация методов класса, принимающего оповещения о событиях.
На рис. 2 показана диаграмма состояний задания. Заметим, что на диаграмме не отражено состояние CANCELED. Так как в него задание может перейти из любого другого состояния, кроме ACKNOWLEDGED, для наглядности я не стал его изображать.
![]() |
| Рисунок 2. Диаграмма состояний задания |
В состояние SUSPENDED задание переходит либо сразу после создания, либо после вызова метода IBackgroundCopyJob::Suspend. В это состояние задание может перейти из любого другого, кроме состояний CANCELED или ACKNOLEDGED.
Если задание переходит в состояние ERROR, то оно может быть перезапущено после устранения ошибки. И наконец, если задание находится в состоянии TRANSIENT ERROR, служба BITS пытается восстановить задание автоматически.
Кроме описанных способов уведомления о событиях, BITS предоставляет еще одну интересную возможность. Можно определить приложение (исполняемый файл), которое будет вызвано при наступлении того или иного события. Для этого используется интерфейс IBackground CopyJob2, указатель на который возвращается вызовом метода IBackgroundCopyJob::ueryInterface (см. листинг 5).
Далее вызовом метода IBackground
CopyJob2::SetNotifyCmdLine указывается приложение, которое должно быть вызвано, и передаваемые ему параметры командной строки. Заметим, что первым параметром должен быть путь к приложению. Вообще говоря, достаточно использовать еще один параметр — идентификатор задания, получаемый при его создании. В отличие от механизма уведомления о событиях, здесь возможно уведомление лишь об ошибках, возникших в процессе выполнения задания, и о завершении задания. Так же как и в предыдущем случае, типы событий, о которых необходимы уведомления, устанавливаются вызовом метода IBackgroundCopyJob:
:SetNotifyFlags. В том случае если ранее был установлен указатель на интерфейс приема информации о событиях, будет возвращена ошибка.
Приложение, которое будет вызвано в случае наступления указанных событий, может восстановить указатель на IBackgroundCopyJob вызовом метода IBackgroundCopyManager:
:GetJob (напомню, что второй параметр командной строки содержит GUID, идентифицирующий задание), примерно так:
hr = CLSIDFromString( argv[1],&JobId );
if( SUCCEEDED(hr) )
<
hr = pManager->GetJob( JobId,&pJob );
.
>
и далее использовать методы этого интерфейса в соответствии с логикой программы.
Интерфейс управления
Для управления свойствами виртуального каталога, отвечающими за взаимодействие с BITS, используется интерфейс IBITSExtensionSetup, который, в частности, позволяет разрешить или запретить запись файлов BITS в виртуальный каталог. Этот интерфейс представляет собой расширение интерфейсов Active Directory, ADSI. Получить указатель на данный интерфейс можно вызовом функции ADsGetObject:
HRESULT hr = IBITSExtensionSetup* pExtensionSetup = NULL;
hr = ADsGetObject( pszPath,__uuidof(IBITSExtensionSetup),&pExtensionSetup );
if( SUCCEEDED(hr) )
<
.
>
Но если этот интерфейс используется из программы, которая также запускает сервер BITS, например из программы установки, необходимо использование метода IBITSExtension
SetupFactory::GetObject для получения указателя на этот интерфейс. В остальных случаях возможно применение любого метода.
Интерфейс предоставляет следующие методы.
EnableBITSUploads — разрешает службе BITS загружать файлы в виртуальный каталог.
DisableBITSUploads — запрещает службе BITS загружать файлы в виртуальный каталог.
GetCleanupTaskName — возвращает имя задания, выполняющего очистку виртуального каталога.
GetCleanupTask — возвращает интерфейс задания, выполняющего очистку виртуального каталога. Это задание удаляет обработанные файлы. Когда создается виртуальный каталог и разрешается запись в него файлов, служба BITS добавляет задание, которое очищает каталог один раз в 12 часов и удаляет задания на передачу файлов, которые в течение этого времени не изменялись. Для определения периода ожидания, в течение которого файлы не будут удалены, необходимо установить свойство BITSSessionTimeout расширений IIS.
В листинге 6 приведен пример функции, разрешающей или запрещающей запись файлов в виртуальный каталог.
Читатели могут спросить, зачем использовать новый сложный API для решения, казалось бы, простых и давно известных задач? Дело в том, что служба BITS позволяет решать совсем не тривиальные задачи. Точнее, ее версия 1.5. Если внимательно просмотреть разделы, описывающие обмен информацией с серверными приложениями, станет понятно, что BITS ориентирована на асинхронный обмен динамическим контентом в среде IIS. Такая возможность, безусловно, стоит изучения нескольких интерфейсов. Кроме того, прямое назначение службы — обмен файлами — может помочь решить огромное количество проблем, возникающих, например, при интеграции распределенных приложений или при передаче больших объемов данных.
Зачем нужна BITS
Использование службы BITS предоставляет следующие преимущества, которые существенно изменяют процесс обмена файлами.
Александр Эпштейн (alex_ep@hotmail.com) — независимый консультант и разработчик программного обеспечения
Поделитесь материалом с коллегами и друзьями









