|
|
//---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1995
//
// File: cprops.hxx
//
// Contents:
//
// History: 17-June-1996 ramv (Ram Viswanathan) Created.
//
//----------------------------------------------------------------------------
typedef struct _schema_prop{ WCHAR szPropertyName[MAX_PATH]; DWORD dwFlags; DWORD dwNumValues; // Number of values
DWORD dwSyntaxId; // Nt Syntax Id
DWORD dwInfoLevel; // Info Level on which to do GetInfo
}SCHEMA_PROP, *PSCHEMA_PROP;
typedef struct _ntproperty{ LPWSTR szPropertyName; DWORD dwFlags; DWORD dwNumValues; // Number of values
DWORD dwSyntaxId; // Nt Syntax Id
PNTOBJECT pNtObject; // Pointer to the NT Object
}PROPERTY, *PPROPERTY;
//
// Dynamic Dispid Table
//
typedef struct _dispproperty { LPWSTR szPropertyName; } 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_NTOBJECT(pProperty) pProperty->pNtObject
#define PROPERTY_FLAGS(pProperty) pProperty->dwFlags
#define PROPERTY_INFOLEVEL(pProperty) pProperty->dwInfoLevel
//
// Schema Status flags
//
#define PROPERTY_VALID 0x1
#define PROPERTY_MODIFIED 0x2
#define PROPERTY_READABLE 0x4
#define PROPERTY_WRITEABLE 0x8
#define PROPERTY_RW PROPERTY_READABLE | PROPERTY_WRITEABLE
#define PROPERTY_SETTABLE_ON_CREATE_ONLY 0x20
#define CACHE_PROPERTY_MODIFIED 0x1
//
// Dynamic Dispid Table
//
#define DISPATCH_NAME(pDispProperty) \
( (pDispProperty)->szPropertyName)
#define DISPATCH_PROPERTY_NAME(dwDispid) \
( (_pDispProperties+(dwDispid))->szPropertyName )
#define DISPATCH_INDEX_VALID(dwDispid) \
( (((LONG)(dwDispid)) >=0 && (dwDispid) <_dwDispMaxProperties) ? TRUE : FALSE)
class CPropertyCache : public IPropertyCache {
public:
HRESULT CPropertyCache:: addproperty( LPWSTR szPropertyName, DWORD dwSyntaxId, DWORD dwNumValues, PNTOBJECT pNtObject );
HRESULT CPropertyCache:: updateproperty( LPWSTR szPropertyName, DWORD dwSyntaxId, DWORD dwNumValues, PNTOBJECT pNtObject, BOOL fExplicit );
HRESULT CPropertyCache:: findproperty( LPWSTR szPropertyName, PDWORD pdwIndex );
HRESULT CPropertyCache:: deleteproperty( DWORD dwIndex );
HRESULT CPropertyCache:: getproperty( LPWSTR szPropertyName, PDWORD pdwSyntaxId, PDWORD pdwNumValues, PNTOBJECT * ppNtObject, BOOL *pfModified = NULL // indicates if the property was
// modified or not in cache. Used by UMI.
);
HRESULT CPropertyCache:: unboundgetproperty( LPWSTR szPropertyName, PDWORD pdwSyntaxId, PDWORD pdwNumValues, PNTOBJECT * ppNtObject );
HRESULT CPropertyCache:: unboundgetproperty( DWORD dwIndex, PDWORD pdwSyntaxId, PDWORD pdwNumValues, PNTOBJECT * ppNtObject );
HRESULT CPropertyCache:: marshallgetproperty( LPWSTR szPropertyName, PDWORD pdwSyntaxId, PDWORD pdwNumValues, PNTOBJECT * ppNtObject );
HRESULT CPropertyCache:: putproperty( LPWSTR szPropertyName, DWORD dwSyntaxId, DWORD dwNumValues, PNTOBJECT pNtObject, BOOL fMarkAsClean = FALSE );
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( PPROPERTYINFO pSchemaClassProps, DWORD dwNumProperties, CCoreADsObject FAR * pCoreADsObject, CPropertyCache FAR * FAR * ppPropertyCache );
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 );
HRESULT GetPropNames( UMI_PROPERTY_VALUES **pProps );
void ClearModifiedFlags(void);
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 );
DWORD _dwMaxProperties;
CCoreADsObject * _pCoreADsObject; PPROPERTYINFO _pSchemaClassProps; DWORD _dwNumProperties; DWORD _dwCurrentIndex;
PPROPERTY _pProperties; DWORD _cb;
//
// Dynamic Dispid Table
//
PDISPPROPERTY _pDispProperties; DWORD _cbDisp; DWORD _dwDispMaxProperties;
};
HRESULT ValidatePropertyinSchemaClass( PPROPERTYINFO pSchemaClassProps, DWORD dwNumProperties, LPWSTR pszPropName, PDWORD pdwSyntaxId );
STDMETHODIMP GenericGetPropertyManager( CPropertyCache * pPropertyCache, THIS_ BSTR bstrName, VARIANT FAR* pvProp );
STDMETHODIMP GenericPutPropertyManager( CPropertyCache * pPropertyCache, PPROPERTYINFO pSchemaProps, DWORD dwSchemaPropSize, THIS_ BSTR bstrName, VARIANT vProp, BOOL fCheckWriteAccess = TRUE );
HRESULT ValidateIfWriteableProperty( PPROPERTYINFO pSchemaClassProps, DWORD dwNumProperties, LPWSTR pszPropName );
HRESULT GetPropertyInfoLevel( LPWSTR pszPropName, PPROPERTYINFO pSchemaClassProps, DWORD dwNumProperties, PDWORD pdwInfoLevel );
STDMETHODIMP GenericGetExPropertyManager( DWORD dwObjectState, CPropertyCache * pPropertyCache, THIS_ BSTR bstrName, VARIANT FAR* pvProp );
STDMETHODIMP GenericPutExPropertyManager( CPropertyCache * pPropertyCache, PPROPERTYINFO pSchemaProps, DWORD dwSchemaPropSize, THIS_ BSTR bstrName, VARIANT vProp );
HRESULT GenericPropCountPropertyManager( CPropertyCache * pPropertyCache, PLONG plCount );
HRESULT GenericNextPropertyManager( CPropertyCache * pPropertyCache, VARIANT FAR *pVariant );
HRESULT GenericSkipPropertyManager( CPropertyCache * pPropertyCache, ULONG cElements );
HRESULT GenericResetPropertyManager( CPropertyCache * pPropertyCache );
HRESULT GenericDeletePropertyManager( CPropertyCache * pPropertyCache, VARIANT varEntry );
HRESULT GenericGetPropItemPropertyManager( CPropertyCache * pPropertyCache, DWORD dwObjectState, BSTR bstrName, LONG lnADsType, VARIANT * pVariant );
HRESULT GenericPutPropItemPropertyManager( CPropertyCache * pPropertyCache, PPROPERTYINFO pSchemaProps, DWORD dwSchemaPropSize, VARIANT varData );
HRESULT GenericPurgePropertyManager( CPropertyCache * pPropertyCache );
HRESULT GenericItemPropertyManager( CPropertyCache * pPropertyCache, DWORD dwObjectState, VARIANT varIndex, VARIANT *pVariant );
HRESULT ConvertNtValuesToVariant( BSTR bstrName, LPNTOBJECT pNtSrcObjects, DWORD dwNumValues, VARIANT * pVariant );
HRESULT ConvertVariantToVariantArray( VARIANT varData, VARIANT ** ppVarArray, DWORD * pdwNumValues );
void FreeVariantArray( VARIANT * pVarArray, DWORD dwNumValues );
HRESULT ConvertVariantToNtValues( VARIANT varData, PPROPERTYINFO pSchemaProps, DWORD dwSchemaPropSize, LPWSTR szPropertyName, PNTOBJECT *ppNtDestObjects, PDWORD pdwNumValues, PDWORD pdwSyntaxId, PDWORD pdwControlCode );
|