WindowsXP-SP1/ds/adsi/include/adstype.h

504 lines
12 KiB
C

//+---------------------------------------------------------------------------
//
// 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