|
|
//---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1996
//
// File: cschema.hxx
//
// Contents: Schema class
//
// History: 01-09-96 yihsins Created.
//
//----------------------------------------------------------------------------
#define DEFAULT_SCHEMA_CLASS_A "IIsObject"
#define DEFAULT_SCHEMA_CLASS_W L"IIsObject"
#define COMPUTER_CLASS_A "IIsComputer"
#define COMPUTER_CLASS_W L"IIsComputer"
#define WEBDIR_CLASS_A "IIsWebDirectory"
#define WEBDIR_CLASS_W L"IIsWebDirectory"
#define FTPVDIR_CLASS_A "IIsFtpVirtualDir"
#define FTPVDIR_CLASS_W L"IIsFtpVirtualDir"
#define SIZEOF_WEBDIR_CLASS_W (wcslen(WEBDIR_CLASS_W)+1)*sizeof(WCHAR)
#define SIZEOF_FTPVDIR_CLASS_W (wcslen(FTPVDIR_CLASS_W)+1)*sizeof(WCHAR)
#define SIZEOF_DEFAULT_CLASS_W (wcslen(DEFAULT_SCHEMA_CLASS_W)+1)*sizeof(WCHAR)
#define SCHEMA_CLASS_METABASE_PATH L"Schema/Classes"
#define SCHEMA_PROP_METABASE_PATH L"Schema/Properties"
#define CLASS_PRIMARY_INTERFACE 1
#define CLASS_CLSID 2
#define CLASS_OID 3
#define CLASS_ABSTRACT 4
#define CLASS_AUXILIARY 5
#define CLASS_MAND_PROPERTIES 6
#define CLASS_OPT_PROPERTIES 7
#define CLASS_NAMING_PROPERTIES 8
#define CLASS_DERIVEDFROM 9
#define CLASS_AUX_DERIVEDFROM 10
#define CLASS_POSS_SUPERIORS 11
#define CLASS_CONTAINMENT 12
#define CLASS_CONTAINER 13
#define CLASS_HELPFILENAME 14
#define CLASS_HELPFILECONTEXT 15
#define PROP_OID 16
#define PROP_SYNTAX 17
#define PROP_MAXRANGE 18
#define PROP_MINRANGE 19
#define PROP_MULTIVALUED 20
#define PROP_PROPNAME 21
#define PROP_METAID 22
#define PROP_USERTYPE 23
#define PROP_ALLATTRIBUTES 24
#define PROP_INHERIT 25
#define PROP_PARTIALPATH 26
#define PROP_SECURE 27
#define PROP_REFERENCE 28
#define PROP_VOLATILE 29
#define PROP_ISINHERIT 30
#define PROP_INSERTPATH 31
#define PROP_DEFAULT 32
typedef struct _SchemaObjProps { WCHAR szObjectName[MAX_PATH]; DWORD dwSyntaxId; DWORD dwID; } SCHEMAOBJPROPS, *PSCHEMAOBJPROPS;
typedef struct _PropertyInfo { LPTSTR szPropertyName; BSTR bstrOID; BSTR bstrSyntax; long lMaxRange; long lMinRange; BOOL fMultiValued; DWORD dwFlags; DWORD dwInfoLevel; DWORD dwSyntaxId; DWORD dwMetaID; DWORD dwPropID; // usually same as meta id, unless a bitmasked prop
DWORD dwMask; // For flags.
DWORD dwMetaFlags; // Metabase flags (inherit, etc.)
DWORD dwUserGroup; DWORD dwDefault; LPTSTR szDefault; DWORD dwBinDataLen; } PROPERTYINFO, *PPROPERTYINFO, *LPPROPERTYINFO;
typedef struct _ClassInfo { BSTR bstrName; const GUID *pCLSID; const GUID *pPrimaryInterfaceGUID; BSTR bstrOID; BOOL fAbstract; BSTR bstrMandatoryProperties; BSTR bstrOptionalProperties; BSTR bstrPossSuperiors; BSTR bstrContainment; BOOL fContainer; BSTR bstrHelpFileName; long lHelpFileContext;
} CLASSINFO, *PCLASSINFO;
typedef struct _SyntaxInfo { BSTR bstrName; DWORD dwIISSyntaxId; long lOleAutoDataType; } SYNTAXINFO;
extern DWORD g_cPropertyObjProps; extern SCHEMAOBJPROPS g_pPropertyObjProps[];
extern DWORD g_cClassObjProps; extern SCHEMAOBJPROPS g_pClassObjProps[];
extern DWORD g_cIISClasses; extern CLASSINFO g_aIISClasses[];
extern DWORD g_cIISSyntax; extern SYNTAXINFO g_aIISSyntax[];
HRESULT MakeVariantFromStringList( BSTR bstrList, VARIANT *pvVariant );
HRESULT ValidateClassObjProps( LPWSTR pszName, PDWORD pdwSyntax, PDWORD pdwID );
HRESULT ValidatePropertyObjProps( LPWSTR pszName, PDWORD pdwSyntax, PDWORD pdwID );
HRESULT IISMarshallClassProperties( CLASSINFO *pClassInfo, PMETADATA_RECORD * ppMetaDataRecords, PDWORD pdwMDNumDataEntries );
HRESULT GenerateNewMetaID( LPWSTR pszServerName, IMSAdminBase *pAdminBase, //interface pointer
PDWORD pdwMetaID );
HRESULT CheckDuplicateNames( LPWSTR pszNames );
class CIISClass : INHERIT_TRACKING, public CCoreADsObject, public IADsClass { public:
/* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ; DECLARE_STD_REFCOUNTING
/* Other methods */ DECLARE_IDispatch_METHODS
DECLARE_IADs_METHODS
DECLARE_IADsClass_METHODS
/* Constructors, Destructors, .... */ CIISClass::CIISClass();
CIISClass::~CIISClass();
static HRESULT CIISClass::CreateClass( BSTR bstrParent, BSTR bstrRelative, DWORD dwObjectState, REFIID riid, void **ppvObj );
static HRESULT CIISClass::AllocateClassObject( CIISClass **ppClass );
HRESULT CIISClass::IISSetObject();
HRESULT CIISClass::IISCreateObject();
HRESULT CIISClass::ValidateProperties( LPWSTR pszList, BOOL bMandatory );
HRESULT CIISClass::ValidateClassNames( LPWSTR pszList );
HRESULT CIISClass::PropertyInMetabase( LPWSTR szPropName, BOOL bMandatory );
protected:
CAggregatorDispMgr FAR * _pDispMgr;
/* Properties */ BSTR _bstrCLSID; BSTR _bstrOID; BSTR _bstrPrimaryInterface;
VARIANT_BOOL _fAbstract; VARIANT _vMandatoryProperties; VARIANT _vOptionalProperties;
VARIANT _vPossSuperiors; VARIANT _vContainment; VARIANT_BOOL _fContainer;
BSTR _bstrHelpFileName; long _lHelpFileContext;
LPWSTR _pszServerName; LPWSTR _pszClassName; BOOL _bExistClass; IIsSchema *_pSchema; IMSAdminBase *_pAdminBase; //interface pointer
};
class CIISProperty : INHERIT_TRACKING, public CCoreADsObject, public IADsProperty, public IISPropertyAttribute { public:
/* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ; DECLARE_STD_REFCOUNTING
/* Other methods */ DECLARE_IDispatch_METHODS
DECLARE_IADs_METHODS
DECLARE_IADsProperty_METHODS
DECLARE_IISPropertyAttribute_METHODS
/* Constructors, Destructors, ... */ CIISProperty::CIISProperty();
CIISProperty::~CIISProperty();
static HRESULT CIISProperty::CreateProperty( BSTR bstrParent, BSTR bstrRelative, DWORD dwObjectState, REFIID riid, void **ppvObj );
static HRESULT CIISProperty::AllocatePropertyObject( CIISProperty **ppProperty );
HRESULT CIISProperty::IISSetObject();
HRESULT CIISProperty::ValidateSyntaxName( LPWSTR pszName, PDWORD pdwSytnax );
HRESULT CIISProperty::ConvertDefaultValue( PVARIANT pVar, PROPERTYINFO *pPropInfo );
HRESULT CIISProperty::SetMetaID( );
private: BOOL IsMetaIdAvailable( DWORD MetaId );
protected:
CAggregatorDispMgr FAR * _pDispMgr;
/* Properties */
BSTR _bstrOID; BSTR _bstrSyntax; long _lMaxRange; long _lMinRange; VARIANT_BOOL _fMultiValued; long _lMetaId; long _lUserType; long _lAllAttributes; VARIANT _vDefault; DWORD _dwSyntaxId; DWORD _dwMask; DWORD _dwFlags; DWORD _dwPropID;
IIsSchema *_pSchema; IMSAdminBase *_pAdminBase; //interface pointer
LPWSTR _pszServerName; LPWSTR _pszPropName; BOOL _bExistProp; };
class CIISSyntax : INHERIT_TRACKING, public CCoreADsObject, public IADsSyntax { public:
/* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ; DECLARE_STD_REFCOUNTING
/* Other methods */ DECLARE_IDispatch_METHODS
DECLARE_IADs_METHODS
DECLARE_IADsSyntax_METHODS
/* Constructors, Destructors, ... */ CIISSyntax::CIISSyntax();
CIISSyntax::~CIISSyntax();
static HRESULT CIISSyntax::CreateSyntax( BSTR bstrParent, SYNTAXINFO *pSyntaxInfo, DWORD dwObjectState, REFIID riid, void **ppvObj );
static HRESULT CIISSyntax::AllocateSyntaxObject( CIISSyntax **ppSyntax );
protected:
CAggregatorDispMgr FAR * _pDispMgr;
/* Properties */ long _lOleAutoDataType; IIsSchema *_pSchema; };
|