Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

168 lines
4.4 KiB

/*===================================================================
Microsoft Denali
Microsoft Confidential.
Copyright 1997 Microsoft Corporation. All Rights Reserved.
Component: MetaUtil object
File: PropCol.h
Owner: t-BrianM
This file contains the headers for the property collection and
property object.
===================================================================*/
#ifndef __PROPCOL_H_
#define __PROPCOL_H_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "resource.h" // main symbols
/*
* C P r o p e r t y C o l l e c t i o n
*
* Implements property collections
*/
class CPropertyCollection :
public IDispatchImpl<IPropertyCollection, &IID_IPropertyCollection, &LIBID_MetaUtil>,
public ISupportErrorInfo,
public CComObjectRoot
{
public:
CPropertyCollection();
HRESULT Init(const CComPtr<IMSAdminBase> &pIMeta, CMetaSchemaTable *pCSchemaTable, LPTSTR tszKey);
~CPropertyCollection();
BEGIN_COM_MAP(CPropertyCollection)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IPropertyCollection)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
DECLARE_NOT_AGGREGATABLE(CPropertyCollection)
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
// IPropertyCollection
STDMETHOD(get_Count)(/*[out, retval]*/ long *plReturn);
STDMETHOD(get_Item)(/*[in]*/ long lIndex, /*[out, retval]*/ LPDISPATCH *ppIReturn);
STDMETHOD(get__NewEnum)(/*[out, retval]*/ LPUNKNOWN *ppIReturn);
STDMETHOD(Get)(/*[in]*/ VARIANT varId, /*[out, retval]*/ IProperty **ppIReturn);
STDMETHOD(Add)(/*[in]*/ VARIANT varId, /*[out, retval]*/ IProperty **ppIReturn);
STDMETHOD(Remove)(/*[in]*/ VARIANT varId);
private:
LPTSTR m_tszKey;
// Pointer to IMSAdminBase so we don't have to recreate it multiple times
CComPtr<IMSAdminBase> m_pIMeta;
CMetaSchemaTable *m_pCSchemaTable;
};
/*
* C P r o p e r t y E n u m
*
* Implements property enumberations
*/
class CPropertyEnum :
public IEnumVARIANT,
public CComObjectRoot
{
public:
CPropertyEnum();
HRESULT Init(const CComPtr<IMSAdminBase> &pIMeta, CMetaSchemaTable *pCSchemaTable, LPCTSTR tszKey, int iIndex);
~CPropertyEnum();
BEGIN_COM_MAP(CPropertyEnum)
COM_INTERFACE_ENTRY(IEnumVARIANT)
END_COM_MAP()
DECLARE_NOT_AGGREGATABLE(CPropertyEnum)
//IEnumVARIANT
STDMETHOD(Next)(unsigned long ulNumToGet,
VARIANT FAR* rgvarDest,
unsigned long FAR* pulNumGot);
STDMETHOD(Skip)(unsigned long ulNumToSkip);
STDMETHOD(Reset)();
STDMETHOD(Clone)(IEnumVARIANT FAR* FAR* ppIReturn);
private:
int m_iIndex;
LPTSTR m_tszKey;
// Pointer to IMSAdminBase so we don't have to recreate it multiple times
CComPtr<IMSAdminBase> m_pIMeta;
CMetaSchemaTable *m_pCSchemaTable;
};
/*
* C P r o p e r t y
*
* Implements property objects.
*/
class CProperty :
public IDispatchImpl<IProperty, &IID_IProperty, &LIBID_MetaUtil>,
public ISupportErrorInfo,
public CComObjectRoot
{
public:
CProperty();
HRESULT Init(const CComPtr<IMSAdminBase> &pIMeta, CMetaSchemaTable *pCSchemaTable, LPCTSTR tszKey, DWORD dwId, BOOL bCreate);
HRESULT Init(const CComPtr<IMSAdminBase> &pIMeta, CMetaSchemaTable *pCSchemaTable, LPCTSTR tszKey, METADATA_RECORD *mdr);
~CProperty();
BEGIN_COM_MAP(CProperty)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IProperty)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
DECLARE_NOT_AGGREGATABLE(CProperty)
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
// IProperty
STDMETHOD(get_Id)(/*[out, retval]*/ long *plId);
STDMETHOD(get_Name)(/*[out, retval]*/ BSTR *pbstrName);
STDMETHOD(get_Attributes)(/*[out, retval]*/ long *plAttributes);
STDMETHOD(put_Attributes)(/*[in]*/ long plAttributes);
STDMETHOD(get_UserType)(/*[out, retval]*/ long *plAttributes);
STDMETHOD(put_UserType)(/*[in]*/ long plAttributes);
STDMETHOD(get_DataType)(/*[out, retval]*/ long *plAttributes);
STDMETHOD(put_DataType)(/*[in]*/ long plAttributes);
STDMETHOD(get_Data)(/*[out, retval]*/ VARIANT *pvarData);
STDMETHOD(put_Data)(/*[in]*/ VARIANT varData);
STDMETHOD(Write)();
private:
LPTSTR m_tszKey;
DWORD m_dwId;
DWORD m_dwAttributes;
DWORD m_dwUserType;
DWORD m_dwDataType;
VARIANT m_varData;
// Pointer to IMSAdminBase so we don't have to recreate it multiple times
CComPtr<IMSAdminBase> m_pIMeta;
CMetaSchemaTable *m_pCSchemaTable;
HRESULT SetDataToVar(BYTE *pbData, DWORD dwDataLen);
HRESULT GetDataFromVar(BYTE * &pbData, DWORD &dwDataLen);
};
#endif //ifndef __PROPCOL_H_