IBITSExtensionSetupFactory
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
IBITSExtensionSetupFactory インターフェイスは、IBITSExtensionSetup インターフェイスへのポインターを取得するために使用します。
解説(Remarks)
このインターフェイスは、BITS サーバー拡張機能をインストールするとサーバーに登録されます。
Windows Server 2003 では、Windows コンポーネント ウィザードを使用して BITS サーバー拡張機能をインストールします。コントロール パネルからプログラムの追加と削除を選択し、続いて Windows コンポーネントの追加と削除を選択して Windows コンポーネント ウィザードを表示します。BITS サーバー拡張機能は、Web アプリケーション サーバーのサブコンポーネントである Internet Information Services (IIS) のサブコンポーネントです。
例
次の例は、 IBITSExtensionSetupFactory インターフェイスを使用して 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;
IBITSExtensionSetupFactory* pExtensionSetupFactory = NULL;
IBITSExtensionSetup* pExtensionSetup = NULL;
hr = CoCreateInstance(__uuidof(BITSExtensionSetupFactory),
NULL, CLSCTX_INPROC_SERVER,
__UUIDOF(IBITSExtensionSetupFactory),
(void**)&pExtensionSetupFactory);
if (SUCCEEDED(hr))
{
hr = pExtensionSetupFactory->GetObject(BSTR(pszPath), &pExtensionSetup);
if (SUCCEEDED(hr))
{
if (Enable)
{
hr = pExtensionSetup->EnableBITSUploads();
}
else
{
hr = pExtensionSetup->DisableBITSUploads();
}
pExtensionSetup->Release();
}
pExtensionSetupFactory->Release();
}
return hr;
}
メソッド 1
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
GetObject メソッドは、IBITSExtensionSetup インターフェイスへのポインターを取得するために使用します。このメソッドは、ADSI 関数 ADsGetObject と同じバインドを行います。
| Path | LPWSTR | in | ディレクトリ サービスへのパスを格納した、null で終わる文字列。たとえば "IIS://<machine name>/w3svc/1/virtual directory" のように指定します。 |
| ppExtensionSetup | IBITSExtensionSetup** | out | 指定した仮想ディレクトリに対する BITS のアップロードを有効または無効にするには、 IBITSExtensionSetup インターフェイスを使用します。 |
戻り値
成功した場合、このメソッドは S_OK を返します。それ以外の場合はメソッドが失敗しています。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IBITSExtensionSetupFactory "{D5D2D542-5503-4E64-8B48-72EF91A32EE1}"
#usecom global IBITSExtensionSetupFactory IID_IBITSExtensionSetupFactory "{EFBBAB68-7286-4783-94BF-9461D8B7E7E9}"
#comfunc global IBITSExtensionSetupFactory_GetObject 7 wstr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。