Freigeben über


PSCreateMultiplexPropertyStore-Funktion (propsys.h)

Erstellt einen schreibgeschützten Eigenschaftenspeicher, der mehrere Eigenschaftenspeicher enthält, von denen jeder entweder IPropertyStore oder IPropertySetStorage unterstützen muss.

Syntax

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

Parameter

[in] prgpunkStores

Typ: IUnknown**

Adresse eines Zeigers auf ein Array von Eigenschaftenspeichern, die entweder IPropertyStore oder IPropertySetStorage implementieren.

[in] cStores

Art: DWORD

Die Anzahl der Elemente im Array, auf die in prgpunkStores verwiesen wird.

[in] riid

Typ: REFIID

Verweis auf die angeforderte IID.

[out] ppv

Typ: void**

Wenn diese Funktion zurückgibt, enthält den in riid angeforderten Schnittstellenzeiger. Dies ist in der Regel IPropertyStore.

Rückgabewert

Typ: HRESULT

Wenn diese Funktion erfolgreich ist, wird S_OK zurückgegeben. Andernfalls wird ein Fehlercode HRESULT zurückgegeben.

Hinweise

Diese Funktion erstellt ein COM-Objekt (Component Object Model), das IPropertyStore, INamedPropertyStore, IObjectProvider und IPropertyStoreCapabilities implementiert. Das Multiplex-Eigenschaftenspeicherobjekt aggregiert die Eigenschaften, die aus mehreren Eigenschaftenspeichern verfügbar gemacht werden.

Dieses Objekt kann nützlich sein, um die Eigenschaften aus mehreren vorhandenen Eigenschaftenspeicherimplementierungen in einer Shell-Namespaceerweiterung zu aggregieren oder einen vorhandenen Eigenschaftenspeicher wiederzuverwenden und zusätzliche schreibgeschützte Eigenschaften bereitzustellen.

Anwendungen müssen dieses Objekt jeweils nur aus einem Thread aufrufen.

Sie müssen COM mit CoInitialize oder OleInitialize initialisieren , bevor Sie PSCreateDelayedMultiplexPropertyStore aufrufen. COM muss für die Lebensdauer dieses Objekts initialisiert bleiben.

Jedes der Objekte im Array prgpunkStores muss entweder IPropertyStore oder IPropertySetStorage implementieren. Wenn ein Objekt IPropertySetStorage implementiert, wird es mit PSCreatePropertyStoreFromPropertySetStorage zur Verwendung im Multiplex-Eigenschaftenspeicher umschlossen.

Die Multiplex-Eigenschaftenspeicherimplementierung von IPropertyStore::GetValue fragt jeden der bereitgestellten Eigenschaftenspeicher nach dem Wert. Der Multiplex-Eigenschaftenspeicher beendet die Suche, wenn einer der Eigenschaftenspeicher einen Erfolgscode und einen nicht VT_EMPTY Wert zurückgibt. Fehlercodes führen dazu, dass die Suche beendet wird und an die aufrufende Anwendung zurückgegeben wird.

Die Multiplex-Eigenschaftenspeicherimplementierung von IPropertyStoreCapabilities::IsPropertyWritable delegiert den Aufruf an den ersten Speicher, der IPropertyStoreCapabilities implementiert. Wenn mehrere Speicher IPropertyStoreCapabilities implementieren, werden die nachfolgenden Speicher ignoriert. Wenn kein Speicher IPropertyStoreCapabilities implementiert, gibt diese Methode S_OK zurück.

Beispiele

Das folgende Beispiel, das als Teil eines größeren Programms enthalten sein soll, veranschaulicht die Verwendung von PSCreateMultiplexPropertyStore in einer Implementierung von 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;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP mit SP2, Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 mit SP1 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile propsys.h
Bibliothek Propsys.lib
DLL Propsys.dll (Version 6.0 oder höher)
Verteilbare Komponente Windows Desktop Search (WDS) 3.0

Weitere Informationen

IPropertyStoreFactory

PSCreateDelayedMultiplexPropertyStore