IBackgroundCopyFile6
COM公式ドキュメント
オンデマンドダウンロードジョブでファイル範囲を要求するために、このインターフェイスを使用します。
解説(Remarks)
IBackgroundCopyFile6 インターフェイスポインターを取得するには、インターフェイス識別子として "__uuidof(IBackgroundCopyFile6)" を指定して IBackgroundCopyFile::QueryInterface メソッドを呼び出します。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
未取得データのダウンロードを優先する位置を指定します。
| offset | ULONGLONG | in | 未取得データのダウンロードを優先する新しい位置を指定します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。ジョブが BITS_JOB_PROPERTY_ON_DEMAND_MODE ジョブの要件を満たしていない場合は BG_E_RANDOM_ACCESS_NOT_SUPPORTED を返します。
解説(Remarks)
UpdateDownloadPosition は、BITS_JOB_PROPERTY_ON_DEMAND_MODE ジョブの要件も満たすダウンロードジョブに対して要求できます。
BITS_JOB_PROPERTY_ON_DEMAND_MODE ジョブの要件は、転送が DOWNLOAD ジョブであることです。また、ジョブが DYNAMIC でなく、サーバーが HTTP または HTTPS サーバーであり、範囲指定のサポートに関するサーバー要件がすべて満たされている必要があります。 詳細については、HTTP Requirements for BITS Downloads を参照してください。
ダウンロードを優先するファイル範囲のセットを新たに追加します。
| rangeCount | DWORD | in | Ranges 配列のサイズを指定します。 |
| ranges | BG_FILE_RANGE* | in | ダウンロードするファイル範囲の配列です。要求する範囲は、すでにダウンロード済み(または保留中)の範囲と重複していてもかまいません。範囲は自動的に重複しない範囲へ分割されます。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。要求された範囲の一部が実際のファイルサイズの範囲外である場合は BG_E_INVALID_RANGE が返されます。ジョブがダウンロードジョブでない場合、またはサーバーがダウンロード範囲をサポートできなくなった場合は BG_E_RANDOM_ACCESS_NOT_SUPPORTED が返されます。
解説(Remarks)
RequestFileRanges は、BITS_JOB_PROPERTY_ON_DEMAND_MODE ジョブの要件も満たすダウンロードジョブに対して要求できます。
BITS_JOB_PROPERTY_ON_DEMAND_MODE ジョブの要件は、転送が DOWNLOAD ジョブであることです。また、ジョブが DYNAMIC でなく、サーバーが HTTP または HTTPS サーバーであり、範囲指定のサポートに関するサーバー要件がすべて満たされている必要があります。 詳細については、HTTP Requirements for BITS Downloads を参照してください。
要求されたすべての範囲のダウンロードが完了したとき、ファイルのすべてのバイトが転送されていれば、ジョブの状態は BG_JOB_STATE_TRANSFERRED に設定されます。それ以外の場合、ジョブの状態は BG_JOB_STATE_SUSPENDED に設定されます。
ダウンロード済みのファイル範囲のセットを返します。
| rangeCount | DWORD* | out | Ranges の要素数です。 |
| ranges | BG_FILE_RANGE** | out | ダウンロード済みの範囲を示す BG_FILE_RANGE 構造体の配列です。範囲は可能な限りマージされます。範囲はオフセット順に並べられます。使用後は CoTaskMemFree 関数を呼び出して Ranges を解放してください。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。Ranges 配列を割り当てられなかった場合のエラーは E_OUTOFMEMORY となり、ジョブがダウンロードジョブでない場合、またはサーバーがダウンロード範囲をサポートできなくなった場合は BG_E_RANDOM_ACCESS_NOT_SUPPORTED となります。
解説(Remarks)
GetFilledFileRanges は、BITS_JOB_PROPERTY_ON_DEMAND_MODE ジョブの要件も満たすダウンロードジョブに対して要求できます。
BITS_JOB_PROPERTY_ON_DEMAND_MODE ジョブの要件は、転送が DOWNLOAD ジョブであることです。また、ジョブが DYNAMIC でなく、サーバーが HTTP または HTTPS サーバーであり、範囲指定のサポートに関するサーバー要件がすべて満たされている必要があります。 詳細については、HTTP Requirements for BITS Downloads を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IBackgroundCopyFile6 "{CF6784F7-D677-49FD-9368-CB47AEE9D1AD}" #usecom global IBackgroundCopyFile6 IID_IBackgroundCopyFile6 "{}" #comfunc global IBackgroundCopyFile6_UpdateDownloadPosition 15 int64 #comfunc global IBackgroundCopyFile6_RequestFileRanges 16 int,var #comfunc global IBackgroundCopyFile6_GetFilledFileRanges 17 var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IBackgroundCopyFile6 "{CF6784F7-D677-49FD-9368-CB47AEE9D1AD}" #usecom global IBackgroundCopyFile6 IID_IBackgroundCopyFile6 "{}" #comfunc global IBackgroundCopyFile6_UpdateDownloadPosition 15 int64 #comfunc global IBackgroundCopyFile6_RequestFileRanges 16 int,sptr #comfunc global IBackgroundCopyFile6_GetFilledFileRanges 17 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。