Partager via


PsCreateMultiplexPropertyStore, fonction (propsys.h)

Crée un magasin de propriétés en lecture seule qui contient plusieurs magasins de propriétés, chacun devant prendre en charge IPropertyStore ou IPropertySetStorage.

Syntaxe

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

Paramètres

[in] prgpunkStores

Type : IUnknown**

Adresse d’un pointeur vers un tableau de magasins de propriétés qui implémentent IPropertyStore ou IPropertySetStorage.

[in] cStores

Type : DWORD

Nombre d’éléments dans le tableau référencés dans prgpunkStores.

[in] riid

Type : REFIID

Référence à l’IID demandé.

[out] ppv

Type : void**

Lorsque cette fonction retourne, contient le pointeur d’interface demandé dans riid. Il s’agit généralement d’IPropertyStore.

Valeur retournée

Type : HRESULT

Si cette fonction réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.

Remarques

Cette fonction crée un objet COM (Component Object Model) qui implémente IPropertyStore, INamedPropertyStore, IObjectProvider et IPropertyStoreCapabilities. L’objet de magasin de propriétés multiplex regroupe les propriétés exposées à partir de plusieurs magasins de propriétés.

Cet objet peut être utile pour agréger les propriétés de plusieurs implémentations de magasins de propriétés existantes dans une extension d’espace de noms Shell, ou pour réutiliser un magasin de propriétés existant et fournir des propriétés supplémentaires en lecture seule.

Les applications doivent appeler cet objet à partir d’un seul thread à la fois.

Vous devez initialiser COM avec CoInitialize ou OleInitialize avant d’appeler PSCreateDelayedMultiplexPropertyStore. COM doit rester initialisé pendant toute la durée de vie de cet objet.

Chacun des objets du tableau prgpunkStores doit implémenter IPropertyStore ou IPropertySetStorage. Si un objet implémente IPropertySetStorage, il est encapsulé à l’aide de PSCreatePropertyStoreFromPropertySetStorage pour une utilisation dans le magasin de propriétés multiplex.

L’implémentation du magasin de propriétés multiplex de IPropertyStore ::GetValue demande à chacun des magasins de propriétés fournis la valeur. Le magasin de propriétés multiplex cesse de rechercher quand l’un des magasins de propriétés retourne un code de réussite et une valeur non VT_EMPTY. Les codes d’échec entraînent la fin de la recherche et sont repassé à l’application appelante.

L’implémentation du magasin de propriétés multiplex de IPropertyStoreCapabilities ::IsPropertyWritable délègue l’appel au premier magasin qui implémente IPropertyStoreCapabilities. Si plusieurs magasins implémentent IPropertyStoreCapabilities, les suivantes sont ignorées. Si aucun magasin n’implémente IPropertyStoreCapabilities, cette méthode retourne S_OK.

Exemples

L’exemple suivant, à inclure dans le cadre d’un programme plus large, montre comment utiliser PSCreateMultiplexPropertyStore dans une implémentation 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;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP avec SP2, Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 avec SP1 [applications de bureau uniquement]
Plateforme cible Windows
En-tête propsys.h
Bibliothèque Propsys.lib
DLL Propsys.dll (version 6.0 ou ultérieure)
Composant redistribuable Windows Desktop Search (WDS) 3.0

Voir aussi

IPropertyStoreFactory

PSCreateDelayedMultiplexPropertyStore