다음을 통해 공유


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, IObjectProviderIPropertyStoreCapabilities를 구현하는 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

추가 정보

IPropertyStoreFactory

PSCreateDelayedMultiplexPropertyStore