PSCreateMultiplexPropertyStore 함수(propsys.h)
여러 속성 저장소가 포함된 읽기 전용 속성 저장소를 만듭니다. 각 저장소는 IPropertyStore 또는 IPropertySetStorage를 지원해야 합니다.
구문
PSSTDAPI PSCreateMultiplexPropertyStore(
[in] IUnknown **prgpunkStores,
[in] DWORD cStores,
[in] REFIID riid,
[out] void **ppv
);
매개 변수
[in] prgpunkStores
형식: IUnknown**
IPropertyStore 또는 IPropertySetStorage를 구현하는 속성 저장소 배열에 대한 포인터의 주소입니다.
[in] cStores
형식:DWORD
prgpunkStores에서 참조되는 배열의 요소 수입니다.
[in] riid
형식: REFIID
요청된 IID에 대한 참조입니다.
[out] ppv
형식: void**
이 함수가 반환되면 는 riid에서 요청된 인터페이스 포인터를 포함합니다. 일반적으로 IPropertyStore입니다.
반환 값
형식: HRESULT
이 함수가 성공하면 S_OK 반환합니다. 그러지 않으면 HRESULT 오류 코드를 반환합니다.
설명
이 함수는 IPropertyStore,INamedPropertyStore, IObjectProvider 및 IPropertyStoreCapabilities를 구현하는 COM(Component Object Model) 개체를 만듭니다. multiplex 속성 저장소 개체는 여러 속성 저장소에서 노출되는 속성을 집계합니다.
이 개체는 셸 네임스페이스 확장의 여러 기존 속성 저장소 구현에서 속성을 집계하거나 기존 속성 저장소를 다시 사용하고 추가 읽기 전용 속성을 제공하는 데 유용할 수 있습니다.
애플리케이션은 한 번에 하나의 스레드에서만 이 개체를 호출해야 합니다.
PSCreateDelayedMultiplexPropertyStore를 호출하기 전에 CoInitialize 또는 OleInitialize를 사용하여 COM을 초기화해야 합니다. COM은 이 개체의 수명 동안 초기화된 상태를 유지해야 합니다.
prgpunkStores 배열의 각 개체는 IPropertyStore 또는 IPropertySetStorage를 구현해야 합니다. 개체가 IPropertySetStorage를 구현하는 경우 멀티플렉스 속성 저장소에서 사용하기 위해 PSCreatePropertyStoreFromPropertySetStorage 를 사용하여 래핑됩니다.
IPropertyStore::GetValue의 멀티플렉스 속성 저장소 구현은 제공된 각 속성 저장소에 값을 요청합니다. 멀티플렉스 속성 저장소는 속성 저장소 중 하나가 성공 코드와 비 VT_EMPTY 값을 반환할 때 검색을 중지합니다. 오류 코드로 인해 검색이 종료되고 호출 애플리케이션에 다시 전달됩니다.
IPropertyStoreCapabilities::IsPropertyWritable의 멀티플렉스 속성 저장소 구현은 IPropertyStoreCapabilities를 구현하는 첫 번째 저장소에 대한 호출을 위임합니다. 여러 저장소 가 IPropertyStoreCapabilities를 구현하는 경우 후속 저장소는 무시됩니다. IPropertyStoreCapabilities를 구현하는 저장소가 없으면 이 메서드는 S_OK 반환합니다.
예제
더 큰 프로그램의 일부로 포함할 다음 예제에서는 IPropertyStoreFactory::GetPropertyStore 구현에서 PSCreateMultiplexPropertyStore를 사용하는 방법을 보여 줍니다.
// 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;
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | WINDOWS XP SP2, Windows Vista [데스크톱 앱만 해당] |
지원되는 최소 서버 | WINDOWS Server 2003 SP1 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | propsys.h |
라이브러리 | Propsys.lib |
DLL | Propsys.dll(버전 6.0 이상) |
재배포 가능 파일 | WDS(Windows 데스크톱 검색) 3.0 |