Подключение к службе 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 требует, чтобы прокси-серверы интерфейса клиента использовали уровень "IDENTIFY" или "IMPERSONATE" олицетворения. Если приложение не вызывает CoInitializeSecurity, COM использует ИДЕНТИФИКАТОР по умолчанию. BITS завершается ошибкой с E_ACCESSDENIED, если правильный уровень олицетворения не задан. Если вы предоставляете библиотеку, которая поддерживает интерфейсы BITS, и приложение, вызывающее вашу библиотеку, задает уровень олицетворения ниже IDENTIFY, необходимо вызвать CoSetProxyBlanket, чтобы задать правильный уровень олицетворения для каждого интерфейса BITS, который вы вызываете.
Прежде чем приложение завершит работу, оставьте копию указателя интерфейса IBackgroundCopyManager, как показано в следующем примере.
if (g_pbcm)
{
g_pbcm->Release();
g_pbcm = NULL;
}
CoUninitialize();
Связанные разделы
-
вызов BITS из .NET и C# с использованием BITS