Condividi tramite


Funzione PSCreateMultiplexPropertyStore (propsys.h)

Crea un archivio proprietà di sola lettura che contiene più archivi di proprietà, ognuno dei quali deve supportare IPropertyStore o IPropertySetStorage.

Sintassi

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

Parametri

[in] prgpunkStores

Tipo: IUnknown**

Indirizzo di un puntatore a una matrice di archivi di proprietà che implementano IPropertyStore o IPropertySetStorage.

[in] cStores

Tipo: DWORD

Numero di elementi nella matrice a cui si fa riferimento in prgpunkStores.

[in] riid

Tipo: REFIID

Riferimento all'IID richiesto.

[out] ppv

Tipo: void**

Quando questa funzione restituisce, contiene il puntatore dell'interfaccia richiesto in riid. Questo è in genere IPropertyStore.

Valore restituito

Tipo: HRESULT

Se questa funzione ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .

Commenti

Questa funzione crea un oggetto Component Object Model (COM) che implementa IPropertyStore, INamedPropertyStore, IObjectProvider e IPropertyStoreCapabilities. L'oggetto dell'archivio proprietà multiplex aggrega le proprietà esposte da più archivi di proprietà.

Questo oggetto può essere utile per aggregare le proprietà da più implementazioni dell'archivio proprietà esistenti in un'estensione dello spazio dei nomi shell o per riutilizzare un archivio proprietà esistente e fornire proprietà aggiuntive di sola lettura.

Le applicazioni devono chiamare questo oggetto da un solo thread alla volta.

È necessario inizializzare COM con CoInitialize o OleInitialize prima di chiamare PSCreateDelayedMultiplexPropertyStore. COM deve rimanere inizializzato per la durata di questo oggetto.

Ognuno degli oggetti nella matrice prgpunkStores deve implementare IPropertyStore o IPropertySetStorage. Se un oggetto implementa IPropertySetStorage, viene eseguito il wrapping usando PSCreatePropertyStoreFromPropertySetStorage per l'uso nell'archivio delle proprietà multiplex.

L'implementazione dell'archivio delle proprietà multiplex di IPropertyStore::GetValue richiede ognuno degli archivi delle proprietà forniti per il valore. L'archivio delle proprietà multiplex smette di cercare quando uno degli archivi di proprietà restituisce un codice di esito positivo e un valore non VT_EMPTY. I codici di errore causano la fine della ricerca e vengono passati all'applicazione chiamante.

L'implementazione dell'archivio delle proprietà multiplex di IPropertyStoreCapabilities::IsPropertyWritable delega la chiamata al primo archivio che implementa IPropertyStoreCapabilities. Se più archivi implementano IPropertyStoreCapabilities, quelli successivi vengono ignorati. Se non viene implementato alcun archivio IPropertyStoreCapabilities, questo metodo restituisce S_OK.

Esempio

L'esempio seguente, da includere come parte di un programma più ampio, illustra come usare PSCreateMultiplexPropertyStore in un'implementazione di 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;
}

Requisiti

Requisito Valore
Client minimo supportato Windows XP con SP2, Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2003 con SP1 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione propsys.h
Libreria Propsys.lib
DLL Propsys.dll (versione 6.0 o successiva)
Componente ridistribuibile Windows Desktop Search (WDS) 3.0

Vedi anche

IPropertyStoreFactory

PSCreateDelayedMultiplexPropertyStore