Conectando-se ao serviço BITS
Para se conectar ao serviço do sistema BITS, crie uma instância do objeto BackgroundCopyManager, conforme mostrado no exemplo a seguir. O serviço do sistema BITS é o serviço do sistema Windows em execução no computador cliente que implementa o recurso de transferência em segundo plano.
#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.
}
}
Para testar uma versão específica do BITS, use um identificador de classe simbólica para o BackgroundCopyManager com base na versão que você deseja verificar. Por exemplo, para testar o BITS 10.2, use CLSID_BackgroundCopyManager10_2.
O exemplo a seguir mostra como usar um dos identificadores de classe simbólica.
hr = CoCreateInstance(CLSID_BackgroundCopyManager5_0, NULL,
CLSCTX_LOCAL_SERVER,
IID_IBackgroundCopyManager,
(void**) &g_pbcm);
if (SUCCEEDED(hr))
{
//BITS 5.0 is installed.
}
Use os métodos da interface IBackgroundCopyManager para criar trabalhos de transferência, enumerar trabalhos na fila e recuperar trabalhos.
O BITS requer que os proxies de interface do cliente usem o nível IDENTIFY ou IMPERSONATE de representação. Se o aplicativo não chamar CoInitializeSecurity, COM usa IDENTIFY por padrão. O BITS falhará com E_ACCESSDENIED se o nível de representação correto não estiver definido. Se você fornecer uma biblioteca que exercite as interfaces BITS e um aplicativo que chame sua biblioteca definir o nível de representação abaixo de IDENTIFY, será necessário chamar CoSetProxyBlanket para definir o nível de representação correto para cada interface BITS chamada.
Antes que o aplicativo saia, solte sua cópia do ponteiro de interface IBackgroundCopyManager , conforme mostrado no exemplo a seguir.
if (g_pbcm)
{
g_pbcm->Release();
g_pbcm = NULL;
}
CoUninitialize();
Tópicos relacionados
-
Chamando o BITS do .NET e do C# para BITS