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 への呼び出し