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.
 
 
 
 
 
 

194 lines
7.8 KiB

/*===================================================================
Microsoft Denali
Microsoft Confidential.
Copyright 1997 Microsoft Corporation. All Rights Reserved.
Component: MetaUtil object
File: MUtilObj.h
Owner: t-BrianM
This file contains the headers for the main MetaUtil object and
utility functions.
===================================================================*/
#ifndef __METAUTIL_H_
#define __METAUTIL_H_
#include "resource.h" // main symbols
#include <iadmw.h> // Metabase base object unicode interface
#include <iiscnfg.h> // MD_ & IIS_MD_ defines
#include "utility.h"
#include "MetaSchm.h"
#include "keycol.h"
#include "propcol.h"
#include "chkerror.h"
#define MUTIL_OPEN_KEY_TIMEOUT 5000 //Timeout for metabase OpenKey() calls
/*
* C M e t a U t i l
*
* Implements the main MetaUtil object
*/
class ATL_NO_VTABLE CMetaUtil :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMetaUtil, &CLSID_MetaUtil>,
public ISupportErrorInfo,
public IDispatchImpl<IMetaUtil, &IID_IMetaUtil, &LIBID_MetaUtil>
{
public:
CMetaUtil();
HRESULT FinalConstruct();
void FinalRelease();
DECLARE_REGISTRY_RESOURCEID(IDR_METAUTIL)
BEGIN_COM_MAP(CMetaUtil)
COM_INTERFACE_ENTRY(IMetaUtil)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
// DECLARE_NOT_AGGREGATABLE(CMetaUtil)
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
// IMetaUtil
STDMETHOD(EnumProperties)(/*[in]*/ BSTR bstrKey, /*[out, retval]*/ IPropertyCollection **ppIReturn);
STDMETHOD(EnumKeys)(/*[in]*/ BSTR bstrBaseKey, /*[out, retval]*/ IKeyCollection **ppIReturn);
STDMETHOD(EnumAllKeys)(/*[in]*/ BSTR bstrBaseKey, /*[out, retval]*/ IKeyCollection **ppIReturn);
STDMETHOD(CreateKey)(/*[in]*/ BSTR bstrKey);
STDMETHOD(DeleteKey)(/*[in]*/ BSTR bstrKey);
STDMETHOD(RenameKey)(/*[in]*/ BSTR bstrOldName, /*[in]*/ BSTR bstrNewName);
STDMETHOD(CopyKey)(/*[in]*/ BSTR bstrSrcKey, /*[in]*/ BSTR bstrDestKey, /*[in]*/ BOOL fOverwrite);
STDMETHOD(MoveKey)(/*[in]*/ BSTR bstrSrcKey, /*[in]*/ BSTR bstrDestKey, /*[in]*/ BOOL fOverwrite);
STDMETHOD(GetProperty)(/*[in]*/ BSTR bstrKey, /*[in]*/ VARIANT varId, /*[out, retval]*/ IProperty **ppIReturn);
STDMETHOD(CreateProperty)(/*[in]*/ BSTR bstrKey, /*[in]*/ VARIANT varId, /*[out, retval]*/ IProperty **ppIReturn);
STDMETHOD(DeleteProperty)(/*[in]*/ BSTR bstrKey, /*[in]*/ VARIANT varId);
STDMETHOD(CheckSchema)(/*[in]*/ BSTR bstrMachine, /*[out, retval]*/ ICheckErrorCollection **ppIReturn);
STDMETHOD(CheckKey)(/*[in]*/ BSTR bstrKey, /*[out, retval]*/ ICheckErrorCollection **ppIReturn);
STDMETHOD(ExpandString)(/*[in]*/ BSTR bstrIn, /*[out, retval]*/ BSTR *pbstrRet);
STDMETHOD(PropIdToName)(/*[in]*/ BSTR bstrKey, /*[in]*/ long lId, /*[out, retval]*/ BSTR *pbstrName);
STDMETHOD(PropNameToId)(/*[in]*/ BSTR bstrKey, /*[in]*/ BSTR bstrName, /*[out, retval]*/ long *plId);
STDMETHOD(get_Config)(/*[in]*/ BSTR bstrSetting, /*[out, retval]*/ VARIANT *pvarValue);
STDMETHOD(put_Config)(/*[in]*/ BSTR bstrSetting, /*[in]*/ VARIANT varValue);
private:
// Pointer to IMSAdminBase so we don't have to recreate it multiple times
CComPtr<IMSAdminBase> m_pIMeta;
// Schema table
CMetaSchemaTable *m_pCSchemaTable;
// Configuration variables
DWORD m_dwMaxPropSize;
DWORD m_dwMaxKeySize;
DWORD m_dwMaxNumErrors;
// General check methods
void AddError(CComObject<CCheckErrorCollection> *pCErrorCol, long lId, long lSeverity, LPCTSTR tszKey, LPCTSTR tszSubKey, DWORD dwProperty);
BOOL KeyExists(METADATA_HANDLE hMDKey, LPTSTR tszSubKey);
BOOL PropertyExists(METADATA_HANDLE hMDKey, LPTSTR tszSubKey, DWORD dwId);
// CheckSchema specific methods
HRESULT CheckPropertyNames(CComObject<CCheckErrorCollection> *pCErrorCol, METADATA_HANDLE hMDMachine, LPTSTR tszMachine);
HRESULT CheckPropertyTypes(CComObject<CCheckErrorCollection> *pCErrorCol, METADATA_HANDLE hMDMachine, LPTSTR tszMachine);
HRESULT CheckClasses(CComObject<CCheckErrorCollection> *pCErrorCol, METADATA_HANDLE hMDMachine, LPTSTR tszMachine);
HRESULT CheckClassProperties(CComObject<CCheckErrorCollection> *pCErrorCol, METADATA_HANDLE hMDClassKey, LPTSTR tszClassKey, LPTSTR tszClassSubKey);
// CheckKey specific methods
BOOL CheckCLSID(LPCTSTR tszCLSID);
BOOL CheckMTXPackage(LPCTSTR tszPackId);
HRESULT CheckKeyType(CComObject<CCheckErrorCollection> *pCErrorCol, METADATA_HANDLE hMDKey, LPTSTR tszKey);
HRESULT CheckIfFileExists(LPCTSTR pszFSPath, BOOL *pfExists);
};
// Methods also supported by the collections
HRESULT CreateKey(CComPtr<IMSAdminBase> &pIMeta, LPCTSTR tszKey);
HRESULT DeleteKey(CComPtr<IMSAdminBase> &pIMeta, LPCTSTR tszKey);
HRESULT CopyKey(CComPtr<IMSAdminBase> &pIMeta, LPTSTR tszSrcKey, LPTSTR tszDestKey, BOOL fOverwrite, BOOL fCopy);
HRESULT GetProperty(CComPtr<IMSAdminBase> &pIMeta, CMetaSchemaTable *pCSchemaTable, LPCTSTR tszKey, VARIANT varId, IProperty **ppIReturn);
HRESULT CreateProperty(CComPtr<IMSAdminBase> &pIMeta, CMetaSchemaTable *pCSchemaTable, LPCTSTR tszKey, VARIANT varId, IProperty **ppIReturn);
HRESULT DeleteProperty(CComPtr<IMSAdminBase> &pIMeta, CMetaSchemaTable *pCSchemaTable, LPTSTR tszKey, VARIANT varId);
// Utility
HRESULT VarToMetaId(CMetaSchemaTable *pCSchemaTable, LPCTSTR tszKey, VARIANT varId, DWORD *pdwId);
// Schema Error Constants (*_S is severity)
#define MUTIL_CHK_NO_SCHEMA 1000
#define MUTIL_CHK_NO_SCHEMA_S 1
#define MUTIL_CHK_NO_PROPERTIES 1001
#define MUTIL_CHK_NO_PROPERTIES_S 1
#define MUTIL_CHK_NO_PROP_NAMES 1002
#define MUTIL_CHK_NO_PROP_NAMES_S 1
#define MUTIL_CHK_NO_PROP_TYPES 1003
#define MUTIL_CHK_NO_PROP_TYPES_S 1
#define MUTIL_CHK_NO_CLASSES 1004
#define MUTIL_CHK_NO_CLASSES_S 1
#define MUTIL_CHK_PROP_NAME_BAD_TYPE 1100
#define MUTIL_CHK_PROP_NAME_BAD_TYPE_S 1
#define MUTIL_CHK_PROP_NAME_NOT_UNIQUE 1101
#define MUTIL_CHK_PROP_NAME_NOT_UNIQUE_S 1
#define MUTIL_CHK_PROP_NAME_NOT_CASE_UNIQUE 1102
#define MUTIL_CHK_PROP_NAME_NOT_CASE_UNIQUE_S 1
#define MUTIL_CHK_PROP_TYPE_BAD_TYPE 1200
#define MUTIL_CHK_PROP_TYPE_BAD_TYPE_S 1
#define MUTIL_CHK_PROP_TYPE_BAD_DATA 1201
#define MUTIL_CHK_PROP_TYPE_BAD_DATA_S 2
#define MUTIL_CHK_CLASS_NO_MANDATORY 1300
#define MUTIL_CHK_CLASS_NO_MANDATORY_S 1
#define MUTIL_CHK_CLASS_NO_OPTIONAL 1301
#define MUTIL_CHK_CLASS_NO_OPTIONAL_S 1
#define MUTIL_CHK_CLASS_NOT_CASE_UNIQUE 1302
#define MUTIL_CHK_CLASS_NOT_CASE_UNIQUE_S 2
#define MUTIL_CHK_CLASS_PROP_NO_TYPE 1303
#define MUTIL_CHK_CLASS_PROP_NO_TYPE_S 2
#define MUTIL_CHK_CLASS_PROP_BAD_DATA_TYPE 1304
#define MUTIL_CHK_CLASS_PROP_BAD_DATA_TYPE_S 2
#define MUTIL_CHK_CLASS_PROP_BAD_USER_TYPE 1305
#define MUTIL_CHK_CLASS_PROP_BAD_USER_TYPE_S 2
#define MUTIL_CHK_CLASS_PROP_BAD_ATTR 1306
#define MUTIL_CHK_CLASS_PROP_BAD_ATTR_S 2
#define MUTIL_CHK_DATA_TOO_BIG 2000
#define MUTIL_CHK_DATA_TOO_BIG_S 3
#define MUTIL_CHK_KEY_TOO_BIG 2001
#define MUTIL_CHK_KEY_TOO_BIG_S 3
#define MUTIL_CHK_CLSID_NOT_FOUND 2002
#define MUTIL_CHK_CLSID_NOT_FOUND_S 1
#define MUTIL_CHK_MTX_PACK_ID_NOT_FOUND 2003
#define MUTIL_CHK_MTX_PACK_ID_NOT_FOUND_S 1
#define MUTIL_CHK_PATH_NOT_FOUND 2004
#define MUTIL_CHK_PATH_NOT_FOUND_S 1
#define MUTIL_CHK_NO_NAME_ENTRY 2100
#define MUTIL_CHK_NO_NAME_ENTRY_S 3
#define MUTIL_CHK_NO_TYPE_ENTRY 2101
#define MUTIL_CHK_NO_TYPE_ENTRY_S 3
#define MUTIL_CHK_BAD_DATA_TYPE 2102
#define MUTIL_CHK_BAD_DATA_TYPE_S 2
#define MUTIL_CHK_BAD_USER_TYPE 2103
#define MUTIL_CHK_BAD_USER_TYPE_S 2
#define MUTIL_CHK_BAD_ATTR 2104
#define MUTIL_CHK_BAD_ATTR_S 2
#define MUTIL_CHK_NO_KEYTYPE 2200
#define MUTIL_CHK_NO_KEYTYPE_S 3
#define MUTIL_CHK_NO_KEYTYPE_NOT_FOUND 2201
#define MUTIL_CHK_NO_KEYTYPE_NOT_FOUND_S 1
#define MUTIL_CHK_MANDATORY_PROP_MISSING 2202
#define MUTIL_CHK_MANDATORY_PROP_MISSING_S 2
#define MUTIL_CHK_TOO_MANY_ERRORS 9000
#define MUTIL_CHK_TOO_MANY_ERRORS_S 3
#endif //__METAUTIL_H_