windows-nt/Source/XPSP1/NT/ds/adsi/winnt/cprops.hxx
2020-09-26 16:20:57 +08:00

494 lines
9.4 KiB
C++

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