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

100 lines
3.4 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1997.
//
// File: iprops.hxx
//
// Contents: Generalized property cache interfaces.
//
// History: 07-21-97 t-blakej Created.
//
//----------------------------------------------------------------------------
#ifndef __IPROPERTYCACHE_HXX__
#define __IPROPERTYCACHE_HXX__
//
// This is an "interface" that encapsulates the methods of an ADSI
// property cache that need to be called from the dispatch manager.
// This is *not* a COM interface, just a regular C++ struct with all
// fully virtual methods.
//
struct IPropertyCache {
//
// Find a property by name in the property cache.
//
// If the property doesn't exist in the cache, the cache should make
// sure the property exists for this object and add a "blank" entry for
// this property. "pdwIndex" should be set to an integer (such as an
// array index) which can easily identify this property. If this
// property doesn't exist for this object (i.e. not in the schema for
// this object), this should return an error.
//
// Note that the returned index is used to generate a Automation
// DISPID, and its value is cached by VB. So if a property is added to
// the cache, it should not be erased or moved (e.g. have its index
// changed) for the lifetime of the object. Also, due to limitations
// of the dispatch manager, the index must be less than 65536.
//
virtual HRESULT
IPropertyCache::locateproperty(
LPWSTR szPropertyName,
PDWORD pdwIndex
) = 0;
//
// Get the value of a property from the property cache.
//
// If there is no data in the property cache, the cache should read the
// object's data in from the server, and cache all unmodified
// properties. If this property has no data on the server, this should
// return E_ADS_PROPERTY_NOT_FOUND. If the passed-in index (which is
// the same index as returned from locateproperty()) is invalid, this
// should return DISP_E_MEMBERNOTFOUND.
//
virtual HRESULT
IPropertyCache::getproperty(
DWORD dwIndex,
VARIANT *pVarResult,
CCredentials &Credentials
) = 0;
//
// Set the value of a property into the property cache.
//
// If the passed-in VARIANT is of the wrong type for this property,
// this should return E_ADS_CANT_CONVERT_DATATYPE. If the passed-in
// index (which is the same index as returned from locateproperty()) is
// invalid, this should return DISP_E_MEMBERNOTFOUND.
//
virtual HRESULT
IPropertyCache::putproperty(
DWORD dwIndex,
VARIANT varValue
) = 0;
};
//
// This is an "interface" that encapsulates the methods of an ADSI object
// that need to be called from the property cache. This is *not* a COM
// interface, just a regular C++ struct with all fully virtual methods.
//
// This should be implemented by any object that contains a property cache;
// the IGetAttributeSyntax interface pointer of the container is passed to
// the createpropertycache() function.
//
struct IGetAttributeSyntax {
virtual HRESULT
GetAttributeSyntax(
LPWSTR szPropertyName,
PDWORD pdwSyntaxID
) = 0;
};
#define DECLARE_IGetAttributeSyntax_METHODS \
virtual HRESULT \
GetAttributeSyntax(LPWSTR szPropertyName, PDWORD pdwSyntaxID);
#endif // __IPROPERTYCACHE_HXX__