Compartilhar via


Função PSCreateMultiplexPropertyStore (propsys.h)

Cria um repositório de propriedades somente leitura que contém vários repositórios de propriedades, cada um dos quais deve dar suporte a IPropertyStore ou IPropertySetStorage.

Sintaxe

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

Parâmetros

[in] prgpunkStores

Tipo: IUnknown**

Endereço de um ponteiro para uma matriz de repositórios de propriedades que implementam IPropertyStore ou IPropertySetStorage.

[in] cStores

Tipo: DWORD

O número de elementos na matriz referenciada em prgpunkStores.

[in] riid

Tipo: REFIID

Referência ao IID solicitado.

[out] ppv

Tipo: void**

Quando essa função retorna, contém o ponteiro de interface solicitado em riid. Normalmente, isso é IPropertyStore.

Retornar valor

Tipo: HRESULT

Se essa função for bem-sucedida, ela retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.

Comentários

Essa função cria um objeto COM (Component Object Model) que implementa IPropertyStore, INamedPropertyStore, IObjectProvider e IPropertyStoreCapabilities. O objeto de repositório de propriedades multiplex agrega as propriedades expostas de vários repositórios de propriedades.

Esse objeto pode ser útil para agregar as propriedades de várias implementações existentes do repositório de propriedades em uma extensão de namespace do Shell ou para reutilizar um repositório de propriedades existente e fornecer propriedades adicionais somente leitura.

Os aplicativos devem chamar esse objeto de apenas um thread por vez.

Você deve inicializar COM com CoInitialize ou OleInitialize antes de chamar PSCreateDelayedMultiplexPropertyStore. O COM deve permanecer inicializado durante o tempo de vida desse objeto.

Cada um dos objetos na matriz prgpunkStores deve implementar IPropertyStore ou IPropertySetStorage. Se um objeto implementar IPropertySetStorage, ele será encapsulado usando PSCreatePropertyStoreFromPropertySetStorage para uso no repositório de propriedades multiplex.

A implementação do repositório de propriedades multiplex de IPropertyStore::GetValue solicita o valor a cada um dos repositórios de propriedades fornecidos. O repositório de propriedades multiplex para de pesquisar quando um dos repositórios de propriedades retorna um código de êxito e um valor não VT_EMPTY. Os códigos de falha fazem com que a pesquisa termine e são passados de volta para o aplicativo de chamada.

A implementação do repositório de propriedades multiplex de IPropertyStoreCapabilities::IsPropertyWritable delega a chamada para o primeiro repositório que implementa IPropertyStoreCapabilities. Se vários repositórios implementarem IPropertyStoreCapabilities, os seguintes serão ignorados. Se nenhum repositório implementar IPropertyStoreCapabilities, esse método retornará S_OK.

Exemplos

O exemplo a seguir, a ser incluído como parte de um programa maior, demonstra como usar PSCreateMultiplexPropertyStore em uma implementação 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 Valor
Cliente mínimo com suporte Windows XP com SP2, Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 com SP1 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho propsys.h
Biblioteca Propsys.lib
DLL Propsys.dll (versão 6.0 ou posterior)
Redistribuível Pesquisa da Área de Trabalho do Windows (WDS) 3.0

Confira também

IPropertyStoreFactory

PSCreateDelayedMultiplexPropertyStore