typedef struct { LPTSTR pszName; DWORD nIndex; } SEARCHENTRY; typedef HANDLE LDAP_SCHEMA_HANDLE; #define ATTR_USAGE_USERAPPLICATIONS 1 #define ATTR_USAGE_DIRECTORYOPERATION 2 #define ATTR_USAGE_DISTRIBUTEDOPERATION 3 #define ATTR_USAGE_DSAOPERATION 4 typedef struct _PropertyInfo { LPTSTR pszPropertyName; LPTSTR pszOID; LPTSTR pszSyntax; long lMaxRange; long lMinRange; BOOL fSingleValued; LPTSTR pszDescription; LPTSTR pszOIDSup; LPTSTR pszOIDEquality; LPTSTR pszOIDOrdering; LPTSTR pszOIDSubstr; BOOL fObsolete; BOOL fCollective; BOOL fDynamic; BOOL fNoUserModification; DWORD dwUsage; // contain ATTR_USAGE... defined above BOOL fProcessedSuperiorClass; } PROPERTYINFO, *PPROPERTYINFO; #define CLASS_TYPE_STRUCTURAL 1 // same as NT's definition #define CLASS_TYPE_ABSTRACT 2 #define CLASS_TYPE_AUXILIARY 3 typedef struct _ClassInfo { LPTSTR pszName; LPTSTR pszOID; DWORD dwType; // contain CLASS_TYPE... defined above const GUID *pCLSID; const GUID *pPrimaryInterfaceGUID; LPTSTR pszHelpFileName; long lHelpFileContext; LPTSTR pszDescription; BOOL fObsolete; LPTSTR *pOIDsSuperiorClasses; LPTSTR *pOIDsAuxClasses; int *pOIDsMustContain; // contain indexes into the aPropertiesSearchTable DWORD nNumOfMustContain; int *pOIDsMayContain; // contain indexes into the aPropertiesSearchTable DWORD nNumOfMayContain; int *pOIDsNotContain; // contain indexes into the aPropertiesSearchTable DWORD nNumOfNotContain; BOOL fProcessedSuperiorClasses; BOOL IsContainer; // can contain -1 if we have not processed it } CLASSINFO, *PCLASSINFO; typedef struct _SyntaxInfo { LPTSTR pszName; long lOleAutoDataType; } SYNTAXINFO, *PSYNTAXINFO; class SCHEMAINFO { private: DWORD _cRef; BOOL _fObsolete; public: BOOL fDefaultSchema; BOOL fAppearsV3; LPTSTR pszServerName; LPTSTR pszSubSchemaSubEntry; LPTSTR pszTime; LPWSTR pszUserName; SCHEMAINFO *Next; CLASSINFO *aClasses; DWORD nNumOfClasses; SEARCHENTRY *aClassesSearchTable; PROPERTYINFO *aProperties; DWORD nNumOfProperties; SEARCHENTRY *aPropertiesSearchTable; SCHEMAINFO(); ~SCHEMAINFO(); DWORD AddRef(); DWORD Release(); BOOL IsObsolete() { return _fObsolete; } BOOL IsRefCountZero() { return (_cRef == 0 ); } VOID MakeObsolete() { _fObsolete = TRUE; } VOID MakeCurrent() { _fObsolete = FALSE; } }; DWORD LdapGetSyntaxIdOfAttribute( LPWSTR pszStringSyntax ); HRESULT LdapGetSyntaxOfAttributeOnServer( LPTSTR pszServerPath, LPTSTR pszAttrName, DWORD *pdwSyntaxId, CCredentials& Credentials, DWORD dwPort, BOOL fFromServer = FALSE ); HRESULT LdapIsClassNameValidOnServer( LPTSTR pszServerPath, LPTSTR pszClassName, BOOL *pfValid, CCredentials& Credentials, DWORD dwPort ); HRESULT LdapGetSchemaObjectCount( LPTSTR pszServerPath, DWORD *pnNumOfClasses, DWORD *pnNumOfProperties, CCredentials& Credentials, DWORD dwPort ); HRESULT LdapGetSubSchemaSubEntryPath( LPTSTR pszServerPath, LPTSTR *ppszSubSchemaSubEntryPath, CCredentials& Credentials, DWORD dwPort ); HRESULT LdapMakeSchemaCacheObsolete( LPTSTR pszServerPath, CCredentials& Credentials, DWORD dwPort ); HRESULT SchemaOpen( IN LPTSTR pszServerPath, OUT LDAP_SCHEMA_HANDLE *phSchema, IN CCredentials& Credentials, DWORD dwPort ); HRESULT SchemaClose( IN OUT LDAP_SCHEMA_HANDLE *phSchema ); HRESULT SchemaAddRef( IN LDAP_SCHEMA_HANDLE hSchema ); HRESULT SchemaGetObjectCount( LDAP_SCHEMA_HANDLE hSchema, DWORD *pnNumOfClasses, DWORD *pnNumOfProperties ); HRESULT SchemaGetClassInfoByIndex( LDAP_SCHEMA_HANDLE hSchema, DWORD dwIndex, CLASSINFO **ppClassInfo ); HRESULT SchemaGetPropertyInfoByIndex( LDAP_SCHEMA_HANDLE hSchema, DWORD dwIndex, PROPERTYINFO **ppPropertyInfo ); HRESULT SchemaGetClassInfo( LDAP_SCHEMA_HANDLE hSchema, LPTSTR pszClassName, CLASSINFO **ppClassInfo ); HRESULT SchemaGetPropertyInfo( LDAP_SCHEMA_HANDLE hSchema, LPTSTR pszPropertyName, PROPERTYINFO **ppPropertyInfo ); HRESULT SchemaGetSyntaxOfAttribute( LDAP_SCHEMA_HANDLE hSchema, LPTSTR pszAttrName, DWORD *pdwSyntaxId ); HRESULT SchemaIsClassAContainer( LDAP_SCHEMA_HANDLE hSchema, LPTSTR pszClassName, BOOL *pfContainer ); HRESULT SchemaGetStringsFromStringTable( LDAP_SCHEMA_HANDLE hSchema, int *proplist, DWORD nCount, LPWSTR **paStrings );