IBITSExtensionSetup
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
IBITSExtensionSetup インターフェイスを使用して、仮想ディレクトリへの BITS アップロードを有効または無効にします。
解説(Remarks)
このインターフェイスは、BITS サーバー拡張機能をインストールしたときにサーバーに登録されます。
Windows Server 2003 では、Windows コンポーネント ウィザードを使用して BITS サーバー拡張機能をインストールします。コントロール パネルからプログラムの追加と削除を選択し、次に Windows コンポーネントの追加と削除を選択して Windows コンポーネント ウィザードを表示します。BITS サーバー拡張機能は、Web アプリケーション サーバーのサブコンポーネントである Internet Information Services (IIS) のサブコンポーネントです。
例
次の例は、ADsGetObject 関数を使用して IBITSExtensionSetup インターフェイスへのポインターを取得する方法を示しています。
//Set the BITSUploadEnabled IIS configuration setting.
//The pszPath parameter contains the path to the directory service.
//For example, "IIS://<machine name>/w3svc/1/<virtual directory>".
//The Enable parameter contains true (enable) or false (disable).
HRESULT SetBITSUploadEnabledSetting(LPWSTR pszPath, bool Enable)
{
HRESULT hr;
IBITSExtensionSetup* pExtensionSetup = NULL;
hr = ADsGetObject(pszPath, __uuidof(IBITSExtensionSetup), &pExtensionSetup);
if (SUCCEEDED(hr))
{
if (Enable)
{
hr = pExtensionSetup->EnableBITSUploads();
}
else
{
hr = pExtensionSetup->DisableBITSUploads();
}
pExtensionSetup->Release();
}
return hr;
}
メソッド 4
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
EnableBITSUploads メソッドを使用して、ADSI オブジェクトが指す仮想ディレクトリで BITS アップロードを有効にします。このメソッドは BITSUploadEnabled IIS 拡張プロパティを設定します。
戻り値
成功した場合、このメソッドは S_OK を返します。それ以外の場合は、メソッドが失敗したことを示します。
解説(Remarks)
このメソッドは、仮想ディレクトリのスクリプトおよび実行の権限を無効にします。スクリプトおよび実行の権限が有効になっている仮想ディレクトリには、ファイルをアップロードできません。このメソッドの呼び出し後にこれらの権限が復元された場合、アップロードジョブは BG_E_SERVER_EXECUTE_ENABLED エラーコードで失敗します。
タスク スケジューラが無効になっている場合、 EnableBITSUploads メソッドは失敗します。
例
IBITSExtensionSetup インターフェイスの例を参照してください。
DisableBITSUploads メソッドを使用して、ADSI オブジェクトが指す仮想ディレクトリで BITS アップロードを無効にします。このメソッドは BITSUploadEnabled IIS 拡張プロパティを設定します。
戻り値
成功した場合、このメソッドは S_OK を返します。それ以外の場合は、メソッドが失敗したことを示します。
GetCleanupTaskName メソッドを使用して、仮想ディレクトリに関連付けられているクリーンアップタスクの名前を取得します。
| pTaskName | LPWSTR* | out | 仮想ディレクトリに関連付けられているクリーンアップタスクの名前を格納する、null で終わる文字列。NULL の場合、BITS はその仮想ディレクトリのクリーンアップタスクを作成していません。使用が終わったら、SysFreeString 関数を呼び出して pTaskName を解放してください。 |
戻り値
解説(Remarks)
仮想ディレクトリを作成し、BITS アップロード用に有効化すると、BITS は タスク スケジューラに作業項目を追加します。この作業項目は、タイムアウト期間内に変更されていないジョブを削除することで、12 時間ごとに 1 回、仮想ディレクトリをクリーンアップします。タイムアウト期間を指定するには、 BITSSessionTimeout IIS 拡張プロパティを設定します。
pTaskName の名前は Schtasks.exe 実行可能ファイルの入力パラメーターとして使用でき、これによりスクリプトからクリーンアップタスクのプロパティを変更できます。
GetCleanupTask メソッドを使用して、仮想ディレクトリに関連付けられているクリーンアップタスクへのインターフェイスポインターを取得します。
| riid | GUID* | in | ppTask で返すタスク スケジューラ インターフェイスを識別します。識別子の一覧については、 ITaskScheduler::Activate メソッドを参照してください。 |
| ppUnk | IUnknown** | out | riid で指定されたインターフェイスへのポインター。このインターフェイスを使用してタスクのプロパティを変更します。使用が終わったら ppTask を解放してください。 |
戻り値
解説(Remarks)
仮想ディレクトリを作成し、BITS アップロード用に有効化すると、BITS は タスク スケジューラに作業項目を追加します。この作業項目は、タイムアウト期間内に変更されていないジョブを削除することで、12 時間ごとに 1 回、仮想ディレクトリをクリーンアップします。タイムアウト期間を指定するには、 BITSSessionTimeout IIS 拡張プロパティを設定します。
クリーンアップのスケジュールを変更するには、BITSCleanupUseDefault BITS IIS 拡張プロパティを参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IBITSExtensionSetup "{29CFBBF7-09E4-4B97-B0BC-F2287E3D8EB3}" #usecom global IBITSExtensionSetup IID_IBITSExtensionSetup "{}" #comfunc global IBITSExtensionSetup_EnableBITSUploads 7 #comfunc global IBITSExtensionSetup_DisableBITSUploads 8 #comfunc global IBITSExtensionSetup_GetCleanupTaskName 9 var #comfunc global IBITSExtensionSetup_GetCleanupTask 10 var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IBITSExtensionSetup "{29CFBBF7-09E4-4B97-B0BC-F2287E3D8EB3}" #usecom global IBITSExtensionSetup IID_IBITSExtensionSetup "{}" #comfunc global IBITSExtensionSetup_EnableBITSUploads 7 #comfunc global IBITSExtensionSetup_DisableBITSUploads 8 #comfunc global IBITSExtensionSetup_GetCleanupTaskName 9 sptr #comfunc global IBITSExtensionSetup_GetCleanupTask 10 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。