Подключение в службу BITS

Чтобы подключиться к системной службе BITS, создайте экземпляр объекта BackgroundCopyManager, как показано в следующем примере. Системная служба BITS — это системная служба Windows, запущенная на клиентском компьютере, который реализует возможность фоновой передачи.

#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h>
#include <bits.h>

//Global variable that several of the code examples in this document reference.
IBackgroundCopyManager* g_pbcm = NULL;  
HRESULT hr;

//Specify the appropriate COM threading model for your application.
hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (SUCCEEDED(hr))
{
  hr = CoCreateInstance(__uuidof(BackgroundCopyManager), NULL,
                        CLSCTX_LOCAL_SERVER,
                        __uuidof(IBackgroundCopyManager),
                        (void**) &g_pbcm);
  if (SUCCEEDED(hr))
  {
    //Use g_pbcm to create, enumerate, or retrieve jobs from the queue.
  }
}

Чтобы протестировать определенную версию BITS, используйте идентификатор символьного класса для BackgroundCopyManager на основе версии, которую требуется проверка. Например, чтобы протестировать BITS 10.2, используйте CLSID_BackgroundCopyManager10_2.

В следующем примере показано, как использовать один из идентификаторов символьного класса.

  hr = CoCreateInstance(CLSID_BackgroundCopyManager5_0, NULL,
                        CLSCTX_LOCAL_SERVER,
                        IID_IBackgroundCopyManager,
                        (void**) &g_pbcm);
  if (SUCCEEDED(hr))
  {
    //BITS 5.0 is installed.
  }

Используйте методы интерфейса IBackgroundCopyManager для создания заданий передачи, перечисления заданий в очереди и получения заданий.

BITS требует, чтобы прокси-серверы интерфейса клиента использовали уровень Олицетворения или IMPERSONATE. Если приложение не вызывает CoInitializeSecurity, COM использует ИДЕНТИФИКАТОР по умолчанию. BITS завершается ошибкой с E_ACCESSDENIED, если правильный уровень олицетворения не задан. Если вы предоставляете библиотеку, которая выполняет интерфейсы BITS, и приложение, которое вызывает библиотеку, задает уровень олицетворения ниже ИДЕНТИФИЦИРОВАТЬ, необходимо вызвать CoSetProxyBlanket , чтобы задать правильный уровень олицетворения для каждого вызываемого интерфейса BITS.

Перед выходом приложения оставьте копию указателя интерфейса IBackgroundCopyManager , как показано в следующем примере.

if (g_pbcm)
{
  g_pbcm->Release();
  g_pbcm = NULL;
}
CoUninitialize();

Вызов BITS из .NET и C# для BITS