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 を使用します。

次の例で、シンボリック クラス識別子の 1 つを使用する方法を示します。

  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 は既定で IDENTIFY を使用します。 BITS は、適切な偽装レベルが設定されていない場合、E_ACCESSDENIED で失敗します。 BITS インターフェイスを実行するライブラリを提供し、ライブラリを呼び出すアプリケーションで偽装レベルが IDENTIFY より下に設定されている場合は、CoSetProxyBlanket を呼び出して、呼び出す BITS インターフェイスごとに適切な偽装レベルを設定する必要があります。

アプリケーションが終了する前に、次の例に示すように、IBackgroundCopyManager インターフェイス ポインターのコピーを解放します。

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

BITS の .NET および C# からの BITS への呼び出し