PSCreateMultiplexPropertyStore 函数 (propsys.h)

创建包含多个属性存储的只读属性存储,每个属性存储都必须支持 IPropertyStoreIPropertySetStorage

语法

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 错误代码。

注解

此函数 (COM) 对象创建一个组件对象模型,该对象实现 IPropertyStoreINamedPropertyStoreIObjectProviderIPropertyStoreCapabilities。 多路复用属性存储对象聚合从多个属性存储公开的属性。

此对象可用于聚合 Shell 命名空间扩展中多个现有属性存储实现中的属性,或重用现有属性存储以及提供其他只读属性。

应用程序一次只能从一个线程调用此对象。

在调用 PSCreateDelayedMultiplexPropertyStore 之前,必须使用 CoInitializeOleInitialize 初始化 COM。 COM 必须在此对象的生存期内保持初始化状态。

数组 prgpunkStores 中的每个对象都必须实现 IPropertyStoreIPropertySetStorage。 如果对象实现 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

另请参阅

IPropertyStoreFactory

PSCreateDelayedMultiplexPropertyStore