IBackgroundCopyManager
COM公式ドキュメント
転送ジョブを作成し、キュー内のジョブを含む列挙子オブジェクトを取得し、キューから個々のジョブを取得します。
解説(Remarks)
Windows Vista 以降: ActiveX コントロールが Internet Explorer プロセスからこのインターフェイスをインスタンス化しようとすると、呼び出しはアクセス拒否で失敗します。これは、COM が整合性レベルの低いクライアントからより高い整合性レベルのクラスインスタンスへのバインドを許可しないためです。詳細については、Understanding and Working in Protected Mode Internet Explorer および How the Integrity Mechanism Is Implemented in Windows Vista を参照してください。この問題は、対象の Web サイトを信頼済みサイトゾーンに追加することで回避できます。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ジョブを作成します。
| DisplayName | LPWSTR | in | ジョブの表示名を含む、null で終わる文字列。通常、表示名はユーザーインターフェイスでジョブを識別するために使用します。複数のジョブが同じ表示名を持つ場合もあります。NULL にはできません。名前は null 終端文字を含めずに 256 文字までに制限されます。 |
| Type | BG_JOB_TYPE | in | BG_JOB_TYPE_DOWNLOAD などの転送ジョブの種類。転送の種類の一覧については、 BG_JOB_TYPE 列挙型を参照してください。 |
| pJobId | GUID* | out | キュー内のジョブを一意に識別します。キューからジョブを取得するために IBackgroundCopyManager::GetJob メソッドを呼び出す際に、この識別子を使用します。 |
| ppJob | IBackgroundCopyJob** | out | ジョブのプロパティを変更し、転送するファイルを指定するために使用する IBackgroundCopyJob インターフェイスポインター。キュー内のジョブを開始するには、 IBackgroundCopyJob::Resume メソッドを呼び出します。使用が終わったら ppJob を解放してください。 |
戻り値
このメソッドは、以下の HRESULT 値のほか、その他の値を返します。
| 戻り値 | 説明 |
|---|---|
| 新しいジョブを正常に生成しました。 | |
| 表示名が長すぎます。 | |
| MaxJobsPerMachine グループポリシー設定は、コンピューター上で作成できるジョブ数を決定します。このジョブを追加すると MaxJobsPerMachine の上限を超えます。 | |
| MaxJobsPerUser グループポリシー設定は、ユーザーが作成できるジョブ数を決定します。このジョブを追加すると MaxJobsPerUser の上限を超えます。 |
解説(Remarks)
ジョブを作成したユーザー、または管理者権限を持つユーザーのみが、ジョブへのファイルの追加およびジョブのプロパティの変更を行えます。
既定では、BITS は同時に最大 300 個のジョブをサポートします。1 人のユーザーは同時に最大 60 個のジョブを作成できます。このユーザーごとの上限は、管理者やサービスアカウントには適用されません。これらの既定値を変更するには、それぞれ MaxJobsPerMachine および MaxJobsPerUser のグループポリシーを設定します。
Windows Vista より前: BITS がサポートするジョブ数や、ユーザーが作成できるジョブ数に制限はありません。
スケーラビリティに関する考慮事項については、Best Practices When Using BITS を参照してください。
例
新しいジョブを作成する例については、 Creating a Job を参照してください。
指定したジョブを転送キューから取得します。通常、アプリケーションはジョブ識別子を保存しておき、後でキューからジョブを取得します。
| jobID | GUID* | in | 転送キューから取得するジョブを識別します。ジョブ識別子は CreateJob メソッドが返します。 |
| ppJob | IBackgroundCopyJob** | out | JobID で指定されたジョブへの IBackgroundCopyJob インターフェイスポインター。使用が終わったら ppJob を解放してください。 |
戻り値
このメソッドは、以下の HRESULT 値のほか、その他の値を返します。
| 戻り値 | 説明 |
|---|---|
| 転送キューからジョブを正常に取得しました。 | |
| キュー内にジョブが見つかりませんでした。 | |
| ユーザーにジョブを取得する権限がありません。 |
転送キュー内のジョブを列挙するために使用する列挙子オブジェクトへのインターフェイスポインターを取得します。列挙子内のジョブの順序は不定です。
| dwFlags | DWORD | in | 列挙に含めるジョブの所有者を指定します。dwFlags に 0 を指定すると、ユーザーは転送キュー内で自分が所有するすべてのジョブを取得します。次の表に列挙オプションを示します。
| ||||
| ppEnum | IEnumBackgroundCopyJobs** | out | 転送キュー内のジョブを列挙するために使用する IEnumBackgroundCopyJobs インターフェイスポインター。列挙子の内容は dwFlags の値によって異なります。使用が終わったら ppEnumJobs を解放してください。 |
戻り値
このメソッドは、以下の HRESULT 値のほか、その他の値を返します。
| 戻り値 | 説明 |
|---|---|
| 列挙子オブジェクトを正常に生成しました。 | |
| 他のユーザーが所有するジョブを列挙するには、ユーザーが管理者であるか、管理者グループに属している必要があります。 |
指定したエラーコードの説明を取得します。
| hResult | HRESULT | in | 直前に呼び出した BITS メソッドから返されたエラーコード。 |
| LanguageId | DWORD | in | 説明の生成に使用する言語識別子を指定します。言語識別子を作成するには、 MAKELANGID マクロを使用します。たとえば、米国英語を指定するには次のコードを使用します。
システムの既定のユーザー言語識別子を取得するには、次の呼び出しを使用します。
|
| pErrorDescription | LPWSTR* | out | エラーの説明を含む、null で終わる文字列。使用が終わったら CoTaskMemFree 関数を呼び出して ppErrorDescription を解放してください。 |
戻り値
このメソッドは、以下の HRESULT 値のほか、その他の値を返します。
| 戻り値 | 説明 |
|---|---|
| エラーコードの説明を正常に取得しました。 | |
|
そのロケール用の文字列が存在しません。 |
解説(Remarks)
HTTP エラーの説明はローカライズされます。
Windows XP/2000: HTTP エラーの説明はローカライズされません。
例
次の例は、エラーコードに関連付けられた説明を取得する方法を示しています。例中の g_XferManager 変数は IBackgroundCopyManager インターフェイスポインターです。 IBackgroundCopyManager インターフェイスポインターの作成方法の詳細については、 Connecting to the BITS Service を参照してください。
HRESULT hr = 0;
IBackgroundCopyJob* pJob = NULL;
WCHAR* pszDescription = NULL;
//Call fails because the third parameter is NULL.
hr = g_XferManager->CreateJob(L"DummyJob", BG_JOB_TYPE_DOWNLOAD, NULL, &pJob);
if (FAILED(hr))
{
hr = g_XferManager->GetErrorDescription(hr, LANGIDFROMLCID(GetThreadLocale()), &pszDescription);
if (SUCCEEDED(hr))
{
//Do something with pszDescription.
CoTaskMemFree(pszDescription);
}
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IBackgroundCopyManager "{5CE34C0D-0DC9-4C1F-897C-DAA1B78CEE7C}" #usecom global IBackgroundCopyManager IID_IBackgroundCopyManager "{4991D34B-80A1-4291-83B6-3328366B9097}" #comfunc global IBackgroundCopyManager_CreateJob 3 wstr,int,var,sptr #comfunc global IBackgroundCopyManager_GetJob 4 var,sptr #comfunc global IBackgroundCopyManager_EnumJobs 5 int,sptr #comfunc global IBackgroundCopyManager_GetErrorDescription 6 int,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IBackgroundCopyManager "{5CE34C0D-0DC9-4C1F-897C-DAA1B78CEE7C}" #usecom global IBackgroundCopyManager IID_IBackgroundCopyManager "{4991D34B-80A1-4291-83B6-3328366B9097}" #comfunc global IBackgroundCopyManager_CreateJob 3 wstr,int,sptr,sptr #comfunc global IBackgroundCopyManager_GetJob 4 sptr,sptr #comfunc global IBackgroundCopyManager_EnumJobs 5 int,sptr #comfunc global IBackgroundCopyManager_GetErrorDescription 6 int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。