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 |