windows-nt/Source/XPSP1/NT/inetsrv/iis/admin/adsi/adsiis/cschema.hxx
2020-09-26 16:20:57 +08:00

385 lines
9.1 KiB
C++

//---------------------------------------------------------------------------
//
// 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;
} 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;
};