Подключение в службу 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