//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1995. // // File: // // Contents: // // Functions: // // History: // //---------------------------------------------------------------------------- #ifndef _ADSTYPE_H_INCLUDED_ #define _ADSTYPE_H_INCLUDED_ typedef enum { ADSTYPE_INVALID = 0, ADSTYPE_DN_STRING, ADSTYPE_CASE_EXACT_STRING, ADSTYPE_CASE_IGNORE_STRING, ADSTYPE_PRINTABLE_STRING, ADSTYPE_NUMERIC_STRING, ADSTYPE_BOOLEAN, ADSTYPE_INTEGER, ADSTYPE_OCTET_STRING, ADSTYPE_UTC_TIME, ADSTYPE_LARGE_INTEGER, ADSTYPE_PROV_SPECIFIC, ADSTYPE_OBJECT_CLASS, ADSTYPE_CASEIGNORE_LIST, ADSTYPE_OCTET_LIST, ADSTYPE_PATH, ADSTYPE_POSTALADDRESS, ADSTYPE_TIMESTAMP, ADSTYPE_BACKLINK, ADSTYPE_TYPEDNAME, ADSTYPE_HOLD, ADSTYPE_NETADDRESS, ADSTYPE_REPLICAPOINTER, ADSTYPE_FAXNUMBER, ADSTYPE_EMAIL, ADSTYPE_NT_SECURITY_DESCRIPTOR, ADSTYPE_UNKNOWN, ADSTYPE_DN_WITH_BINARY, ADSTYPE_DN_WITH_STRING } ADSTYPEENUM; typedef ADSTYPEENUM ADSTYPE; // // ADSTYPE_UNKNOWN was added to the end to be save and not break anyone. // If further types are added, this will be in the middle which is not // the best position but nonethesless functional. // typedef unsigned char BYTE, *LPBYTE, *PBYTE; // // ADS Case DN String syntax // typedef LPWSTR ADS_DN_STRING, * PADS_DN_STRING; // // ADS Case Exact String syntax // typedef LPWSTR ADS_CASE_EXACT_STRING, * PADS_CASE_EXACT_STRING; // // ADS Case Ignore String syntax // typedef LPWSTR ADS_CASE_IGNORE_STRING, *PADS_CASE_IGNORE_STRING; // // ADS Printable String syntax // typedef LPWSTR ADS_PRINTABLE_STRING, *PADS_PRINTABLE_STRING; // // ADS Numeric String syntax // // typedef LPWSTR ADS_NUMERIC_STRING, *PADS_NUMERIC_STRING; // // ADS Boolean syntax // typedef DWORD ADS_BOOLEAN, * LPNDS_BOOLEAN; // // Example: ADS Integer syntax // typedef DWORD ADS_INTEGER, *PADS_INTEGER; // // ADS Octet String syntax // typedef struct { DWORD dwLength; LPBYTE lpValue; } ADS_OCTET_STRING, *PADS_OCTET_STRING; // // ADS NT Security Descriptor syntax // typedef struct { DWORD dwLength; LPBYTE lpValue; } ADS_NT_SECURITY_DESCRIPTOR, *PADS_NT_SECURITY_DESCRIPTOR; // // ADS UTC Time Syntax // typedef SYSTEMTIME ADS_UTC_TIME, *PADS_UTC_TIME; typedef LARGE_INTEGER ADS_LARGE_INTEGER, *PADS_LARGE_INTEGER; // // ADS ClassName syntax // typedef LPWSTR ADS_OBJECT_CLASS, *PADS_OBJECT_CLASS; typedef struct { DWORD dwLength; LPBYTE lpValue; } ADS_PROV_SPECIFIC, *PADS_PROV_SPECIFIC; // // Extended Syntaxes for NDS // typedef struct _ADS_CASEIGNORE_LIST { struct _ADS_CASEIGNORE_LIST *Next; LPWSTR String; } ADS_CASEIGNORE_LIST, *PADS_CASEIGNORE_LIST; typedef struct _ADS_OCTET_LIST { struct _ADS_OCTET_LIST *Next; DWORD Length; BYTE * Data; } ADS_OCTET_LIST, *PADS_OCTET_LIST; typedef struct { DWORD Type; LPWSTR VolumeName; LPWSTR Path; } ADS_PATH, *PADS_PATH; typedef struct { LPWSTR PostalAddress[6]; // Value is limited to 6 lines, // 30 characters each. } ADS_POSTALADDRESS, *PADS_POSTALADDRESS; typedef struct { DWORD WholeSeconds; // Zero equals 12:00 midnight, January 1, 1970, UTC DWORD EventID; } ADS_TIMESTAMP, *PADS_TIMESTAMP; typedef struct { DWORD RemoteID; LPWSTR ObjectName; } ADS_BACKLINK, *PADS_BACKLINK; typedef struct { LPWSTR ObjectName; DWORD Level; DWORD Interval; } ADS_TYPEDNAME, *PADS_TYPEDNAME; typedef struct { LPWSTR ObjectName; DWORD Amount; } ADS_HOLD, *PADS_HOLD; typedef struct { DWORD AddressType; // 0 = IPX, DWORD AddressLength; BYTE * Address; } ADS_NETADDRESS, *PADS_NETADDRESS; typedef struct { LPWSTR ServerName; DWORD ReplicaType; DWORD ReplicaNumber; DWORD Count; PADS_NETADDRESS ReplicaAddressHints; } ADS_REPLICAPOINTER, *PADS_REPLICAPOINTER; typedef struct { LPWSTR TelephoneNumber; DWORD NumberOfBits; LPBYTE Parameters; } ADS_FAXNUMBER, *PADS_FAXNUMBER; typedef struct { LPWSTR Address; DWORD Type; } ADS_EMAIL, *PADS_EMAIL; typedef struct { DWORD dwLength; LPBYTE lpBinaryValue; LPWSTR pszDNString; } ADS_DN_WITH_BINARY, *PADS_DN_WITH_BINARY; typedef struct { LPWSTR pszStringValue; LPWSTR pszDNString; } ADS_DN_WITH_STRING, *PADS_DN_WITH_STRING; typedef struct _adsvalue{ ADSTYPE dwType; union { ADS_DN_STRING DNString; ADS_CASE_EXACT_STRING CaseExactString; ADS_CASE_IGNORE_STRING CaseIgnoreString; ADS_PRINTABLE_STRING PrintableString; ADS_NUMERIC_STRING NumericString; ADS_BOOLEAN Boolean; ADS_INTEGER Integer; ADS_OCTET_STRING OctetString; ADS_UTC_TIME UTCTime; ADS_LARGE_INTEGER LargeInteger; ADS_OBJECT_CLASS ClassName; ADS_PROV_SPECIFIC ProviderSpecific; PADS_CASEIGNORE_LIST pCaseIgnoreList; PADS_OCTET_LIST pOctetList; PADS_PATH pPath; PADS_POSTALADDRESS pPostalAddress; ADS_TIMESTAMP Timestamp; ADS_BACKLINK BackLink; PADS_TYPEDNAME pTypedName; ADS_HOLD Hold; PADS_NETADDRESS pNetAddress; PADS_REPLICAPOINTER pReplicaPointer; PADS_FAXNUMBER pFaxNumber; ADS_EMAIL Email; ADS_NT_SECURITY_DESCRIPTOR SecurityDescriptor; PADS_DN_WITH_BINARY pDNWithBinary; PADS_DN_WITH_STRING pDNWithString; }; }ADSVALUE, *PADSVALUE, *LPADSVALUE; typedef struct _ads_attr_info{ LPWSTR pszAttrName; DWORD dwControlCode; ADSTYPE dwADsType; PADSVALUE pADsValues; DWORD dwNumValues; } ADS_ATTR_INFO, *PADS_ATTR_INFO; typedef enum { ADS_SECURE_AUTHENTICATION = 0x00000001, ADS_USE_ENCRYPTION = 0x00000002, ADS_USE_SSL = 0x00000002, ADS_READONLY_SERVER = 0x00000004, ADS_PROMPT_CREDENTIALS = 0x00000008, ADS_NO_AUTHENTICATION = 0x00000010, ADS_FAST_BIND = 0x00000020, ADS_USE_SIGNING = 0x00000040, ADS_USE_SEALING = 0x00000080, ADS_USE_DELEGATION = 0x00000100, ADS_SERVER_BIND = 0x00000200, ADS_AUTH_RESERVED = 0x80000000 } ADS_AUTHENTICATION_ENUM; /* ADS attribute modification operations */ const int ADS_ATTR_CLEAR = 1; /* Clear all values from an attribute */ const int ADS_ATTR_UPDATE = 2; /* Update values on an attribute */ const int ADS_ATTR_APPEND = 3; /* Append values to an attribute */ const int ADS_ATTR_DELETE = 4; /* Delete values from an attribute */ typedef struct _ads_object_info{ LPWSTR pszRDN; LPWSTR pszObjectDN; LPWSTR pszParentDN; LPWSTR pszSchemaDN; LPWSTR pszClassName; } ADS_OBJECT_INFO, *PADS_OBJECT_INFO; typedef enum { ADS_STATUS_S_OK = 0, ADS_STATUS_INVALID_SEARCHPREF, ADS_STATUS_INVALID_SEARCHPREFVALUE } ADS_STATUSENUM; typedef ADS_STATUSENUM ADS_STATUS, *PADS_STATUS; typedef enum { ADS_DEREF_NEVER = 0, ADS_DEREF_SEARCHING = 1, ADS_DEREF_FINDING = 2, ADS_DEREF_ALWAYS = 3 } ADS_DEREFENUM; typedef enum { ADS_SCOPE_BASE = 0, ADS_SCOPE_ONELEVEL = 1, ADS_SCOPE_SUBTREE = 2 } ADS_SCOPEENUM; // Some more useful enums moved from other places typedef enum { ADSIPROP_ASYNCHRONOUS = 0x00000000, ADSIPROP_DEREF_ALIASES = 0x00000001, ADSIPROP_SIZE_LIMIT = 0x00000002, ADSIPROP_TIME_LIMIT = 0x00000003, ADSIPROP_ATTRIBTYPES_ONLY = 0x00000004, ADSIPROP_SEARCH_SCOPE = 0x00000005, ADSIPROP_TIMEOUT = 0x00000006, ADSIPROP_PAGESIZE = 0x00000007, ADSIPROP_PAGED_TIME_LIMIT = 0x00000008, ADSIPROP_CHASE_REFERRALS = 0x00000009, ADSIPROP_SORT_ON = 0x0000000a, ADSIPROP_CACHE_RESULTS = 0x0000000b, ADSIPROP_ADSIFLAG = 0x0000000c } ADS_PREFERENCES_ENUM; typedef enum { ADSI_DIALECT_LDAP = 0x00000000, ADSI_DIALECT_SQL = 0x00000001 } ADSI_DIALECT_ENUM; // // Values for ChaseReferral Option. typedef enum { ADS_CHASE_REFERRALS_NEVER = 0x00000000, ADS_CHASE_REFERRALS_SUBORDINATE = 0x00000020, ADS_CHASE_REFERRALS_EXTERNAL = 0x00000040, ADS_CHASE_REFERRALS_ALWAYS = (ADS_CHASE_REFERRALS_SUBORDINATE | ADS_CHASE_REFERRALS_EXTERNAL) } ADS_CHASE_REFERRALS_ENUM; typedef enum { ADS_SEARCHPREF_ASYNCHRONOUS, ADS_SEARCHPREF_DEREF_ALIASES, ADS_SEARCHPREF_SIZE_LIMIT, ADS_SEARCHPREF_TIME_LIMIT, ADS_SEARCHPREF_ATTRIBTYPES_ONLY, ADS_SEARCHPREF_SEARCH_SCOPE, ADS_SEARCHPREF_TIMEOUT, ADS_SEARCHPREF_PAGESIZE, ADS_SEARCHPREF_PAGED_TIME_LIMIT, ADS_SEARCHPREF_CHASE_REFERRALS, ADS_SEARCHPREF_SORT_ON, ADS_SEARCHPREF_CACHE_RESULTS, ADS_SEARCHPREF_DIRSYNC, ADS_SEARCHPREF_TOMBSTONE, ADS_SEARCHPREF_VLV, ADS_SEARCHPREF_ATTRIBUTE_QUERY, ADS_SEARCHPREF_SECURITY_MASK } ADS_SEARCHPREF_ENUM; typedef ADS_SEARCHPREF_ENUM ADS_SEARCHPREF; typedef struct ads_searchpref_info{ ADS_SEARCHPREF dwSearchPref; ADSVALUE vValue; ADS_STATUS dwStatus; } ADS_SEARCHPREF_INFO, *PADS_SEARCHPREF_INFO, *LPADS_SEARCHPREF_INFO; const LPWSTR ADS_DIRSYNC_COOKIE=L"fc8cb04d-311d-406c-8cb9-1ae8b843b418"; const LPWSTR ADS_VLV_RESPONSE =L"fc8cb04d-311d-406c-8cb9-1ae8b843b419"; typedef HANDLE ADS_SEARCH_HANDLE, *PADS_SEARCH_HANDLE; typedef struct ads_search_column { LPWSTR pszAttrName; ADSTYPE dwADsType; PADSVALUE pADsValues; DWORD dwNumValues; HANDLE hReserved; } ADS_SEARCH_COLUMN, *PADS_SEARCH_COLUMN; typedef struct _ads_attr_def { LPWSTR pszAttrName; ADSTYPE dwADsType; DWORD dwMinRange; DWORD dwMaxRange; BOOL fMultiValued; }ADS_ATTR_DEF, *PADS_ATTR_DEF; typedef struct _ads_class_def { LPWSTR pszClassName; DWORD dwMandatoryAttrs; LPWSTR *ppszMandatoryAttrs; DWORD optionalAttrs; LPWSTR **ppszOptionalAttrs; DWORD dwNamingAttrs; LPWSTR **ppszNamingAttrs; DWORD dwSuperClasses; LPWSTR **ppszSuperClasses; BOOL fIsContainer; }ADS_CLASS_DEF, *PADS_CLASS_DEF; typedef struct _ads_sortkey { LPWSTR pszAttrType; LPWSTR pszReserved; BOOLEAN fReverseorder; } ADS_SORTKEY, *PADS_SORTKEY; typedef struct _ads_vlv { DWORD dwBeforeCount; DWORD dwAfterCount; DWORD dwOffset; DWORD dwContentCount; LPWSTR pszTarget; DWORD dwContextIDLength; LPBYTE lpContextID; } ADS_VLV, *PADS_VLV; // // Valid dispids for extension. // // - Max 24 bits. // - 0 reserved for DISPID_VALUE dealt with by aggregator. // - DISPID_UNKNOWN (-1) also allowed. // - Others -ve dispids dealt with by aggregator only. // const int ADS_EXT_MINEXTDISPID = 1 ; const int ADS_EXT_MAXEXTDISPID = 16777215 ; // // dwCodes for IADsExtension::Operate // const int ADS_EXT_INITCREDENTIALS = 1 ; const int ADS_EXT_INITIALIZE_COMPLETE = 2 ; #endif