PSCreateMultiplexPropertyStore 関数 (propsys.h)
複数のプロパティ ストアを含む読み取り専用プロパティ ストアを作成します。各プロパティ ストアは 、IPropertyStore または IPropertySetStorage をサポートする必要があります。
構文
PSSTDAPI PSCreateMultiplexPropertyStore(
[in] IUnknown **prgpunkStores,
[in] DWORD cStores,
[in] REFIID riid,
[out] void **ppv
);
パラメーター
[in] prgpunkStores
種類: IUnknown**
IPropertyStore または IPropertySetStorage を実装するプロパティ ストアの配列へのポインターのアドレス。
[in] cStores
型: DWORD
prgpunkStores で参照される配列内の要素の数。
[in] riid
型: REFIID
要求された IID への参照。
[out] ppv
型: void**
この関数が戻るときに、 riid で要求されたインターフェイス ポインターを格納します。 これは通常 、IPropertyStore です。
戻り値
型: HRESULT
この関数が成功すると、 S_OKが返されます。 そうでない場合は、HRESULT エラー コードを返します。
注釈
この関数は、IPropertyStore、INamedPropertyStore、IObjectProvider、およびIPropertyStoreCapabilities を実装するコンポーネント オブジェクト モデル (COM) オブジェクトを作成します。 多重プロパティ ストア オブジェクトは、複数のプロパティ ストアから公開されるプロパティを集計します。
このオブジェクトは、シェル名前空間拡張機能の複数の既存のプロパティ ストア実装のプロパティを集計したり、既存のプロパティ ストアを再利用したり、追加の読み取り専用プロパティを提供したりするのに役立ちます。
アプリケーションでは、一度に 1 つのスレッドからこのオブジェクトを呼び出す必要があります。
PSCreateDelayedMultiplexPropertyStore を呼び出す前に、CoInitialize または OleInitialize を使用して COM を初期化する必要があります。 COM は、このオブジェクトの有効期間にわたって初期化されたままにする必要があります。
配列 prgpunkStores 内の各オブジェクトは 、IPropertyStore または IPropertySetStorage を実装 する必要があります。 オブジェクトが IPropertySetStorage を実装する場合、多重化プロパティ ストアで使用するために PSCreatePropertyStoreFromPropertySetStorage を使用してラップされます。
IPropertyStore::GetValue の多重プロパティ ストア実装は、指定された各プロパティ ストアに値を要求します。 多重化プロパティ ストアは、いずれかのプロパティ ストアが成功コードとVT_EMPTY以外の値を返すと、検索を停止します。 エラー コードによって検索が終了し、呼び出し元のアプリケーションに返されます。
IPropertyStoreCapabilities::IsPropertyWritable の多重プロパティ ストア実装は、IPropertyStoreCapabilities を実装する最初のストアへの呼び出しを委任します。 複数のストアで IPropertyStoreCapabilities が実装されている場合、後続のストアは無視されます。 IPropertyStoreCapabilities を実装するストアがない場合、このメソッドは S_OKを返します。
例
大きなプログラムの一部として含める次の例は、IPropertyStoreFactory::GetPropertyStore の実装で PSCreateMultiplexPropertyStore を使用する方法を示しています。
// CMyFactory is a reference counted COM object that implements
// both IPropertyStoreFactory.
// CMyFactory is assumed to be fully implemented, but for the sake of brevity,
// many functions are not shown here.
// Private functions are prefixed with an underscore.
// CMyFactory implementation for IPropertyStoreFactory::GetPropertyStore.
HRESULT CMyFactory::GetPropertyStore(__in GETPROPERTYSTOREFLAGS flags,
__in_opt IUnknown *pUnkFactory,
__in REFIID riid,
__deref_out void **ppv)
{
*ppv = NULL;
HRESULT hr;
// This application creates only read-only stores.
if (flags & GPS_READWRITE)
{
hr = STG_E_ACCESSDENIED;
}
else
{
// More advanced applications would check other GETPROPERTYSTOREFLAGS
// flags and respond appropriately.
// CMyFactory multiplexes two property stores.
IPropertyStore *ppsFirst;
hr = _CreateFirstStore(IID_PPV_ARGS(&ppsFirst));
if (SUCCEEDED(hr))
{
IPropertyStore *ppsSecond;
hr = _CreateSecondStore(IID_PPV_ARGS(&ppsSecond));
if (SUCCEEDED(hr))
{
IUnknown *rgStores[] = {ppsFirst, ppsSecond};
hr = PSCreateMultiplexPropertyStore(rgStores, ARRAYSIZE(rgStores), riid, ppv);
ppsSecond->Release();
}
ppsFirst->Release();
}
}
return hr;
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | WINDOWS XP と SP2、Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2003 SP1 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | propsys.h |
Library | Propsys.lib |
[DLL] | Propsys.dll (バージョン 6.0 以降) |
再頒布可能パッケージ | Windows デスクトップ検索 (WDS) 3.0 |