Compartir a través de


Función PSCreateMultiplexPropertyStore (propsys.h)

Crea un almacén de propiedades de solo lectura que contiene varios almacenes de propiedades, cada uno de los cuales debe admitir IPropertyStore o IPropertySetStorage.

Sintaxis

PSSTDAPI PSCreateMultiplexPropertyStore(
  [in]  IUnknown **prgpunkStores,
  [in]  DWORD    cStores,
  [in]  REFIID   riid,
  [out] void     **ppv
);

Parámetros

[in] prgpunkStores

Tipo: IUnknown**

Dirección de un puntero a una matriz de almacenes de propiedades que implementan IPropertyStore o IPropertySetStorage.

[in] cStores

Tipo: DWORD

Número de elementos de la matriz a los que se hace referencia en prgpunkStores.

[in] riid

Tipo: REFIID

Referencia al IID solicitado.

[out] ppv

Tipo: void**

Cuando se devuelve esta función, contiene el puntero de interfaz solicitado en riid. Normalmente, es IPropertyStore.

Valor devuelto

Tipo: HRESULT

Si esta función se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.

Comentarios

Esta función crea un objeto Component Object Model (COM) que implementa IPropertyStore, INamedPropertyStore, IObjectProvider y IPropertyStoreCapabilities. El objeto de almacén de propiedades multiplex agrega las propiedades expuestas desde varios almacenes de propiedades.

Este objeto puede ser útil para agregar las propiedades de varias implementaciones de almacén de propiedades existentes en una extensión de espacio de nombres de Shell, o para reutilizar un almacén de propiedades existente y proporcionar propiedades de solo lectura adicionales.

Las aplicaciones deben llamar a este objeto solo desde un subproceso a la vez.

Debe inicializar COM con CoInitialize o OleInitialize antes de llamar a PSCreateDelayedMultiplexPropertyStore. COM debe permanecer inicializado durante la vigencia de este objeto.

Cada uno de los objetos de la matriz prgpunkStores debe implementar IPropertyStore o IPropertySetStorage. Si un objeto implementa IPropertySetStorage, se encapsula mediante PSCreatePropertyStoreFromPropertySetStorage para su uso en el almacén de propiedades multiplex.

La implementación del almacén de propiedades multiplex de IPropertyStore::GetValue solicita a cada uno de los almacenes de propiedades proporcionados el valor. El almacén de propiedades multiplex deja de buscar cuando uno de los almacenes de propiedades devuelve un código correcto y un valor que no es VT_EMPTY. Los códigos de error provocan que la búsqueda finalice y se devuelvan a la aplicación que realiza la llamada.

La implementación del almacén de propiedades multiplex de IPropertyStoreCapabilities::IsPropertyWritable delega la llamada al primer almacén que implementa IPropertyStoreCapabilities. Si varios almacenes implementan IPropertyStoreCapabilities, se omiten los siguientes. Si ningún almacén implementa IPropertyStoreCapabilities, este método devuelve S_OK.

Ejemplos

En el ejemplo siguiente, para incluirse como parte de un programa más grande, se muestra cómo usar PSCreateMultiplexPropertyStore en una implementación de IPropertyStoreFactory::GetPropertyStore.

// 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;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP con SP2, Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 con SP1 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado propsys.h
Library Propsys.lib
Archivo DLL Propsys.dll (versión 6.0 o posterior)
Redistribuible Windows Desktop Search (WDS) 3.0

Consulte también

IPropertyStoreFactory

PSCreateDelayedMultiplexPropertyStore