|
|
//---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1998.
//
// File: cprops.hxx
//
// Contents:
//
// History: 17-Feb-1998 sophiac Created.
//
//----------------------------------------------------------------------------
typedef struct _property{ WCHAR szPropertyName[MAX_PATH]; DWORD dwFlags; DWORD dwNumValues; // Number of values
DWORD dwSyntaxId; // IIS Syntax Id
DWORD dwMDIdentifier; // IIS MetaData Identifier
PIISOBJECT pIISObject; // Pointer to the IIS Object
}PROPERTY, *PPROPERTY;
//
// Dynamic Dispid Table
//
typedef struct _dispproperty { WCHAR szPropertyName[MAX_PATH]; } DISPPROPERTY, *PDISPPROPERTY;
#define PROPERTY_NAME(pProperty) pProperty->szPropertyName
#define PROPERTY_VALUES(pProperty) pProperty->lpValues
#define PROPERTY_NUMVALUES(pProperty) pProperty->dwNumValues
#define PROPERTY_SYNTAX(pProperty) pProperty->dwSyntaxId
#define PROPERTY_IISOBJECT(pProperty) pProperty->pIISObject
#define PROPERTY_FLAGS(pProperty) pProperty->dwFlags
#define PROPERTY_INFOLEVEL(pProperty) pProperty->dwInfoLevel
#define PROPERTY_METAID(pProperty) pProperty->dwMDIdentifier
//
// Schema Status flags
//
#define CACHE_PROPERTY_INITIALIZED 0x0
#define CACHE_PROPERTY_MODIFIED 0x1
#define CACHE_PROPERTY_CLEARED 0x2
//
// Dynamic Dispid Table
//
#define DISPATCH_NAME(pDispProperty) \
( (pDispProperty)->szPropertyName)
#define DISPATCH_PROPERTY_NAME(dwDispid) \
( (_pDispProperties+(dwDispid))->szPropertyName )
#define DISPATCH_INDEX_VALID(dwDispid) \
( ((dwDispid) <_dwDispMaxProperties) ? TRUE : FALSE)
class CPropertyCache : public IPropertyCache {
public:
HRESULT CPropertyCache:: addproperty( LPWSTR szPropertyName, DWORD dwSyntaxId, DWORD dwNumValues, PIISOBJECT pIISObject );
HRESULT CPropertyCache:: updateproperty( LPWSTR szPropertyName, DWORD dwSyntaxId, DWORD dwNumValues, PIISOBJECT pIISObject, BOOL fExplicit );
HRESULT CPropertyCache:: findproperty( LPWSTR szPropertyName, PDWORD pdwIndex );
HRESULT CPropertyCache:: deleteproperty( DWORD dwIndex );
HRESULT CPropertyCache:: getproperty( LPWSTR szPropertyName, PDWORD pdwSyntaxId, PDWORD pdwNumValues, PIISOBJECT * ppIISObject );
HRESULT CPropertyCache:: putproperty( LPWSTR szPropertyName, DWORD dwFlags, DWORD dwSyntaxId, DWORD dwNumValues, PIISOBJECT pIISObject );
HRESULT CPropertyCache:: IISMarshallProperties( PMETADATA_RECORD * ppMetaDataRecords, PDWORD pdwMDNumDataEntries );
HRESULT CPropertyCache:: IISUnMarshallProperties( LPBYTE pBase, LPBYTE pBuffer, DWORD dwMDNumDataEntries, BOOL fExplicit );
void CPropertyCache:: flushpropcache();
CPropertyCache:: CPropertyCache();
CPropertyCache:: ~CPropertyCache();
void CPropertyCache:: reset_propindex( );
BOOL CPropertyCache:: index_valid( );
BOOL CPropertyCache:: index_valid( DWORD dwIndex );
HRESULT CPropertyCache:: skip_propindex( DWORD dwElements );
HRESULT CPropertyCache:: get_PropertyCount( PDWORD pdwMaxProperties );
DWORD CPropertyCache:: get_CurrentIndex( );
LPWSTR CPropertyCache:: get_CurrentPropName( );
LPWSTR CPropertyCache:: get_PropName( DWORD dwIndex );
static HRESULT CPropertyCache:: createpropertycache( CCoreADsObject FAR * pCoreADsObject, CPropertyCache FAR * FAR * ppPropertyCache );
HRESULT InitializePropertyCache( IN LPCWSTR pwszServerName ) { return ADsAllocString( pwszServerName, &_bstrServerName ); }
HRESULT CPropertyCache:: unmarshallproperty( LPWSTR szPropertyName, LPBYTE lpValue, DWORD dwNumValues, DWORD dwSyntaxId, BOOL fExplicit );
//
// IPropertyCache
//
HRESULT locateproperty( LPWSTR szPropertyName, PDWORD pdwDispid );
HRESULT putproperty( DWORD dwDispid, VARIANT varValue );
HRESULT getproperty( DWORD dwDispid, VARIANT * pvarValue );
protected:
//
// Dynamic Dispid Table
//
HRESULT DispatchAddProperty( LPWSTR szPropertyName, PDWORD pdwDispid );
HRESULT DispatchFindProperty( LPWSTR szPropertyName, PDWORD pdwDispid );
//
// These 3 functions are supposted to replace the 3 functions
// in IPropertyCache. We will make these functions private and
// IPropertyCahce call these functions for now.
//
HRESULT DispatchLocateProperty( LPWSTR szPropertyName, PDWORD pdwDispid );
HRESULT DispatchGetProperty( DWORD dwDispid, VARIANT *pvarVal );
HRESULT DispatchPutProperty( DWORD dwDispid, VARIANT& varVal );
HRESULT LoadSchema( void ) /*++
Routine Description: Loads the schema information for this machine. It is essential that this method be called at the top of any routine that uses _pSchema. Since the schema cache is not very clever, we want to ensure that we don't load it until we absolutely have to.
Return Value:
Notes: --*/ { IMSAdminBase * pTempAdminBase = NULL; CCredentials localCred; //
// Get a reference to the schema for this machine.
//
// BUGBUG: The IMSAdminBase is held by the cache, and is not
// incremented when the interface is handed out here.
//
return (_pSchema == NULL ) ? ::InitServerInfo( localCred, _bstrServerName, &pTempAdminBase, &_pSchema ) : S_FALSE; }
DWORD _dwMaxProperties;
CCoreADsObject * _pCoreADsObject; DWORD _dwNumProperties; DWORD _dwCurrentIndex;
PPROPERTY _pProperties; BOOL _bPropsLoaded; DWORD _cb;
// _pSchema is lazy loaded. It is essential to call LoadSchema() at
// the start of any routine that attempts to use _pSchema.
IIsSchema * _pSchema; BSTR _bstrServerName; //
// Dynamic Dispid Table
//
PDISPPROPERTY _pDispProperties; DWORD _cbDisp; DWORD _dwDispMaxProperties;
};
|