typedef struct _PropertyInfo { LPTSTR szPropertyName; BSTR bstrOID; BSTR bstrSyntax; long lMaxRange; long lMinRange; BOOL fMultiValued; DWORD dwFlags; DWORD dwInfoLevel; DWORD dwSyntaxId; } 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; PROPERTYINFO *aPropertyInfo; DWORD cPropertyInfo; } CLASSINFO; typedef struct _SyntaxInfo { BSTR bstrName; long lOleAutoDataType; } SYNTAXINFO; extern DWORD g_cWinNTClasses; extern CLASSINFO g_aWinNTClasses[]; extern DWORD g_cWinNTSyntax; extern SYNTAXINFO g_aWinNTSyntax[]; HRESULT MakeVariantFromStringList( BSTR bstrList, VARIANT *pvVariant ); class CWinNTSchema; class CWinNTSchema : INHERIT_TRACKING, public CCoreADsObject, public ISupportErrorInfo, public IADs, public IADsContainer, public INonDelegatingUnknown, public IADsExtension { public: /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ; STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // INonDelegatingUnknown methods STDMETHOD(NonDelegatingQueryInterface)(THIS_ const IID&, void ** ); DECLARE_NON_DELEGATING_REFCOUNTING /* Other methods */ DECLARE_IDispatch_METHODS DECLARE_ISupportErrorInfo_METHODS DECLARE_IADs_METHODS DECLARE_IADsContainer_METHODS DECLARE_IADsExtension_METHODS /* Constructors, Destructors .... */ CWinNTSchema::CWinNTSchema(); CWinNTSchema::~CWinNTSchema(); static HRESULT CWinNTSchema::CreateSchema( BSTR bstrParent, BSTR bstrName, DWORD dwObjectState, REFIID riid, CWinNTCredentials& Credentials, void **ppvObj ); static HRESULT CWinNTSchema::AllocateSchemaObject( CWinNTSchema **ppSchema ); STDMETHOD(ImplicitGetInfo)(void); protected: CAggregatorDispMgr FAR * _pDispMgr; VARIANT _vFilter; CWinNTCredentials _Credentials; }; class CWinNTClass : INHERIT_TRACKING, public CCoreADsObject, public ISupportErrorInfo, public IADsClass, public INonDelegatingUnknown, public IADsExtension { public: /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ; STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // INonDelegatingUnknown methods STDMETHOD(NonDelegatingQueryInterface)(THIS_ const IID&, void ** ); DECLARE_NON_DELEGATING_REFCOUNTING /* Other methods */ DECLARE_IDispatch_METHODS DECLARE_ISupportErrorInfo_METHODS DECLARE_IADs_METHODS DECLARE_IADsClass_METHODS DECLARE_IADsExtension_METHODS /* Constructors, Destructors, .... */ CWinNTClass::CWinNTClass(); CWinNTClass::~CWinNTClass(); static HRESULT CWinNTClass::CreateClass( BSTR bstrParent, CLASSINFO *pClassInfo, DWORD dwObjectState, REFIID riid, CWinNTCredentials& Credentials, void **ppvObj ); static HRESULT CWinNTClass::AllocateClassObject( CWinNTClass **ppClass ); STDMETHOD(GetInfo)(THIS_ DWORD dwApiLevel, BOOL fExplicit) ; STDMETHOD(ImplicitGetInfo)(void); protected: CAggregatorDispMgr FAR * _pDispMgr; VARIANT _vFilter; DWORD _cPropertyInfo; PROPERTYINFO *_aPropertyInfo; /* 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; CWinNTCredentials _Credentials; }; class CWinNTProperty : INHERIT_TRACKING, public CCoreADsObject, public ISupportErrorInfo, public IADsProperty, public INonDelegatingUnknown, public IADsExtension { public: /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ; STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // INonDelegatingUnknown methods STDMETHOD(NonDelegatingQueryInterface)(THIS_ const IID&, void ** ); DECLARE_NON_DELEGATING_REFCOUNTING /* Other methods */ DECLARE_IDispatch_METHODS DECLARE_ISupportErrorInfo_METHODS DECLARE_IADs_METHODS DECLARE_IADsProperty_METHODS DECLARE_IADsExtension_METHODS /* Constructors, Destructors, ... */ CWinNTProperty::CWinNTProperty(); CWinNTProperty::~CWinNTProperty(); static HRESULT CWinNTProperty::CreateProperty( BSTR bstrParent, PROPERTYINFO *pPropertyInfo, DWORD dwObjectState, REFIID riid, CWinNTCredentials& Credentials, void **ppvObj ); static HRESULT CWinNTProperty::AllocatePropertyObject( CWinNTProperty **ppProperty ); STDMETHOD(GetInfo)(THIS_ DWORD dwApiLevel, BOOL fExplicit) ; STDMETHOD(ImplicitGetInfo)(void); protected: CAggregatorDispMgr FAR * _pDispMgr; /* Properties */ BSTR _bstrOID; BSTR _bstrSyntax; long _lMaxRange; long _lMinRange; VARIANT_BOOL _fMultiValued; CWinNTCredentials _Credentials; }; class CWinNTSyntax : INHERIT_TRACKING, public CCoreADsObject, public ISupportErrorInfo, public IADsSyntax, public INonDelegatingUnknown, public IADsExtension { public: /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ; STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // INonDelegatingUnknown methods STDMETHOD(NonDelegatingQueryInterface)(THIS_ const IID&, void ** ); DECLARE_NON_DELEGATING_REFCOUNTING /* Other methods */ DECLARE_IDispatch_METHODS DECLARE_ISupportErrorInfo_METHODS DECLARE_IADs_METHODS DECLARE_IADsSyntax_METHODS DECLARE_IADsExtension_METHODS /* Constructors, Destructors, ... */ CWinNTSyntax::CWinNTSyntax(); CWinNTSyntax::~CWinNTSyntax(); static HRESULT CWinNTSyntax::CreateSyntax( BSTR bstrParent, SYNTAXINFO *pSyntaxInfo, DWORD dwObjectState, REFIID riid, CWinNTCredentials& Credentials, void **ppvObj ); static HRESULT CWinNTSyntax::AllocateSyntaxObject( CWinNTSyntax **ppSyntax ); STDMETHOD(GetInfo)(THIS_ DWORD dwApiLevel, BOOL fExplicit) ; STDMETHOD(ImplicitGetInfo)(void); protected: CAggregatorDispMgr FAR * _pDispMgr; /* Properties */ long _lOleAutoDataType; CWinNTCredentials _Credentials; };