/*
 *  iads.h      Active Directory Service (ADS) interfaces
 *
 * =========================================================================
 *
 *                          Open Watcom Project
 *
 * Copyright (c) 2004-2026 The Open Watcom Contributors. All Rights Reserved.
 *
 *    This file is automatically generated. Do not edit directly.
 *
 * =========================================================================
 */

#include <rpc.h>
#include <rpcndr.h>

#ifndef __iads_h__
#define __iads_h__

#ifndef _ENABLE_AUTODEPEND
 #pragma read_only_file
#endif

#ifdef __cplusplus
extern "C" {
#endif

/* String data types */
typedef LPWSTR  ADS_DN_STRING;
typedef LPWSTR  *PADS_DN_STRING;
typedef LPWSTR  ADS_CASE_EXACT_STRING;
typedef LPWSTR  *PADS_CASE_EXACT_STRING;
typedef LPWSTR  ADS_CASE_IGNORE_STRING;
typedef LPWSTR  *PADS_CASE_IGNORE_STRING;
typedef LPWSTR  ADS_PRINTABLE_STRING;
typedef LPWSTR  *PADS_PRINTABLE_STRING;
typedef LPWSTR  ADS_NUMERIC_STRING;
typedef LPWSTR  *PADS_NUMERIC_STRING;
typedef LPWSTR  ADS_OBJECT_CLASS;
typedef LPWSTR  *PADS_OBJECT_CLASS;

/* Primitive data types */
typedef DWORD           ADS_BOOLEAN;
typedef DWORD           *LPNDS_BOOLEAN;
typedef DWORD           ADS_INTEGER;
typedef DWORD           *PADS_INTEGER;
typedef SYSTEMTIME      ADS_UTC_TIME;
typedef SYSTEMTIME      *PADS_UTC_TIME;
typedef LARGE_INTEGER   ADS_LARGE_INTEGER;
typedef LARGE_INTEGER   *PADS_LARGE_INTEGER;
typedef HANDLE          ADS_SEARCH_HANDLE;
typedef HANDLE          *PADS_SEARCH_HANDLE;

/* ADS attribute control codes */
#define ADS_ATTR_CLEAR  1L
#define ADS_ATTR_UPDATE 2L
#define ADS_ATTR_APPEND 3L
#define ADS_ATTR_DELETE 4L

/* ADS GUID strings */
#define ADS_DIRSYNC_COOKIE  L"FC8CB04D-311D-406C-8CB9-1AE8B843B418"
#define ADS_VLV_RESPONSE    L"FC8CB04D-311D-406C-8CB9-1AE8B843B419"

/* ADS extended dispatch identifiers */
#define ADS_EXT_MINEXTDISPID        1
#define ADS_EXT_MAXEXTDISPID        16777215
#define ADS_EXT_INITCREDENTIALS     1
#define ADS_EXT_INITIALIZE_COMPLETE 2

/* ADS types */
typedef enum {
    ADSTYPE_INVALID                 = 0,
    ADSTYPE_DN_STRING               = 1,
    ADSTYPE_CASE_EXACT_STRING       = 2,
    ADSTYPE_CASE_IGNORE_STRING      = 3,
    ADSTYPE_PRINTABLE_STRING        = 4,
    ADSTYPE_NUMERIC_STRING          = 5,
    ADSTYPE_BOOLEAN                 = 6,
    ADSTYPE_INTEGER                 = 7,
    ADSTYPE_OCTET_STRING            = 8,
    ADSTYPE_UTC_TIME                = 9,
    ADSTYPE_LARGE_INTEGER           = 10,
    ADSTYPE_PROV_SPECIFIC           = 11,
    ADSTYPE_OBJECT_CLASS            = 12,
    ADSTYPE_CASEIGNORE_LIST         = 13,
    ADSTYPE_OCTET_LIST              = 14,
    ADSTYPE_PATH                    = 15,
    ADSTYPE_POSTALADDRESS           = 16,
    ADSTYPE_TIMESTAMP               = 17,
    ADSTYPE_BACKLINK                = 18,
    ADSTYPE_TYPEDNAME               = 19,
    ADSTYPE_HOLD                    = 20,
    ADSTYPE_NETADDRESS              = 21,
    ADSTYPE_REPLICAPOINTER          = 22,
    ADSTYPE_FAXNUMBER               = 23,
    ADSTYPE_EMAIL                   = 24,
    ADSTYPE_NT_SECURITY_DESCRIPTOR  = 25,
    ADSTYPE_UNKNOWN                 = 26,
    ADSTYPE_DN_WITH_BINARY          = 27,
    ADSTYPE_DN_WITH_STRING          = 28
} ADSTYPEENUM;
typedef ADSTYPEENUM ADSTYPE;

/* ADS octet string */
typedef struct {
    DWORD   dwLength;
    LPBYTE  lpValue;
} ADS_OCTET_STRING;
typedef ADS_OCTET_STRING    *PADS_OCTET_STRING;

/* ADS NT security descriptor */
typedef struct {
    DWORD   dwLength;
    LPBYTE  lpValue;
} ADS_NT_SECURITY_DESCRIPTOR;
typedef ADS_NT_SECURITY_DESCRIPTOR  *PADS_NT_SECURITY_DESCRIPTOR;

/* ADS provider-specific information */
typedef struct {
    DWORD   dwLength;
    LPBYTE  lpValue;
} ADS_PROV_SPECIFIC;
typedef ADS_PROV_SPECIFIC   *PADS_PROV_SPECIFIC;

/* ADS case ignore list */
typedef struct _ADS_CASEIGNORE_LIST{
    struct _ADS_CASEIGNORE_LIST *Next;
    LPWSTR                      String;
} ADS_CASEIGNORE_LIST;
typedef ADS_CASEIGNORE_LIST *PADS_CASEIGNORE_LIST;

/* ADS octet list */
typedef struct _ADS_OCTET_LIST {
    struct _ADS_OCTET_LIST  *Next;
    DWORD                   Length;
    BYTE                    *Data;
} ADS_OCTET_LIST;
typedef ADS_OCTET_LIST  *PADS_OCTET_LIST;

/* ADS path */
typedef struct {
    DWORD   Type;
    LPWSTR  VolumeName;
    LPWSTR  Path;
} ADS_PATH;
typedef ADS_PATH    *PADS_PATH;

/* ADS postal address */
typedef struct {
    LPWSTR  PostalAddress[6];
} ADS_POSTALADDRESS;
typedef ADS_POSTALADDRESS   *PADS_POSTALADDRESS;

/* ADS timestamp */
typedef struct {
    DWORD   WholeSeconds;
    DWORD   EventID;
} ADS_TIMESTAMP;
typedef ADS_TIMESTAMP   *PADS_TIMESTAMP;

/* ADS backlink */
typedef struct {
    DWORD   RemoteID;
    LPWSTR  ObjectName;
} ADS_BACKLINK;
typedef ADS_BACKLINK    *PADS_BACKLINK;

/* ADS typed name */
typedef struct {
    LPWSTR  ObjectName;
    DWORD   Level;
    DWORD   Interval;
} ADS_TYPEDNAME;
typedef ADS_TYPEDNAME   *PADS_TYPEDNAME;

/* ADS hold */
typedef struct {
    LPWSTR  ObjectName;
    DWORD   Amount;
} ADS_HOLD;
typedef ADS_HOLD    *PADS_HOLD;

/* ADS network address */
typedef struct {
    DWORD   AddressType;
    DWORD   AddressLength;
    BYTE    *Address;
} ADS_NETADDRESS;
typedef ADS_NETADDRESS  *PADS_NETADDRESS;

/* ADS replica pointer */
typedef struct {
    LPWSTR          ServerName;
    DWORD           ReplicaType;
    DWORD           ReplicaNumber;
    DWORD           Count;
    PADS_NETADDRESS ReplicaAddressHints;
} ADS_REPLICAPOINTER;
typedef ADS_REPLICAPOINTER  *PADS_REPLICAPOINTER;

/* ADS fax number */
typedef struct {
    LPWSTR  TelephoneNumber;
    DWORD   NumberOfBits;
    LPBYTE  Parameters;
} ADS_FAXNUMBER;
typedef ADS_FAXNUMBER   *PADS_FAXNUMBER;

/* ADS email */
typedef struct {
    LPWSTR  Address;
    DWORD   Type;
} ADS_EMAIL;
typedef ADS_EMAIL   *PADS_EMAIL;

/* ADS distinguished name with binary */
typedef struct {
    DWORD   dwLength;
    LPBYTE  lpBinaryValue;
    LPWSTR  pszDNString;
} ADS_DN_WITH_BINARY;
typedef ADS_DN_WITH_BINARY   *PADS_DN_WITH_BINARY;

/* ADS distinguished name with string */
typedef struct {
    LPWSTR  pszStringValue;
    LPWSTR  pszDNString;
} ADS_DN_WITH_STRING;
typedef ADS_DN_WITH_STRING  *PADS_DN_WITH_STRING;

/* ADS value */
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;
typedef ADSVALUE    *PADSVALUE;
typedef ADSVALUE    *LPADSVALUE;

/* ADS attribute information */
typedef struct _ads_attr_info {
    LPWSTR      pszAttrName;
    DWORD       dwControlCode;
    ADSTYPE     dwADsType;
    PADSVALUE   pADsValues;
    DWORD       dwNumValues;
} ADS_ATTR_INFO;
typedef ADS_ATTR_INFO   *PADS_ATTR_INFO;

/* ADS authentication flags */
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_NO_REFERRAL_CHASING     = 0x00000400
} ADS_AUTHENTICATION_ENUM;

/* ADS object information */
typedef struct _ads_object_info {
    LPWSTR  pszRDN;
    LPWSTR  pszObjectDN;
    LPWSTR  pszParentDN;
    LPWSTR  pszSchemaDN;
    LPWSTR  pszClassName;
} ADS_OBJECT_INFO;
typedef ADS_OBJECT_INFO *PADS_OBJECT_INFO;

/* ADS status codes */
typedef enum {
    ADS_STATUS_S_OK                     = 0,
    ADS_STATUS_INVALID_SEARCHPREF       = 1,
    ADS_STATUS_INVALID_SEARCHPREFVALUE  = 2
} ADS_STATUSENUM;
typedef ADS_STATUSENUM  ADS_STATUS;
typedef ADS_STATUSENUM  *PADS_STATUS;

/* ADS dereference options */
typedef enum {
    ADS_DEREF_NEVER     = 0,
    ADS_DEREF_SEARCHING = 1,
    ADS_DEREF_FINDING   = 2,
    ADS_DEREF_ALWAYS    = 3
} ADS_DEREFENUM;

/* ADS scopes */
typedef enum {
    ADS_SCOPE_BASE      = 0,
    ADS_SCOPE_ONELEVEL  = 1,
    ADS_SCOPE_SUBTREE   = 2
} ADS_SCOPEENUM;

/* ADS preferences */
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;

/* ADS dialects */
typedef enum {
    ADSI_DIALECT_LDAP   = 0x00000000,
    ADSI_DIALECT_SQL    = 0x00000001
} ADSI_DIALECT_ENUM;

/* ADS chase referral flags */
typedef enum {
    ADS_CHASE_REFERRALS_NEVER       = 0x00000000,
    ADS_CHASE_REFERRALS_SUBORDINATE = 0x00000020,
    ADS_CHASE_REFERRALS_EXTERNAL    = 0x00000040,
    ADS_CHASE_REFERRALS_ALWAYS      = 0x00000060
} ADS_CHASE_REFERRALS_ENUM;

/* ADS search preferences */
typedef enum {
    ADS_SEARCHPREF_ASYNCHRONOUS     = 0,
    ADS_SEARCHPREF_DEREF_ALIASES    = 1,
    ADS_SEARCHPREF_SIZE_LIMIT       = 2,
    ADS_SEARCHPREF_TIME_LIMIT       = 3,
    ADS_SEARCHPREF_ATTRIBTYPES_ONLY = 4,
    ADS_SEARCHPREF_SEARCH_SCOPE     = 5,
    ADS_SEARCHPREF_TIMEOUT          = 6,
    ADS_SEARCHPREF_PAGESIZE         = 7,
    ADS_SEARCHPREF_PAGED_TIME_LIMIT = 8,
    ADS_SEARCHPREF_CHASE_REFERRALS  = 9,
    ADS_SEARCHPREF_SORT_ON          = 10,
    ADS_SEARCHPREF_CACHE_RESULTS    = 11,
    ADS_SEARCHPREF_DIRSYNC          = 12,
    ADS_SEARCHPREF_TOMBSTONE        = 13,
    ADS_SEARCHPREF_VLV              = 14,
    ADS_SEARCHPREF_ATTRIBUTE_QUERY  = 15,
    ADS_SEARCHPREF_SECURITY_MASK    = 16,
    ADS_SEARCHPREF_DIRSYNC_FLAG     = 17,
    ADS_SEARCHPREF_EXTENDED_DN      = 18
} ADS_SEARCHPREF_ENUM;
typedef ADS_SEARCHPREF_ENUM ADS_SEARCHPREF;

/* ADS password encodings */
typedef enum {
    ADS_PASSWORD_ENCODE_REQUIRE_SSL = 0,
    ADS_PASSWORD_ENCODE_CLEAR       = 1
} ADS_PASSWORD_ENCODING_ENUM;

/* ADS search preference information */
typedef struct ads_searchpref_info {
    ADS_SEARCHPREF  dwSearchPref;
    ADSVALUE        vValue;
    ADS_STATUS      dwStatus;
} ADS_SEARCHPREF_INFO;
typedef ADS_SEARCHPREF_INFO *PADS_SEARCHPREF_INFO;
typedef ADS_SEARCHPREF_INFO *LPADS_SEARCHPREF_INFO;

/* ADS search column */
typedef struct ads_search_column {
    LPWSTR      pszAttrName;
    ADSTYPE     dwADsType;
    PADSVALUE   pADsValues;
    DWORD       dwNumValues;
    HANDLE      hReserved;
} ADS_SEARCH_COLUMN;
typedef ADS_SEARCH_COLUMN   *PADS_SEARCH_COLUMN;

/* ADS attribute definition */
typedef struct _ads_attr_def {
    LPWSTR  pszAttrName;
    ADSTYPE dwADsType;
    DWORD   dwMinRange;
    DWORD   dwMaxRange;
    BOOL    fMultiValued;
} ADS_ATTR_DEF;
typedef ADS_ATTR_DEF    *PADS_ATTR_DEF;

/* ADS class definition */
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;
typedef ADS_CLASS_DEF   *PADS_CLASS_DEF;

/* ADS sort key */
typedef struct _ads_sortkey {
    LPWSTR  pszAttrType;
    LPWSTR  pszReserved;
    BOOLEAN fReverseorder;
} ADS_SORTKEY;
typedef ADS_SORTKEY *PADS_SORTKEY;

/* ADS virtual list view */
typedef struct _ads_vlv {
    DWORD   dwBeforeCount;
    DWORD   dwAfterCount;
    DWORD   dwOffset;
    DWORD   dwContentCount;
    LPWSTR  pszTarget;
    DWORD   dwContextIDLength;
    LPBYTE  lpContextID;
} ADS_VLV;
typedef ADS_VLV *PADS_VLV;

/* ADS property operations */
typedef enum {
    ADS_PROPERTY_CLEAR  = 1,
    ADS_PROPERTY_UPDATE = 2,
    ADS_PROPERTY_SEARCH = 3,
    ADS_PROPERTY_DELETE = 4
} ADS_PROPERTY_OPERATION_ENUM;

/* ADS system flags */
typedef enum {
    ADS_SYSTEMFLAG_DISALLOW_DELETE              = 0x80000000,
    ADS_SYSTEMFLAG_CONFIG_ALLOW_RENAME          = 0x40000000,
    ADS_SYSTEMFLAG_CONFIG_ALLOW_MOVE            = 0x20000000,
    ADS_SYSTEMFLAG_CONFIG_ALLOW_LIMITED_MOVE    = 0x10000000,
    ADS_SYSTEMFLAG_DOMAIN_DISALLOW_RENAME       = 0x08000000,
    ADS_SYSTEMFLAG_DOMAIN_DISALLOW_MOVE         = 0x04000000,
    ADS_SYSTEMFLAG_CR_NTDS_NC                   = 0x00000001,
    ADS_SYSTEMFLAG_CR_NTDS_DOMAIN               = 0x00000002,
    ADS_SYSTEMFLAG_ATTR_NOT_REPLICATED          = 0x00000001,
    ADS_SYSTEMFLAG_ATTR_IS_CONSTRUCTED          = 0x00000004
} ADS_SYSTEMFLAG_ENUM;

/* ADS group types */
typedef enum {
    ADS_GROUP_TYPE_GLOBAL_GROUP         = 0x00000002,
    ADS_GROUP_TYPE_DOMAIN_LOCAL_GROUP   = 0x00000004,
    ADS_GROUP_TYPE_LOCAL_GROUP          = 0x00000004,
    ADS_GROUP_TYPE_UNIVERSAL_GROUP      = 0x00000008,
    ADS_GROUP_TYPE_SECURITY_ENABLED     = 0x80000000
} ADS_GROUP_TYPE_ENUM;

/* ADS user flags */
typedef enum ADS_USER_FLAG {
    ADS_UF_SCRIPT                           = 0x00000001,
    ADS_UF_ACCOUNTDISABLE                   = 0x00000002,
    ADS_UF_HOMEDIR_REQUIRED                 = 0x00000008,
    ADS_UF_LOCKOUT                          = 0x00000010,
    ADS_UF_PASSWD_NOTREQD                   = 0x00000020,
    ADS_UF_PASSWD_CANT_CHANGE               = 0x00000040,
    ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED  = 0x00000080,
    ADS_UF_TEMP_DUPLICATE_ACCOUNT           = 0x00000100,
    ADS_UF_NORMAL_ACCOUNT                   = 0x00000200,
    ADS_UF_INTERDOMAIN_TRUST_ACCOUNT        = 0x00000800,
    ADS_UF_WORKSTATION_TRUST_ACCOUNT        = 0x00001000,
    ADS_UF_SERVER_TRUST_ACCOUNT             = 0x00002000,
    ADS_UF_DONT_EXPIRE_PASSWD               = 0x00010000,
    ADS_UF_MNS_LOGON_ACCOUNT                = 0x00020000,
    ADS_UF_SMARTCARD_REQUIRED               = 0x00040000,
    ADS_UF_TRUSTED_FOR_DELEGATION           = 0x00080000,
    ADS_UF_NOT_DELEGATED                    = 0x00100000,
    ADS_UF_USE_DES_KEY_ONLY                 = 0x00200000,
    ADS_UF_DONT_REQUIRE_PREAUTH             = 0x00400000,
    ADS_UF_PASSWORD_EXPIRED                 = 0x00800000,
    ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION   = 0x01000000
} ADS_USER_FLAG_ENUM;

/* ADS rights */
typedef enum {
    ADS_RIGHT_DELETE                    = 0x00010000,
    ADS_RIGHT_READ_CONTROL              = 0x00020000,
    ADS_RIGHT_WRITE_DAC                 = 0x00040000,
    ADS_RIGHT_WRITE_OWNER               = 0x00080000,
    ADS_RIGHT_SYNCHRONIZE               = 0x00100000,
    ADS_RIGHT_ACCESS_SYSTEM_SECURITY    = 0x01000000,
    ADS_RIGHT_GENERIC_READ              = 0x80000000,
    ADS_RIGHT_GENERIC_WRITE             = 0x40000000,
    ADS_RIGHT_GENERIC_EXECUTE           = 0x20000000,
    ADS_RIGHT_GENERIC_ALL               = 0x10000000,
    ADS_RIGHT_DS_CREATE_CHILD           = 0x00000001,
    ADS_RIGHT_DS_DELETE_CHILD           = 0x00000002,
    ADS_RIGHT_ACTRL_DS_LIST             = 0x00000004,
    ADS_RIGHT_DS_SELF                   = 0x00000008,
    ADS_RIGHT_DS_READ_PROP              = 0x00000010,
    ADS_RIGHT_DS_WRITE_PROP             = 0x00000020,
    ADS_RIGHT_DS_DELETE_TREE            = 0x00000040,
    ADS_RIGHT_DS_LIST_OBJECT            = 0x00000080,
    ADS_RIGHT_DS_CONTROL_ACCESS         = 0x00000100
} ADS_RIGHTS_ENUM;

/* ADS ACE types */
typedef enum {
    ADS_ACETYPE_ACCESS_ALLOWED                  = 0x00000000,
    ADS_ACETYPE_ACCESS_DENIED                   = 0x00000001,
    ADS_ACETYPE_SYSTEM_AUDIT                    = 0x00000002,
    ADS_ACETYPE_ACCESS_ALLOWED_OBJECT           = 0x00000005,
    ADS_ACETYPE_ACCESS_DENIED_OBJECT            = 0x00000006,
    ADS_ACETYPE_SYSTEM_AUDIT_OBJECT             = 0x00000007,
    ADS_ACETYPE_SYSTEM_ALARM_OBJECT             = 0x00000008,
    ADS_ACETYPE_ACCESS_ALLOWED_CALLBACK         = 0x00000009,
    ADS_ACETYPE_ACCESS_DENIED_CALLBACK          = 0x0000000A,
    ADS_ACETYPE_ACCESS_ALLOWED_CALLBACK_OBJECT  = 0x0000000B,
    ADS_ACETYPE_ACCESS_DENIED_CALLBACK_OBJECT   = 0x0000000C,
    ADS_ACETYPE_SYSTEM_AUDIT_CALLBACK           = 0x0000000D,
    ADS_ACETYPE_SYSTEM_ALARM_CALLBACK           = 0x0000000E,
    ADS_ACETYPE_SYSTEM_AUDIT_CALLBACK_OBJECT    = 0x0000000F,
    ADS_ACETYPE_SYSTEM_ALARM_CALLBACK_OBJECT    = 0x00000010
} ADS_ACETYPE_ENUM;

/* ADS ACE flags */
typedef enum {
    ADS_ACEFLAG_INHERIT_ACE                 = 0x00000002,
    ADS_ACEFLAG_NO_PROPAGATE_INHERIT_ACE    = 0x00000004,
    ADS_ACEFLAG_INHERIT_ONLY_ACE            = 0x00000008,
    ADS_ACEFLAG_INHERITED_ACE               = 0x00000010,
    ADS_ACEFLAG_VALID_INHERIT_FLAGS         = 0x0000001F,
    ADS_ACEFLAG_SUCCESSFUL_ACCESS           = 0x00000040,
    ADS_ACEFLAG_FAILED_ACCESS               = 0x00000080
} ADS_ACEFLAG_ENUM;

/* ADS flag types */
typedef enum {
    ADS_FLAG_OBJECT_TYPE_PRESENT            = 0x00000001,
    ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT  = 0x00000002
} ADS_FLAGTYPE_ENUM;

/* ADS security descriptor control flags */
typedef enum {
    ADS_SD_CONTROL_SE_OWNER_DEFAULTED       = 0x00000001,
    ADS_SD_CONTROL_SE_GROUP_DEFAULTED       = 0x00000002,
    ADS_SD_CONTROL_SE_DACL_PRESENT          = 0x00000004,
    ADS_SD_CONTROL_SE_DACL_DEFAULTED        = 0x00000008,
    ADS_SD_CONTROL_SE_SACL_PRESENT          = 0x00000010,
    ADS_SD_CONTROL_SE_SACL_DEFAULTED        = 0x00000020,
    ADS_SD_CONTROL_SE_DACL_AUTO_INHERIT_REQ = 0x00000100,
    ADS_SD_CONTROL_SE_SACL_AUTO_INHERIT_REQ = 0x00000200,
    ADS_SD_CONTROL_SE_DACL_AUTO_INHERITED   = 0x00000400,
    ADS_SD_CONTROL_SE_SACL_AUTO_INHERITED   = 0x00000800,
    ADS_SD_CONTROL_SE_DACL_PROTECTED        = 0x00001000,
    ADS_SD_CONTROL_SE_SACL_PROTECTED        = 0x00002000,
    ADS_SD_CONTROL_SE_SELF_RELATIVE         = 0x00008000
} ADS_SD_CONTROL_ENUM;

/* ADS security descriptor revision number */
typedef enum {
    ADS_SD_REVISION_DS  = 4
} ADS_SD_REVISION_ENUM;

/* ADS name types */
typedef enum {
    ADS_NAME_TYPE_1779                      = 1,
    ADS_NAME_TYPE_CANONICAL                 = 2,
    ADS_NAME_TYPE_NT4                       = 3,
    ADS_NAME_TYPE_DISPLAY                   = 4,
    ADS_NAME_TYPE_DOMAIN_SIMPLE             = 5,
    ADS_NAME_TYPE_ENTERPRISE_SIMPLE         = 6,
    ADS_NAME_TYPE_GUID                      = 7,
    ADS_NAME_TYPE_UNKNOWN                   = 8,
    ADS_NAME_TYPE_USER_PRINCIPAL_NAME       = 9,
    ADS_NAME_TYPE_CANONICAL_EX              = 10,
    ADS_NAME_TYPE_SERVICE_PRINCIPAL_NAME    = 11,
    ADS_NAME_TYPE_SID_OR_SID_HISTORY_NAME   = 12
} ADS_NAME_TYPE_ENUM;

/* ADS name initialization types */
typedef enum {
    ADS_NAME_INITTYPE_DOMAIN    = 1,
    ADS_NAME_INITTYPE_SERVER    = 2,
    ADS_NAME_INITTYPE_GC        = 3
} ADS_NAME_INITTYPE_ENUM;

/* ADS options */
typedef enum {
    ADS_OPTION_SERVERNAME                   = 0,
    ADS_OPTION_REFERRALS                    = 1,
    ADS_OPTION_PAGE_SIZE                    = 2,
    ADS_OPTION_SECURITY_MASK                = 3,
    ADS_OPTION_MUTUAL_AUTH_STATUS           = 4,
    ADS_OPTION_QUOTA                        = 5,
    ADS_OPTION_PASSWORD_PORTNUMBER          = 6,
    ADS_OPTION_PASSWORD_METHOD              = 7,
    ADS_OPTION_ACCUMULATIVE_MODIFICATION    = 8,
    ADS_OPTION_SKIP_SID_LOOKUP              = 9
} ADS_OPTION_ENUM;

/* ADS security information types */
typedef enum {
    ADS_SECURITY_INFO_OWNER = 0x00000001,
    ADS_SECURITY_INFO_GROUP = 0x00000002,
    ADS_SECURITY_INFO_DACL  = 0x00000004,
    ADS_SECURITY_INFO_SACL  = 0x00000008
} ADS_SECURITY_INFO_ENUM;

/* ADS set types */
typedef enum {
    ADS_SETTYPE_FULL        = 1,
    ADS_SETTYPE_PROVIDER    = 2,
    ADS_SETTYPE_SERVER      = 3,
    ADS_SETTYPE_DN          = 4
} ADS_SETTYPE_ENUM;

/* ADS formats */
typedef enum {
    ADS_FORMAT_WINDOWS              = 1,
    ADS_FORMAT_WINDOWS_NO_SERVER    = 2,
    ADS_FORMAT_WINDOWS_DN           = 3,
    ADS_FORMAT_WINDOWS_PARENT       = 4,
    ADS_FORMAT_X500                 = 5,
    ADS_FORMAT_X500_NO_SERVER       = 6,
    ADS_FORMAT_X500_DN              = 7,
    ADS_FORMAT_X500_PARENT          = 8,
    ADS_FORMAT_SERVER               = 9,
    ADS_FORMAT_PROVIDER             = 10,
    ADS_FORMAT_LEAF                 = 11
} ADS_FORMAT_ENUM;

/* ADS display types */
typedef enum {
    ADS_DISPLAY_FULL        = 1,
    ADS_DISPLAY_VALUE_ONLY  = 2
} ADS_DISPLAY_ENUM;

/* ADS escape modes */
typedef enum {
    ADS_ESCAPEDMODE_DEFAULT = 1,
    ADS_ESCAPEDMODE_ON      = 2,
    ADS_ESCAPEDMODE_OFF     = 3,
    ADS_ESCAPEDMODE_OFF_EX  = 4
} ADS_ESCAPE_MODE_ENUM;

/* ADS path types */
typedef enum {
    ADS_PATH_FILE       = 1,
    ADS_PATH_FILESHARE  = 2,
    ADS_PATH_REGISTRY   = 3
} ADS_PATHTYPE_ENUM;

/* ADS security descriptor formats */
typedef enum {
    ADS_SD_FORMAT_IID       = 1,
    ADS_SD_FORMAT_RAW       = 2,
    ADS_SD_FORMAT_HEXSTRING = 3
} ADS_SD_FORMAT_ENUM;

/* IADs interface */
#undef INTERFACE
#define INTERFACE   IADs
DECLARE_INTERFACE_( IADs, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;
};

/* IADsContainer interface */
#undef INTERFACE
#define INTERFACE   IADsContainer
DECLARE_INTERFACE_( IADsContainer, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsContainer methods */
    STDMETHOD( get_Count )( THIS_ long * ) PURE;
    STDMETHOD( get__NewEnum )( THIS_ IUnknown ** ) PURE;
    STDMETHOD( get_Filter )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_Filter )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_Hints )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_Hints )( THIS_ VARIANT ) PURE;
    STDMETHOD( GetObject )( THIS_ BSTR, BSTR, IDispatch ** ) PURE;
    STDMETHOD( Create )( THIS_ BSTR, BSTR, IDispatch ** ) PURE;
    STDMETHOD( Delete )( THIS_ BSTR, BSTR ) PURE;
    STDMETHOD( CopyHere )( THIS_ BSTR, BSTR, IDispatch ** ) PURE;
    STDMETHOD( MoveHere )( THIS_ BSTR, BSTR, IDispatch ** ) PURE;
};

/* IADsCollection interface */
#undef INTERFACE
#define INTERFACE   IADsCollection
DECLARE_INTERFACE_( IADsCollection, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsCollection methods */
    STDMETHOD( get__NewEnum )( THIS_ IUnknown ** ) PURE;
    STDMETHOD( Add )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( Remove )( THIS_ BSTR ) PURE;
    STDMETHOD( GetObject )( THIS_ BSTR, VARIANT * ) PURE;
};

/* IADsMembers interface */
#undef INTERFACE
#define INTERFACE   IADsMembers
DECLARE_INTERFACE_( IADsMembers, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsMembers methods */
    STDMETHOD( get_Count )( THIS_ long * ) PURE;
    STDMETHOD( get__NewEnum )( THIS_ IUnknown ** ) PURE;
    STDMETHOD( get_Filter )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_Filter )( THIS_ VARIANT ) PURE;
};

/* IADsPropertyList interface */
#undef INTERFACE
#define INTERFACE   IADsPropertyList
DECLARE_INTERFACE_( IADsPropertyList, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsPropertyList methods */
    STDMETHOD( get_PropertyCount )( THIS_ long * ) PURE;
    STDMETHOD( Next )( THIS_ VARIANT * ) PURE;
    STDMETHOD( Skip )( THIS_ long ) PURE;
    STDMETHOD( Reset )( THIS ) PURE;
    STDMETHOD( Item )( THIS_ VARIANT, VARIANT * ) PURE;
    STDMETHOD( GetPropertyItem )( THIS_ BSTR, LONG, VARIANT * ) PURE;
    STDMETHOD( PutPropertyItem )( THIS_ VARIANT ) PURE;
    STDMETHOD( ResetPropertyItem )( THIS_ VARIANT ) PURE;
    STDMETHOD( PurgePropertyList )( THIS ) PURE;
};

/* IADsPropertyEntry interface */
#undef INTERFACE
#define INTERFACE   IADsPropertyEntry
DECLARE_INTERFACE_( IADsPropertyEntry, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsPropertyEntry methods */
    STDMETHOD( Clear )( THIS ) PURE;
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Name )( THIS_ BSTR ) PURE;
    STDMETHOD( get_ADsType )( THIS_ long * ) PURE;
    STDMETHOD( put_ADsType )( THIS_ long ) PURE;
    STDMETHOD( get_ControlCode )( THIS_ long * ) PURE;
    STDMETHOD( put_ControlCode )( THIS_ long ) PURE;
    STDMETHOD( get_Values )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_Values )( THIS_ VARIANT ) PURE;
};

/* IADsPropertyValue interface */
#undef INTERFACE
#define INTERFACE   IADsPropertyValue
DECLARE_INTERFACE_( IADsPropertyValue, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsPropertyValue methods */
    STDMETHOD( Clear )( THIS ) PURE;
    STDMETHOD( get_ADsType )( THIS_ long * ) PURE;
    STDMETHOD( put_ADsType )( THIS_ long ) PURE;
    STDMETHOD( get_DNString )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_DNString )( THIS_ BSTR ) PURE;
    STDMETHOD( get_CaseExactString )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_CaseExactString )( THIS_ BSTR ) PURE;
    STDMETHOD( get_CaseIgnoreString )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_CaseIgnoreString )( THIS_ BSTR ) PURE;
    STDMETHOD( get_PrintableString )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_PrintableString )( THIS_ BSTR ) PURE;
    STDMETHOD( get_NumericString )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_NumericString )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Boolean )( THIS_ long * ) PURE;
    STDMETHOD( put_Boolean )( THIS_ long ) PURE;
    STDMETHOD( get_Integer )( THIS_ long * ) PURE;
    STDMETHOD( put_Integer )( THIS_ long ) PURE;
    STDMETHOD( get_OctetString )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_OctetString )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_SecurityDescriptor )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( put_SecurityDescriptor )( THIS_ IDispatch * ) PURE;
    STDMETHOD( get_LargeInteger )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( put_LargeInteger )( THIS_ IDispatch * ) PURE;
    STDMETHOD( get_UTCTime )( THIS_ DATE * ) PURE;
    STDMETHOD( put_UTCTime )( THIS_ DATE ) PURE;
};

/* IADsPropertyValue2 interface */
#undef INTERFACE
#define INTERFACE   IADsPropertyValue2
DECLARE_INTERFACE_( IADsPropertyValue2, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsPropertyValue2 methods */
    STDMETHOD( GetObjectProperty )( THIS_ long *, VARIANT * ) PURE;
    STDMETHOD( PutObjectProperty )( THIS_ long, VARIANT ) PURE;
};

/* IPrivateDispatch interface */
#undef INTERFACE
#define INTERFACE   IPrivateDispatch
DECLARE_INTERFACE_( IPrivateDispatch, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IPrivateDispatch methods */
    STDMETHOD( ADSIInitializeDispatchManager )( THIS_ long ) PURE;
    STDMETHOD( ADSIGetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( ADSIGetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( ADSIGetIDsOfNames )( THIS_ REFIID, OLECHAR **, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( ADSIInvoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;
};

/* IPrivateUnknown interface */
#undef INTERFACE
#define INTERFACE   IPrivateUnknown
DECLARE_INTERFACE_( IPrivateUnknown, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IPrivateUnknown methods */
    STDMETHOD( ADSIInitializeObject )( THIS_ BSTR, BSTR, long ) PURE;
    STDMETHOD( ADSIReleaseObject )( THIS ) PURE;
};

/* IADsExtension interface */
#undef INTERFACE
#define INTERFACE   IADsExtension
DECLARE_INTERFACE_( IADsExtension, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IADsExtension methods */
    STDMETHOD( Operate )( THIS_ DWORD, VARIANT, VARIANT, VARIANT ) PURE;
    STDMETHOD( PrivateGetIDsOfNames )( THIS_ REFIID, OLECHAR **, unsigned int, LCID, DISPID * ) PURE;
    STDMETHOD( PrivateInvoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, unsigned int * ) PURE;
};

/* IADsDeleteOps interface */
#undef INTERFACE
#define INTERFACE   IADsDeleteOps
DECLARE_INTERFACE_( IADsDeleteOps, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsDeleteOps methods */
    STDMETHOD( DeleteObject )( THIS_ long ) PURE;
};

/* IADsNamespaces interface */
#undef INTERFACE
#define INTERFACE   IADsNamespaces
DECLARE_INTERFACE_( IADsNamespaces, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsNamespaces methods */
    STDMETHOD( get_DefaultContainer )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_DefaultContainer )( THIS_ BSTR ) PURE;
};

/* IADsClass interface */
#undef INTERFACE
#define INTERFACE   IADsClass
DECLARE_INTERFACE_( IADsClass, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsClass methods */
    STDMETHOD( get_PrimaryInterface )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_CLSID )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_CLSID )( THIS_ BSTR ) PURE;
    STDMETHOD( get_OID )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_OID )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Abstract )( THIS_ VARIANT_BOOL * ) PURE;
    STDMETHOD( put_Abstract )( THIS_ VARIANT_BOOL ) PURE;
    STDMETHOD( get_Auxiliary )( THIS_ VARIANT_BOOL * ) PURE;
    STDMETHOD( put_Auxiliary )( THIS_ VARIANT_BOOL ) PURE;
    STDMETHOD( get_MandatoryProperties )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_MandatoryProperties )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_OptionalProperties )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_OptionalProperties )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_NamingProperties )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_NamingProperties )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_DerivedFrom )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_DerivedFrom )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_AuxDerivedFrom )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_AuxDerivedFrom )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_PossibleSuperiors )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_PossibleSuperiors )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_Containment )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_Containment )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_Container )( THIS_ VARIANT_BOOL * ) PURE;
    STDMETHOD( put_Container )( THIS_ VARIANT_BOOL ) PURE;
    STDMETHOD( get_HelpFileName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_HelpFileName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_HelpFileContext )( THIS_ long * ) PURE;
    STDMETHOD( put_HelpFileContext )( THIS_ long ) PURE;
    STDMETHOD( Qualifiers )( THIS_ IADsCollection ** ) PURE;
};

/* IADsProperty interface */
#undef INTERFACE
#define INTERFACE   IADsProperty
DECLARE_INTERFACE_( IADsProperty, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsProperty methods */
    STDMETHOD( get_OID )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_OID )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Syntax )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Syntax )( THIS_ BSTR ) PURE;
    STDMETHOD( get_MaxRange )( THIS_ long * ) PURE;
    STDMETHOD( put_MaxRange )( THIS_ long ) PURE;
    STDMETHOD( get_MinRange )( THIS_ long * ) PURE;
    STDMETHOD( put_MinRange )( THIS_ long ) PURE;
    STDMETHOD( get_MultiValued )( THIS_ VARIANT_BOOL * ) PURE;
    STDMETHOD( put_MultiValued )( THIS_ VARIANT_BOOL ) PURE;
    STDMETHOD( Qualifiers )( THIS_ IADsCollection ** ) PURE;
};

/* IADsSyntax interface */
#undef INTERFACE
#define INTERFACE   IADsSyntax
DECLARE_INTERFACE_( IADsSyntax, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsSyntax methods */
    STDMETHOD( get_OleAutoDataType )( THIS_ long * ) PURE;
    STDMETHOD( put_OleAutoDataType )( THIS_ long ) PURE;
};

/* IADsLocality interface */
#undef INTERFACE
#define INTERFACE   IADsLocality
DECLARE_INTERFACE_( IADsLocality, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsLocality methods */
    STDMETHOD( get_Description )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Description )( THIS_ BSTR ) PURE;
    STDMETHOD( get_LocalityName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_LocalityName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_PostalAddress )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_PostalAddress )( THIS_ BSTR ) PURE;
    STDMETHOD( get_SeeAlso )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_SeeAlso )( THIS_ VARIANT ) PURE;
};

/* IADsO interface */
#undef INTERFACE
#define INTERFACE   IADsO
DECLARE_INTERFACE_( IADsO, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsO methods */
    STDMETHOD( get_Description )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Description )( THIS_ BSTR ) PURE;
    STDMETHOD( get_LocalityName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_LocalityName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_PostalAddress )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_PostalAddress )( THIS_ BSTR ) PURE;
    STDMETHOD( get_TelephoneNumber )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_TelephoneNumber )( THIS_ BSTR ) PURE;
    STDMETHOD( get_FaxNumber )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_FaxNumber )( THIS_ BSTR ) PURE;
    STDMETHOD( get_SeeAlso )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_SeeAlso )( THIS_ BSTR ) PURE;
};

/* IADsOU interface */
#undef INTERFACE
#define INTERFACE   IADsOU
DECLARE_INTERFACE_( IADsOU, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsOU methods */
    STDMETHOD( get_Description )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Description )( THIS_ BSTR ) PURE;
    STDMETHOD( get_LocalityName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_LocalityName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_PostalAddress )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_PostalAddress )( THIS_ BSTR ) PURE;
    STDMETHOD( get_TelephoneNumber )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_TelephoneNumber )( THIS_ BSTR ) PURE;
    STDMETHOD( get_FaxNumber )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_FaxNumber )( THIS_ BSTR ) PURE;
    STDMETHOD( get_SeeAlso )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_SeeAlso )( THIS_ BSTR ) PURE;
    STDMETHOD( get_BusinessCategory )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_BusinessCategory )( THIS_ BSTR ) PURE;
};

/* IADsDomain interface */
#undef INTERFACE
#define INTERFACE   IADsDomain
DECLARE_INTERFACE_( IADsDomain, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsDomain methods */
    STDMETHOD( get_IsWorkgroup )( THIS_ VARIANT_BOOL * ) PURE;
    STDMETHOD( get_MinPasswordLength )( THIS_ long * ) PURE;
    STDMETHOD( put_MinPasswordLength )( THIS_ long ) PURE;
    STDMETHOD( get_MinPasswordAge )( THIS_ long * ) PURE;
    STDMETHOD( put_MinPasswordAge )( THIS_ long ) PURE;
    STDMETHOD( get_MaxPasswordAge )( THIS_ long * ) PURE;
    STDMETHOD( put_MaxPasswordAge )( THIS_ long ) PURE;
    STDMETHOD( get_MaxBadPasswordsAllowed )( THIS_ long * ) PURE;
    STDMETHOD( put_MaxBadPasswordsAllowed )( THIS_ long ) PURE;
    STDMETHOD( get_PasswordHistoryLength )( THIS_ long * ) PURE;
    STDMETHOD( put_PasswordHistoryLength )( THIS_ long ) PURE;
    STDMETHOD( get_PasswordAttributes )( THIS_ long * ) PURE;
    STDMETHOD( put_PasswordAttributes )( THIS_ long ) PURE;
    STDMETHOD( get_AutoUnlockInterval )( THIS_ long * ) PURE;
    STDMETHOD( put_AutoUnlockInterval )( THIS_ long ) PURE;
    STDMETHOD( get_LockoutObservationInterval )( THIS_ long * ) PURE;
    STDMETHOD( put_LockoutObservationInterval )( THIS_ long ) PURE;
};

/* IADsComputer interface */
#undef INTERFACE
#define INTERFACE   IADsComputer
DECLARE_INTERFACE_( IADsComputer, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsComputer methods */
    STDMETHOD( get_ComputerID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Site )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Description )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Description )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Location )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Location )( THIS_ BSTR ) PURE;
    STDMETHOD( get_PrimaryUser )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_PrimaryUser )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Owner )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Owner )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Division )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Division )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Department )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Department )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Role )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Role )( THIS_ BSTR ) PURE;
    STDMETHOD( get_OperatingSystem )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_OperatingSystem )( THIS_ BSTR ) PURE;
    STDMETHOD( get_OperatingSystemVersion )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_OperatingSystemVersion )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Model )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Model )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Processor )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Processor )( THIS_ BSTR ) PURE;
    STDMETHOD( get_ProcessorCount )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_ProcessorCount )( THIS_ BSTR ) PURE;
    STDMETHOD( get_MemorySize )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_MemorySize )( THIS_ BSTR ) PURE;
    STDMETHOD( get_StorageCapacity )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_StorageCapacity )( THIS_ BSTR ) PURE;
    STDMETHOD( get_NetAddresses )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_NetAddresses )( THIS_ VARIANT ) PURE;
};

/* IADsComputerOperations interface */
#undef INTERFACE
#define INTERFACE   IADsComputerOperations
DECLARE_INTERFACE_( IADsComputerOperations, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsComputerOperations methods */
    STDMETHOD( Status )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( Shutdown )( THIS_ VARIANT_BOOL ) PURE;
};

/* IADsGroup interface */
#undef INTERFACE
#define INTERFACE   IADsGroup
DECLARE_INTERFACE_( IADsGroup, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsGroup methods */
    STDMETHOD( get_Description )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Description )( THIS_ BSTR ) PURE;
    STDMETHOD( Members )( THIS_ IADsMembers ** ) PURE;
    STDMETHOD( IsMember )( THIS_ BSTR, VARIANT_BOOL * ) PURE;
    STDMETHOD( Add )( THIS_ BSTR ) PURE;
    STDMETHOD( Remove )( THIS_ BSTR ) PURE;
};

/* IADsUser interface */
#undef INTERFACE
#define INTERFACE   IADsUser
DECLARE_INTERFACE_( IADsUser, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsUser methods */
    STDMETHOD( get_BadLoginAddress )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_BadLoginCount )( THIS_ long * ) PURE;
    STDMETHOD( get_LastLogin )( THIS_ DATE * ) PURE;
    STDMETHOD( get_LastLogoff )( THIS_ DATE * ) PURE;
    STDMETHOD( get_LastFailedLogin )( THIS_ DATE * ) PURE;
    STDMETHOD( get_PasswordLastChanged )( THIS_ DATE * ) PURE;
    STDMETHOD( get_Description )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Description )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Division )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Division )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Department )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Department )( THIS_ BSTR ) PURE;
    STDMETHOD( get_EmployeeID )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_EmployeeID )( THIS_ BSTR ) PURE;
    STDMETHOD( get_FullName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_FullName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_FirstName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_FirstName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_LastName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_LastName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_OtherName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_OtherName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_NamePrefix )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_NamePrefix )( THIS_ BSTR ) PURE;
    STDMETHOD( get_NameSuffix )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_NameSuffix )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Title )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Title )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Manager )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Manager )( THIS_ BSTR ) PURE;
    STDMETHOD( get_TelephoneHome )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_TelephoneHome )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_TelephoneMobile )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_TelephoneMobile )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_TelephoneNumber )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_TelephoneNumber )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_TelephonePager )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_TelephonePager )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_FaxNumber )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_FaxNumber )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_OfficeLocations )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_OfficeLocations )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_PostalAddresses )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_PostalAddresses )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_PostalCodes )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_PostalCodes )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_SeeAlso )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_SeeAlso )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_AccountDisabled )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_AccountDisabled )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_AccountExpirationDate )( THIS_ DATE * ) PURE;
    STDMETHOD( put_AccountExpirationDate )( THIS_ DATE ) PURE;
    STDMETHOD( get_GraceLoginsAllowed )( THIS_ long * ) PURE;
    STDMETHOD( put_GraceLoginsAllowed )( THIS_ long ) PURE;
    STDMETHOD( get_GraceLoginsRemaining )( THIS_ long * ) PURE;
    STDMETHOD( put_GraceLoginsRemaining )( THIS_ long ) PURE;
    STDMETHOD( get_IsAccountLocked )( THIS_ VARIANT_BOOL * ) PURE;
    STDMETHOD( put_IsAccountLocked )( THIS_ VARIANT_BOOL ) PURE;
    STDMETHOD( get_LoginHours )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_LoginHours )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_LoginWorkstations )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_LoginWorkstations )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_MaxLogins )( THIS_ long * ) PURE;
    STDMETHOD( put_MaxLogins )( THIS_ long ) PURE;
    STDMETHOD( get_MaxStorage )( THIS_ long * ) PURE;
    STDMETHOD( put_MaxStorage )( THIS_ long ) PURE;
    STDMETHOD( get_PasswordExpirationDate )( THIS_ DATE * ) PURE;
    STDMETHOD( put_PasswordExpirationDate )( THIS_ DATE ) PURE;
    STDMETHOD( get_PasswordMinimumLength )( THIS_ long * ) PURE;
    STDMETHOD( put_PasswordMinimumLength )( THIS_ long ) PURE;
    STDMETHOD( get_PasswordRequired )( THIS_ VARIANT_BOOL * ) PURE;
    STDMETHOD( put_PasswordRequired )( THIS_ VARIANT_BOOL ) PURE;
    STDMETHOD( get_RequireUniquePassword )( THIS_ VARIANT_BOOL * ) PURE;
    STDMETHOD( put_RequireUniquePassword )( THIS_ VARIANT_BOOL ) PURE;
    STDMETHOD( get_EmailAddress )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_EmailAddress )( THIS_ BSTR ) PURE;
    STDMETHOD( get_HomeDirectory )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_HomeDirectory )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Languages )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_Languages )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_Profile )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Profile )( THIS_ BSTR ) PURE;
    STDMETHOD( get_LoginScript )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_LoginScript )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Picture )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_Picture )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_HomePage )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_HomePage )( THIS_ BSTR ) PURE;
    STDMETHOD( Groups )( THIS_ IADsMembers ** ) PURE;
    STDMETHOD( SetPassword )( THIS_ BSTR ) PURE;
    STDMETHOD( ChangePassword )( THIS_ BSTR, BSTR ) PURE;
};

/* IADsPrintQueue interface */
#undef INTERFACE
#define INTERFACE   IADsPrintQueue
DECLARE_INTERFACE_( IADsPrintQueue, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsPrintQueue methods */
    STDMETHOD( get_PrinterPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_PrinterPath )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Model )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Model )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Datatype )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Datatype )( THIS_ BSTR ) PURE;
    STDMETHOD( get_PrintProcessor )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_PrintProcessor )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Description )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Description )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Location )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Location )( THIS_ BSTR ) PURE;
    STDMETHOD( get_StartTime )( THIS_ DATE * ) PURE;
    STDMETHOD( put_StartTime )( THIS_ DATE ) PURE;
    STDMETHOD( get_UntilTime )( THIS_ DATE * ) PURE;
    STDMETHOD( put_UntilTime )( THIS_ DATE ) PURE;
    STDMETHOD( get_DefaultJobPriority )( THIS_ long * ) PURE;
    STDMETHOD( put_DefaultJobPriority )( THIS_ long ) PURE;
    STDMETHOD( get_Priority )( THIS_ long * ) PURE;
    STDMETHOD( put_Priority )( THIS_ long ) PURE;
    STDMETHOD( get_BannerPage )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_BannerPage )( THIS_ BSTR ) PURE;
    STDMETHOD( get_PrintDevices )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_PrintDevices )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_NetAddresses )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_NetAddresses )( THIS_ VARIANT ) PURE;
};

/* IADsPrintQueueOperations interface */
#undef INTERFACE
#define INTERFACE   IADsPrintQueueOperations
DECLARE_INTERFACE_( IADsPrintQueueOperations, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsPrintQueueOperations methods */
    STDMETHOD( get_Status )( THIS_ long * ) PURE;
    STDMETHOD( PrintJobs )( THIS_ IADsCollection ** ) PURE;
    STDMETHOD( Pause )( THIS ) PURE;
    STDMETHOD( Resume )( THIS ) PURE;
    STDMETHOD( Purge )( THIS ) PURE;
};

/* IADsPrintJob interface */
#undef INTERFACE
#define INTERFACE   IADsPrintJob
DECLARE_INTERFACE_( IADsPrintJob, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsPrintJob methods */
    STDMETHOD( get_HostPrintQueue )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_User )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_UserPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_TimeSubmitted )( THIS_ DATE * ) PURE;
    STDMETHOD( get_TotalPages )( THIS_ long * ) PURE;
    STDMETHOD( get_Size )( THIS_ long * ) PURE;
    STDMETHOD( get_Description )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Description )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Priority )( THIS_ long * ) PURE;
    STDMETHOD( put_Priority )( THIS_ long ) PURE;
    STDMETHOD( get_StartTime )( THIS_ DATE * ) PURE;
    STDMETHOD( put_StartTime )( THIS_ DATE ) PURE;
    STDMETHOD( get_UntilTime )( THIS_ DATE * ) PURE;
    STDMETHOD( put_UntilTime )( THIS_ DATE ) PURE;
    STDMETHOD( get_Notify )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Notify )( THIS_ BSTR ) PURE;
    STDMETHOD( get_NotifyPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_NotifyPath )( THIS_ BSTR ) PURE;
};

/* IADsPrintJobOperations interface */
#undef INTERFACE
#define INTERFACE   IADsPrintJobOperations
DECLARE_INTERFACE_( IADsPrintJobOperations, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsPrintJobOperations methods */
    STDMETHOD( get_Status )( THIS_ long * ) PURE;
    STDMETHOD( get_TimeElapsed )( THIS_ long * ) PURE;
    STDMETHOD( get_PagesPrinted )( THIS_ long * ) PURE;
    STDMETHOD( get_Position )( THIS_ long * ) PURE;
    STDMETHOD( put_Position )( THIS_ long ) PURE;
    STDMETHOD( Pause )( THIS ) PURE;
    STDMETHOD( Resume )( THIS ) PURE;
};

/* IADsService interface */
#undef INTERFACE
#define INTERFACE   IADsService
DECLARE_INTERFACE_( IADsService, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsService methods */
    STDMETHOD( get_HostComputer )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_HostComputer )( THIS_ BSTR ) PURE;
    STDMETHOD( get_DisplayName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_DisplayName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Version )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Version )( THIS_ BSTR ) PURE;
    STDMETHOD( get_ServiceType )( THIS_ long * ) PURE;
    STDMETHOD( put_ServiceType )( THIS_ long ) PURE;
    STDMETHOD( get_StartType )( THIS_ long * ) PURE;
    STDMETHOD( put_StartType )( THIS_ long ) PURE;
    STDMETHOD( get_Path )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Path )( THIS_ BSTR ) PURE;
    STDMETHOD( get_StartupParameters )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_StartupParameters )( THIS_ BSTR ) PURE;
    STDMETHOD( get_ErrorControl )( THIS_ long * ) PURE;
    STDMETHOD( put_ErrorControl )( THIS_ long ) PURE;
    STDMETHOD( get_LoadOrderGroup )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_LoadOrderGroup )( THIS_ BSTR ) PURE;
    STDMETHOD( get_ServiceAccountName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_ServiceAccountName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_ServiceAccountPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_ServiceAccountPath )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Dependencies )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_Dependencies )( THIS_ VARIANT ) PURE;
};

/* IADsServiceOperations interface */
#undef INTERFACE
#define INTERFACE   IADsServiceOperations
DECLARE_INTERFACE_( IADsServiceOperations, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsServiceOperations methods */
    STDMETHOD( get_Status )( THIS_ long * ) PURE;
    STDMETHOD( Start )( THIS ) PURE;
    STDMETHOD( Stop )( THIS ) PURE;
    STDMETHOD( Pause )( THIS ) PURE;
    STDMETHOD( Continue )( THIS ) PURE;
    STDMETHOD( SetPassword )( THIS_ BSTR ) PURE;
};

/* IADsFileService interface */
#undef INTERFACE
#define INTERFACE   IADsFileService
DECLARE_INTERFACE_( IADsFileService, IADsService ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsService methods */
    STDMETHOD( get_HostComputer )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_HostComputer )( THIS_ BSTR ) PURE;
    STDMETHOD( get_DisplayName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_DisplayName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Version )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Version )( THIS_ BSTR ) PURE;
    STDMETHOD( get_ServiceType )( THIS_ long * ) PURE;
    STDMETHOD( put_ServiceType )( THIS_ long ) PURE;
    STDMETHOD( get_StartType )( THIS_ long * ) PURE;
    STDMETHOD( put_StartType )( THIS_ long ) PURE;
    STDMETHOD( get_Path )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Path )( THIS_ BSTR ) PURE;
    STDMETHOD( get_StartupParameters )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_StartupParameters )( THIS_ BSTR ) PURE;
    STDMETHOD( get_ErrorControl )( THIS_ long * ) PURE;
    STDMETHOD( put_ErrorControl )( THIS_ long ) PURE;
    STDMETHOD( get_LoadOrderGroup )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_LoadOrderGroup )( THIS_ BSTR ) PURE;
    STDMETHOD( get_ServiceAccountName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_ServiceAccountName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_ServiceAccountPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_ServiceAccountPath )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Dependencies )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_Dependencies )( THIS_ VARIANT ) PURE;

    /* IADsFileService methods */
    STDMETHOD( get_Description )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Description )( THIS_ BSTR ) PURE;
    STDMETHOD( get_MaxUserCount )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_MaxUserCount )( THIS_ BSTR ) PURE;
};

/* IADsFileServiceOperations interface */
#undef INTERFACE
#define INTERFACE   IADsFileServiceOperations
DECLARE_INTERFACE_( IADsFileServiceOperations, IADsServiceOperations ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsServiceOperations methods */
    STDMETHOD( get_Status )( THIS_ long * ) PURE;
    STDMETHOD( Start )( THIS ) PURE;
    STDMETHOD( Stop )( THIS ) PURE;
    STDMETHOD( Pause )( THIS ) PURE;
    STDMETHOD( Continue )( THIS ) PURE;
    STDMETHOD( SetPassword )( THIS_ BSTR ) PURE;

    /* IADsFileServiceOperations methods */
    STDMETHOD( Sessions )( THIS_ IADsCollection ** ) PURE;
    STDMETHOD( Resources )( THIS_ IADsCollection ** ) PURE;
};

/* IADsFileShare interface */
#undef INTERFACE
#define INTERFACE   IADsFileShare
DECLARE_INTERFACE_( IADsFileShare, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsFileShare methods */
    STDMETHOD( get_CurrentUserCount )( THIS_ long * ) PURE;
    STDMETHOD( get_Description )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Description )( THIS_ BSTR ) PURE;
    STDMETHOD( get_HostComputer )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_HostComputer )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Path )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Path )( THIS_ BSTR ) PURE;
    STDMETHOD( get_MaxUserCount )( THIS_ long * ) PURE;
    STDMETHOD( put_MaxUserCount )( THIS_ long ) PURE;
};

/* IADsSession interface */
#undef INTERFACE
#define INTERFACE   IADsSession
DECLARE_INTERFACE_( IADsSession, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsSession methods */
    STDMETHOD( get_User )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_UserPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Computer )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ComputerPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ConnectTime )( THIS_ long * ) PURE;
    STDMETHOD( get_IdleTime )( THIS_ long * ) PURE;
};

/* IADsResource interface */
#undef INTERFACE
#define INTERFACE   IADsResource
DECLARE_INTERFACE_( IADsResource, IADs ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADs methods */
    STDMETHOD( get_Name )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Class )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_GUID )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ADsPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Parent )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Schema )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetInfo )( THIS ) PURE;
    STDMETHOD( SetInfo )( THIS ) PURE;
    STDMETHOD( Get )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( Put )( THIS_ BSTR, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ BSTR, VARIANT * ) PURE;
    STDMETHOD( PutEx )( THIS_ long, BSTR, VARIANT ) PURE;
    STDMETHOD( GetInfoEx )( THIS_ VARIANT, long ) PURE;

    /* IADsResource methods */
    STDMETHOD( get_User )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_UserPath )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_Path )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_LockCount )( THIS_ long * ) PURE;
};

/* IADsOpenDSObject interface */
#undef INTERFACE
#define INTERFACE   IADsOpenDSObject
DECLARE_INTERFACE_( IADsOpenDSObject, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsOpenDSObject methods */
    STDMETHOD( OpenDSObject )( THIS_ BSTR, BSTR, BSTR, long, IDispatch ** ) PURE;
};

/* IDirectoryObject interface */
#undef INTERFACE
#define INTERFACE   IDirectoryObject
DECLARE_INTERFACE_( IDirectoryObject, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirectoryObject methods */
    STDMETHOD( GetObjectInformation )( THIS_ PADS_OBJECT_INFO * ) PURE;
    STDMETHOD( GetObjectAttributes )( THIS_ LPWSTR *, DWORD, PADS_ATTR_INFO *, DWORD * ) PURE;
    STDMETHOD( SetObjectAttributes )( THIS_ PADS_ATTR_INFO, DWORD, DWORD * ) PURE;
    STDMETHOD( CreateDSObject )( THIS_ LPWSTR, PADS_ATTR_INFO, DWORD, IDispatch ** ) PURE;
    STDMETHOD( DeleteDSObject )( THIS_ LPWSTR ) PURE;
};

/* IDirectorySearch interface */
#undef INTERFACE
#define INTERFACE   IDirectorySearch
DECLARE_INTERFACE_( IDirectorySearch, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirectorySearch methods */
    STDMETHOD( SetSearchPreference )( THIS_ PADS_SEARCHPREF_INFO, DWORD ) PURE;
    STDMETHOD( ExecuteSearch )( THIS_ LPWSTR, LPWSTR *, DWORD, PADS_SEARCH_HANDLE ) PURE;
    STDMETHOD( AbandonSearch )( THIS_ ADS_SEARCH_HANDLE ) PURE;
    STDMETHOD( GetFirstRow )( THIS_ ADS_SEARCH_HANDLE ) PURE;
    STDMETHOD( GetNextRow )( THIS_ ADS_SEARCH_HANDLE ) PURE;
    STDMETHOD( GetPreviousRow )( THIS_ ADS_SEARCH_HANDLE ) PURE;
    STDMETHOD( GetNextColumnName )( THIS_ ADS_SEARCH_HANDLE, LPWSTR * ) PURE;
    STDMETHOD( GetColumn )( THIS_ ADS_SEARCH_HANDLE, LPWSTR, PADS_SEARCH_COLUMN ) PURE;
    STDMETHOD( FreeColumn )( THIS_ PADS_SEARCH_COLUMN ) PURE;
    STDMETHOD( CloseSearchHandle )( THIS_ ADS_SEARCH_HANDLE ) PURE;
};

/* IDirectorySchemaMgmt interface */
#undef INTERFACE
#define INTERFACE   IDirectorySchemaMgmt
DECLARE_INTERFACE_( IDirectorySchemaMgmt, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirectorySchemaMgmt methods */
    STDMETHOD( EnumAttributes )( THIS_ LPWSTR *, DWORD, PADS_ATTR_DEF *, DWORD * ) PURE;
    STDMETHOD( CreateAttributeDefinition )( THIS_ LPWSTR, PADS_ATTR_DEF ) PURE;
    STDMETHOD( WriteAttributeDefinition )( THIS_ LPWSTR, PADS_ATTR_DEF ) PURE;
    STDMETHOD( DeleteAttributeDefinition )( THIS_ LPWSTR ) PURE;
    STDMETHOD( EnumClasses )( THIS_ LPWSTR *, DWORD, PADS_CLASS_DEF *, DWORD * ) PURE;
    STDMETHOD( WriteClassDefinition )( THIS_ LPWSTR, PADS_CLASS_DEF ) PURE;
    STDMETHOD( CreateClassDefinition )( THIS_ LPWSTR, PADS_CLASS_DEF ) PURE;
    STDMETHOD( DeleteClassDefinition )( THIS_ LPWSTR ) PURE;
};

/* IADsAggregatee interface */
#undef INTERFACE
#define INTERFACE   IADsAggregatee
DECLARE_INTERFACE_( IADsAggregatee, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IADsAggregatee methods */
    STDMETHOD( ConnectAsAggregatee )( THIS_ IUnknown * ) PURE;
    STDMETHOD( DisconnectAsAggregatee )( THIS ) PURE;
    STDMETHOD( RelinquishInterface )( THIS_ REFIID ) PURE;
    STDMETHOD( RestoreInterface )( THIS_ REFIID ) PURE;
};

/* IADsAggregator interface */
#undef INTERFACE
#define INTERFACE   IADsAggregator
DECLARE_INTERFACE_( IADsAggregator, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IADsAggregator methods */
    STDMETHOD( ConnectAsAggregator )( THIS_ IUnknown * ) PURE;
    STDMETHOD( DisconnectAsAggregator )( THIS ) PURE;
};

/* IADsAccessControlEntry interface */
#undef INTERFACE
#define INTERFACE   IADsAccessControlEntry
DECLARE_INTERFACE_( IADsAccessControlEntry, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsAccessControlEntry methods */
    STDMETHOD( get_AccessMask )( THIS_ long * ) PURE;
    STDMETHOD( put_AccessMask )( THIS_ long ) PURE;
    STDMETHOD( get_AceType )( THIS_ long * ) PURE;
    STDMETHOD( put_AceType )( THIS_ long ) PURE;
    STDMETHOD( get_AceFlags )( THIS_ long * ) PURE;
    STDMETHOD( put_AceFlags )( THIS_ long ) PURE;
    STDMETHOD( get_Flags )( THIS_ long * ) PURE;
    STDMETHOD( put_Flags )( THIS_ long ) PURE;
    STDMETHOD( get_ObjectType )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_ObjectType )( THIS_ BSTR ) PURE;
    STDMETHOD( get_InheritedObjectType )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_InheritedObjectType )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Trustee )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Trustee )( THIS_ BSTR ) PURE;
};

/* IADsAccessControlList interface */
#undef INTERFACE
#define INTERFACE   IADsAccessControlList
DECLARE_INTERFACE_( IADsAccessControlList, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsAccessControlList methods */
    STDMETHOD( get_AclRevision )( THIS_ long * ) PURE;
    STDMETHOD( put_AclRevision )( THIS_ long ) PURE;
    STDMETHOD( get_AceCount )( THIS_ long * ) PURE;
    STDMETHOD( put_AceCount )( THIS_ long ) PURE;
    STDMETHOD( AddAce )( THIS_ IDispatch * ) PURE;
    STDMETHOD( RemoveAce )( THIS_ IDispatch * ) PURE;
    STDMETHOD( CopyAccessList )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( get__NewEnum )( THIS_ IUnknown ** ) PURE;
};

/* IADsSecurityDescriptor interface */
#undef INTERFACE
#define INTERFACE   IADsSecurityDescriptor
DECLARE_INTERFACE_( IADsSecurityDescriptor, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsSecurityDescriptor methods */
    STDMETHOD( get_Revision )( THIS_ long * ) PURE;
    STDMETHOD( put_Revision )( THIS_ long ) PURE;
    STDMETHOD( get_Control )( THIS_ long * ) PURE;
    STDMETHOD( put_Control )( THIS_ long ) PURE;
    STDMETHOD( get_Owner )( THIS_ long * ) PURE;
    STDMETHOD( put_Owner )( THIS_ long ) PURE;
    STDMETHOD( get_OwnerDefaulted )( THIS_ VARIANT_BOOL * ) PURE;
    STDMETHOD( put_OwnerDefaulted )( THIS_ VARIANT_BOOL ) PURE;
    STDMETHOD( get_Group )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Group )( THIS_ BSTR ) PURE;
    STDMETHOD( get_GroupDefaulted )( THIS_ VARIANT_BOOL * ) PURE;
    STDMETHOD( put_GroupDefaulted )( THIS_ VARIANT_BOOL ) PURE;
    STDMETHOD( get_DiscretionaryAcl )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( put_DiscretionaryAcl )( THIS_ IDispatch * ) PURE;
    STDMETHOD( get_DaclDefaulted )( THIS_ VARIANT_BOOL * ) PURE;
    STDMETHOD( put_DaclDefaulted )( THIS_ VARIANT_BOOL ) PURE;
    STDMETHOD( get_SystemAcl )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( put_SystemAcl )( THIS_ IDispatch * ) PURE;
    STDMETHOD( get_SaclDefaulted )( THIS_ VARIANT_BOOL * ) PURE;
    STDMETHOD( put_SaclDefaulted )( THIS_ VARIANT_BOOL ) PURE;
    STDMETHOD( CopySecurityDescriptor )( THIS_ IDispatch ** ) PURE;
};

/* IADsLargeInteger interface */
#undef INTERFACE
#define INTERFACE   IADsLargeInteger
DECLARE_INTERFACE_( IADsLargeInteger, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsLargeInteger methods */
    STDMETHOD( get_HighPart )( THIS_ long * ) PURE;
    STDMETHOD( put_HighPart )( THIS_ long ) PURE;
    STDMETHOD( get_LowPart )( THIS_ long * ) PURE;
    STDMETHOD( put_LowPart )( THIS_ long ) PURE;
};

/* IADsNameTranslate interface */
#undef INTERFACE
#define INTERFACE   IADsNameTranslate
DECLARE_INTERFACE_( IADsNameTranslate, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsNameTranslate methods */
    STDMETHOD( put_ChaseReferral )( THIS_ long ) PURE;
    STDMETHOD( Init )( THIS_ long, BSTR ) PURE;
    STDMETHOD( InitEx )( THIS_ long, BSTR, BSTR, BSTR, BSTR ) PURE;
    STDMETHOD( Set )( THIS_ long, BSTR ) PURE;
    STDMETHOD( Get )( THIS_ long, BSTR * ) PURE;
    STDMETHOD( SetEx )( THIS_ long, VARIANT ) PURE;
    STDMETHOD( GetEx )( THIS_ long, VARIANT * ) PURE;
};

/* IADsCaseIgnoreList interface */
#undef INTERFACE
#define INTERFACE   IADsCaseIgnoreList
DECLARE_INTERFACE_( IADsCaseIgnoreList, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsCaseIgnoreList methods */
    STDMETHOD( get_CaseIgnoreList )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_CaseIgnoreList )( THIS_ VARIANT ) PURE;
};

/* IADsFaxNumber interface */
#undef INTERFACE
#define INTERFACE   IADsFaxNumber
DECLARE_INTERFACE_( IADsFaxNumber, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsFaxNumber methods */
    STDMETHOD( get_TelephoneNumber )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_TelephoneNumber )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Parameters )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_Parameters )( THIS_ VARIANT ) PURE;
};

/* IADsNetAddress interface */
#undef INTERFACE
#define INTERFACE   IADsNetAddress
DECLARE_INTERFACE_( IADsNetAddress, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsNetAddress methods */
    STDMETHOD( get_AddressType )( THIS_ long * ) PURE;
    STDMETHOD( put_AddressType )( THIS_ long ) PURE;
    STDMETHOD( get_Address )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_Address )( THIS_ VARIANT ) PURE;
};

/* IADsOctetList interface */
#undef INTERFACE
#define INTERFACE   IADsOctetList
DECLARE_INTERFACE_( IADsOctetList, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsOctetList methods */
    STDMETHOD( get_OctetList )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_OctetList )( THIS_ VARIANT ) PURE;
};

/* IADsEmail interface */
#undef INTERFACE
#define INTERFACE   IADsEmail
DECLARE_INTERFACE_( IADsEmail, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsEmail methods */
    STDMETHOD( get_Type )( THIS_ long * ) PURE;
    STDMETHOD( put_Type )( THIS_ long ) PURE;
    STDMETHOD( get_Address )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Address )( THIS_ BSTR ) PURE;
};

/* IADsPath interface */
#undef INTERFACE
#define INTERFACE   IADsPath
DECLARE_INTERFACE_( IADsPath, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsPath methods */
    STDMETHOD( get_Type )( THIS_ long * ) PURE;
    STDMETHOD( put_Type )( THIS_ long ) PURE;
    STDMETHOD( get_VolumeName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_VolumeName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Path )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_Path )( THIS_ BSTR ) PURE;
};

/* IADsReplicaPointer interface */
#undef INTERFACE
#define INTERFACE   IADsReplicaPointer
DECLARE_INTERFACE_( IADsReplicaPointer, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsReplicaPointer methods */
    STDMETHOD( get_ServerName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_ServerName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_ReplicaType )( THIS_ long * ) PURE;
    STDMETHOD( put_ReplicaType )( THIS_ long ) PURE;
    STDMETHOD( get_ReplicaNumber )( THIS_ long * ) PURE;
    STDMETHOD( put_ReplicaNumber )( THIS_ long ) PURE;
    STDMETHOD( get_Count )( THIS_ long * ) PURE;
    STDMETHOD( put_Count )( THIS_ long ) PURE;
    STDMETHOD( get_ReplicaAddressHints )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_ReplicaAddressHints )( THIS_ VARIANT ) PURE;
};

/* IADsAcl interface */
#undef INTERFACE
#define INTERFACE   IADsAcl
DECLARE_INTERFACE_( IADsAcl, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsAcl methods */
    STDMETHOD( get_ProtectedAttrName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_ProtectedAttrName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_SubjectName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_SubjectName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Privileges )( THIS_ long * ) PURE;
    STDMETHOD( put_Privileges )( THIS_ long ) PURE;
    STDMETHOD( CopyAcl )( THIS_ IDispatch ** ) PURE;
};

/* IADsTimestamp interface */
#undef INTERFACE
#define INTERFACE   IADsTimestamp
DECLARE_INTERFACE_( IADsTimestamp, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsTimestamp methods */
    STDMETHOD( get_WholeSeconds )( THIS_ long * ) PURE;
    STDMETHOD( put_WholeSeconds )( THIS_ long ) PURE;
    STDMETHOD( get_EventID )( THIS_ long * ) PURE;
    STDMETHOD( put_EventID )( THIS_ long ) PURE;
};

/* IADsPostalAddress interface */
#undef INTERFACE
#define INTERFACE   IADsPostalAddress
DECLARE_INTERFACE_( IADsPostalAddress, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsPostalAddress methods */
    STDMETHOD( get_PostalAddress )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_PostalAddress )( THIS_ VARIANT ) PURE;
};

/* IADsBackLink interface */
#undef INTERFACE
#define INTERFACE   IADsBackLink
DECLARE_INTERFACE_( IADsBackLink, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsBackLink methods */
    STDMETHOD( get_RemoteID )( THIS_ long * ) PURE;
    STDMETHOD( put_RemoteID )( THIS_ long ) PURE;
    STDMETHOD( get_ObjectName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_ObjectName )( THIS_ BSTR ) PURE;
};

/* IADsTypedName interface */
#undef INTERFACE
#define INTERFACE   IADsTypedName
DECLARE_INTERFACE_( IADsTypedName, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsTypedName methods */
    STDMETHOD( get_ObjectName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_ObjectName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Level )( THIS_ long * ) PURE;
    STDMETHOD( put_Level )( THIS_ long ) PURE;
    STDMETHOD( get_Interval )( THIS_ long * ) PURE;
    STDMETHOD( put_Interval )( THIS_ long ) PURE;
};

/* IADsHold interface */
#undef INTERFACE
#define INTERFACE   IADsHold
DECLARE_INTERFACE_( IADsHold, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsHold methods */
    STDMETHOD( get_ObjectName )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_ObjectName )( THIS_ BSTR ) PURE;
    STDMETHOD( get_Amount )( THIS_ long * ) PURE;
    STDMETHOD( put_Amount )( THIS_ long ) PURE;
};

/* IADsObjectOptions interface */
#undef INTERFACE
#define INTERFACE   IADsObjectOptions
DECLARE_INTERFACE_( IADsObjectOptions, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsObjectOptions methods */
    STDMETHOD( GetOption )( THIS_ long, VARIANT * ) PURE;
    STDMETHOD( SetOption )( THIS_ long, VARIANT ) PURE;
};

/* IADsPathname interface */
#undef INTERFACE
#define INTERFACE   IADsPathname
DECLARE_INTERFACE_( IADsPathname, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsPathname methods */
    STDMETHOD( Set )( THIS_ BSTR, long ) PURE;
    STDMETHOD( SetDisplayType )( THIS_ long ) PURE;
    STDMETHOD( Retrieve )( THIS_ long, BSTR * ) PURE;
    STDMETHOD( GetNumElements )( THIS_ long * ) PURE;
    STDMETHOD( GetElement )( THIS_ long, BSTR * ) PURE;
    STDMETHOD( AddLeafElement )( THIS_ BSTR ) PURE;
    STDMETHOD( RemoveLeafElement )( THIS ) PURE;
    STDMETHOD( CopyPath )( THIS_ IDispatch ** ) PURE;
    STDMETHOD( GetEscapedElement )( THIS_ long, BSTR, BSTR * ) PURE;
    STDMETHOD( get_EscapedMode )( THIS_ long * ) PURE;
    STDMETHOD( put_EscapedMode )( THIS_ long ) PURE;
};

/* IADsADSystemInfo interface */
#undef INTERFACE
#define INTERFACE   IADsADSystemInfo
DECLARE_INTERFACE_( IADsADSystemInfo, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsADSystemInfo methods */
    STDMETHOD( get_UserName )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ComputerName )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_SiteName )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_DomainShortName )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_DomainDNSName )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ForestDNSName )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_PDCRoleOwner )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_SchemaRoleOwner )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_IsNativeMode )( THIS_ VARIANT_BOOL * ) PURE;
    STDMETHOD( GetAnyDCName )( THIS_ BSTR * ) PURE;
    STDMETHOD( GetDCSiteName )( THIS_ BSTR, BSTR * ) PURE;
    STDMETHOD( RefreshSchemaCache )( THIS ) PURE;
    STDMETHOD( GetTrees )( THIS_ VARIANT * ) PURE;
};

/* IADsWinNTSystemInfo interface */
#undef INTERFACE
#define INTERFACE   IADsWinNTSystemInfo
DECLARE_INTERFACE_( IADsWinNTSystemInfo, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsWinNTSystemInfo methods */
    STDMETHOD( get_UserName )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_ComputerName )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_DomainName )( THIS_ BSTR * ) PURE;
    STDMETHOD( get_PDC )( THIS_ BSTR * ) PURE;
};

/* IADsDNWithBinary interface */
#undef INTERFACE
#define INTERFACE   IADsDNWithBinary
DECLARE_INTERFACE_( IADsDNWithBinary, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsDNWithBinary methods */
    STDMETHOD( get_BinaryValue )( THIS_ VARIANT * ) PURE;
    STDMETHOD( put_BinaryValue )( THIS_ VARIANT ) PURE;
    STDMETHOD( get_DNString )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_DNString )( THIS_ BSTR ) PURE;
};

/* IADsDNWithString interface */
#undef INTERFACE
#define INTERFACE   IADsDNWithString
DECLARE_INTERFACE_( IADsDNWithString, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsDNWithString methods */
    STDMETHOD( get_StringValue )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_StringValue )( THIS_ BSTR ) PURE;
    STDMETHOD( get_DNString )( THIS_ BSTR * ) PURE;
    STDMETHOD( put_DNString )( THIS_ BSTR ) PURE;
};

/* IADsSecurityUtility interface */
#undef INTERFACE
#define INTERFACE   IADsSecurityUtility
DECLARE_INTERFACE_( IADsSecurityUtility, IDispatch ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;
    
    /* IDispatch methods */
    STDMETHOD( GetTypeInfoCount )( THIS_ UINT * ) PURE;
    STDMETHOD( GetTypeInfo )( THIS_ UINT, LCID, ITypeInfo ** ) PURE;
    STDMETHOD( GetIDsOfNames )( THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID * ) PURE;
    STDMETHOD( Invoke )( THIS_ DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT * ) PURE;

    /* IADsSecurityUtility methods */
    STDMETHOD( GetSecurityDescriptor )( THIS_ VARIANT, long, long, VARIANT * ) PURE;
    STDMETHOD( SetSecurityDescriptor )( THIS_ VARIANT, long, VARIANT, long ) PURE;
    STDMETHOD( ConvertSecurityDescriptor )( THIS_ VARIANT, long, long, VARIANT * ) PURE;
    STDMETHOD( get_SecurityMask )( THIS_ long * ) PURE;
    STDMETHOD( put_SecurityMask )( THIS_ long ) PURE;
};

/* C object macros */
#if (!defined( __cplusplus ) || defined( CINTERFACE )) && defined( COBJMACROS )
    #define IADs_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADs_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADs_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADs_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADs_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADs_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADs_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADs_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADs_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADs_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADs_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADs_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADs_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADs_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADs_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADs_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADs_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADs_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADs_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADs_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsContainer_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsContainer_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsContainer_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsContainer_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsContainer_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsContainer_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsContainer_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsContainer_get_Count( x, p ) \
        (x)->lpVtbl->get_Count( x, p )
    #define IADsContainer_get__NewEnum( x, p ) \
        (x)->lpVtbl->get__NewEnum( x, p )
    #define IADsContainer_get_Filter( x, p ) \
        (x)->lpVtbl->get_Filter( x, p )
    #define IADsContainer_put_Filter( x, p ) \
        (x)->lpVtbl->put_Filter( x, p )
    #define IADsContainer_get_Hints( x, p ) \
        (x)->lpVtbl->get_Hints( x, p )
    #define IADsContainer_put_Hints( x, p ) \
        (x)->lpVtbl->put_Hints( x, p )
    #define IADsContainer_GetObject( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetObject( x, p1, p2, p3 )
    #define IADsContainer_Create( x, p1, p2, p3 ) \
        (x)->lpVtbl->Create( x, p1, p2, p3 )
    #define IADsContainer_Delete( x, p1, p2 ) \
        (x)->lpVtbl->Delete( x, p1, p2 )
    #define IADsContainer_CopyHere( x, p1, p2, p3 ) \
        (x)->lpVtbl->CopyHere( x, p1, p2, p3 )
    #define IADsContainer_MoveHere( x, p1, p2, p3 ) \
        (x)->lpVtbl->MoveHere( x, p1, p2, p3 )
    #define IADsCollection_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsCollection_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsCollection_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsCollection_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsCollection_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsCollection_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsCollection_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsCollection_get__NewEnum( x, p ) \
        (x)->lpVtbl->get__NewEnum( x, p )
    #define IADsCollection_Add( x, p1, p2 ) \
        (x)->lpVtbl->Add( x, p1, p2 )
    #define IADsCollection_Remove( x, p ) \
        (x)->lpVtbl->Remove( x, p )
    #define IADsCollection_GetObject( x, p1, p2 ) \
        (x)->lpVtbl->GetObject( x, p1, p2 )
    #define IADsMembers_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsMembers_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsMembers_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsMembers_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsMembers_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsMembers_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsMembers_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsMembers_get_Count( x, p ) \
        (x)->lpVtbl->get_Count( x, p )
    #define IADsMembers_get__NewEnum( x, p ) \
        (x)->lpVtbl->get__NewEnum( x, p )
    #define IADsMembers_get_Filter( x, p ) \
        (x)->lpVtbl->get_Filter( x, p )
    #define IADsMembers_put_Filter( x, p ) \
        (x)->lpVtbl->put_Filter( x, p )
    #define IADsPropertyList_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsPropertyList_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsPropertyList_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsPropertyList_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsPropertyList_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsPropertyList_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsPropertyList_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsPropertyList_get_PropertyCount( x, p ) \
        (x)->lpVtbl->get_PropertyCount( x, p )
    #define IADsPropertyList_Next( x, p ) \
        (x)->lpVtbl->Next( x, p )
    #define IADsPropertyList_Skip( x, p ) \
        (x)->lpVtbl->Skip( x, p )
    #define IADsPropertyList_Reset( x ) \
        (x)->lpVtbl->Reset( x )
    #define IADsPropertyList_Item( x, p1, p2 ) \
        (x)->lpVtbl->Item( x, p1, p2 )
    #define IADsPropertyList_GetPropertyItem( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetPropertyItem( x, p1, p2, p3 )
    #define IADsPropertyList_PutPropertyItem( x, p ) \
        (x)->lpVtbl->PutPropertyItem( x, p )
    #define IADsPropertyList_ResetPropertyItem( x, p ) \
        (x)->lpVtbl->ResetPropertyItem( x, p )
    #define IADsPropertyList_PurgePropertyList( x ) \
        (x)->lpVtbl->PurgePropertyList( x )
    #define IADsPropetryEntry_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsPropertyEntry_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsPropertyEntry_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsPropertyEntry_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsPropertyEntry_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsPropertyEntry_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsPropertyEntry_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsPropertyEntry_Clear( x ) \
        (x)->lpVtbl->Clear( x )
    #define IADsPropertyEntry_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsPropertyEntry_put_Name( x, p ) \
        (x)->lpVtbl->put_Name( x, p )
    #define IADsPropertyEntry_get_ADsType( x, p ) \
        (x)->lpVtbl->get_ADsType( x, p )
    #define IADsPropertyEntry_put_ADsType( x, p ) \
        (x)->lpVtbl->put_ADsType( x, p )
    #define IADsPropertyEntry_get_ControlCode( x, p ) \
        (x)->lpVtbl->get_ControlCode( x, p )
    #define IADsPropertyEntry_put_ControlCode( x, p ) \
        (x)->lpVtbl->put_ControlCode( x, p )
    #define IADsPropertyEntry_get_Values( x, p ) \
        (x)->lpVtbl->get_Values( x, p )
    #define IADsPropertyEntry_put_Values( x, p ) \
        (x)->lpVtbl->put_Values( x, p )
    #define IADsPropertyValue_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsPropertyValue_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsPropertyValue_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsPropertyValue_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsPropertyValue_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsPropertyValue_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsPropertyValue_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsPropertyValue_Clear( x ) \
        (x)->lpVtbl->Clear( x )
    #define IADsPropertyValue_get_ADsType( x, p ) \
        (x)->lpVtbl->get_ADsType( x, p )
    #define IADsPropertyValue_put_ADsType( x, p ) \
        (x)->lpVtbl->put_ADsType( x, p )
    #define IADsPropertyValue_get_DNString( x, p ) \
        (x)->lpVtbl->get_DNString( x, p )
    #define IADsPropertyValue_put_DNString( x, p ) \
        (x)->lpVtbl->put_DNString( x, p )
    #define IADsPropertyValue_get_CaseExactString( x, p ) \
        (x)->lpVtbl->get_CaseExactString( x, p )
    #define IADsPropertyValue_put_CaseExactString( x, p ) \
        (x)->lpVtbl->put_CaseExactString( x, p )
    #define IADsPropertyValue_get_PrintableString( x, p ) \
        (x)->lpVtbl->get_PrintableString( x, p )
    #define IADsPropertyValue_put_PrintableString( x, p ) \
        (x)->lpVtbl->put_PrintableString( x, p )
    #define IADsPropertyValue_get_NumericString( x, p ) \
        (x)->lpVtbl->get_NumericString( x, p )
    #define IADsPropertyValue_put_NumericString( x, p ) \
        (x)->lpVtbl->put_NumericString( x, p )
    #define IADsPropertyValue_get_Boolean( x, p ) \
        (x)->lpVtbl->get_Boolean( x, p )
    #define IADsPropertyValue_put_Boolean( x, p ) \
        (x)->lpVtbl->put_Boolean( x, p )
    #define IADsPropertyValue_get_Integer( x, p ) \
        (x)->lpVtbl->get_Integer( x, p )
    #define IADsPropertyValue_put_Integer( x, p ) \
        (x)->lpVtbl->put_Integer( x, p )
    #define IADsPropertyValue_get_OctetString( x, p ) \
        (x)->lpVtbl->get_OctetString( x, p )
    #define IADsPropertyValue_put_OctetString( x, p ) \
        (x)->lpVtbl->put_OctetString( x, p )
    #define IADsPropertyValue_get_SecurityDescriptor( x, p ) \
        (x)->lpVtbl->get_SecurityDescriptor( x, p )
    #define IADsPropertyValue_put_SecurityDescriptor( x, p ) \
        (x)->lpVtbl->put_SecurityDescriptor( x, p )
    #define IADsPropertyValue_get_LargeInteger( x, p ) \
        (x)->lpVtbl->get_LargeInteger( x, p )
    #define IADsPropertyValue_put_LargeInteger( x, p ) \
        (x)->lpVtbl->put_LargeInteger( x, p )
    #define IADsPropertyValue_get_UTCTime( x, p ) \
        (x)->lpVtbl->get_UTCTime( x, p )
    #define IADsPropertyValue_put_UTCTime( x, p ) \
        (x)->lpVtbl->put_UTCTime( x, p )
    #define IADsPropertyValue2_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsPropertyValue2_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsPropertyValue2_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsPropertyValue2_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsPropertyValue2_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsPropertyValue2_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsPropertyValue2_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsPropertyValue2_GetObjectProperty( x, p1, p2 ) \
        (x)->lpVtbl->GetObjectProperty( x, p1, p2 )
    #define IADsPropertyValue2_PutObjectProperty( x, p1, p2 ) \
        (x)->lpVtbl->PutObjectProperty( x, p1, p2 )
    #define IPrivateDispatch_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IPrivateDispatch_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IPrivateDispatch_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IPrivateDispatch_ADSIInitializeDispatchManager( x, p ) \
        (x)->lpVtbl->ADSIInitializeDispatchManager( x, p )
    #define IPrivateDispatch_ADSIGetTypeInfoCount( x, p ) \
        (x)->lpVtbl->ADSIGetTypeInfoCount( x, p )
    #define IPrivateDispatch_ADSIGetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->ADSIGetTypeInfo( x, p1, p2, p3 )
    #define IPrivateDispatch_ADSIGetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->ADSIGetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IPrivateDispatch_ADSIInvoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->ADSIInvoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IPrivateUnknown_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IPrivateUnknown_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IPrivateUnknown_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IPrivateUnknown_ADSIInitializeObject( x, p1, p2, p3 ) \
        (x)->lpVtbl->ADSIInitializeObject( x, p1, p2, p3 )
    #define IPrivateUnknown_ADSIReleaseObject( x ) \
        (x)->lpVtbl->ADSIReleaseObject( x )
    #define IADsExtension_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsExtension_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsExtension_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsExtension_Operate( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->Operate( x, p1, p2, p3, p4 )
    #define IADsExtension_PrivateGetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->PrivateGetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsExtension_PrivateInvoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->PrivateInvoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsDeleteOps_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsDeleteOps_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsDeleteOps_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsDeleteOps_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsDeleteOps_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsDeleteOps_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsDeleteOps_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsDeleteOps_DeleteObject( x, p ) \
        (x)->lpVtbl->DeleteObject( x, p )
    #define IADsNamespaces_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsNamespaces_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsNamespaces_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsNamespaces_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsNamespaces_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsNamespaces_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsNamespaces_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsNamespaces_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsNamespaces_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsNamespaces_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsNamespaces_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsNamespaces_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsNamespaces_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsNamespaces_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsNamespaces_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsNamespaces_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsNamespaces_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsNamespaces_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsNamespaces_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsNamespaces_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsNamespaces_get_DefaultContainer( x, p ) \
        (x)->lpVtbl->get_DefaultContainer( x, p )
    #define IADsNamespaces_put_DefaultContainer( x, p ) \
        (x)->lpVtbl->put_DefaultContainer( x, p )
    #define IADsClass_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsClass_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsClass_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsClass_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsClass_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsClass_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsClass_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsClass_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsClass_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsClass_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsClass_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsClass_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsClass_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsClass_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsClass_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsClass_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsClass_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsClass_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsClass_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsClass_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsClass_get_PrimaryInterface( x, p ) \
        (x)->lpVtbl->get_PrimaryInterface( x, p )
    #define IADsClass_get_CLSID( x, p ) \
        (x)->lpVtbl->get_CLSID( x, p )
    #define IADsClass_put_CLSID( x, p ) \
        (x)->lpVtbl->put_CLSID( x, p )
    #define IADsClass_get_OID( x, p ) \
        (x)->lpVtbl->get_OID( x, p )
    #define IADsClass_put_OID( x, p ) \
        (x)->lpVtbl->put_OID( x, p )
    #define IADsClass_get_Abstract( x, p ) \
        (x)->lpVtbl->get_Abstract( x, p )
    #define IADsClass_put_Abstract( x, p ) \
        (x)->lpVtbl->put_Abstract( x, p )
    #define IADsClass_get_Auxiliary( x, p ) \
        (x)->lpVtbl->get_Auxiliary( x, p )
    #define IADsClass_put_Auxiliary( x, p ) \
        (x)->lpVtbl->put_Auxiliary( x, p )
    #define IADsClass_get_MandatoryProperties( x, p ) \
        (x)->lpVtbl->get_MandatoryProperties( x, p )
    #define IADsClass_put_MandatoryProperties( x, p ) \
        (x)->lpVtbl->put_MandatoryProperties( x, p )
    #define IADsClass_get_OptionalProperties( x, p ) \
        (x)->lpVtbl->get_OptionalProperties( x, p )
    #define IADsClass_put_OptionalProperties( x, p ) \
        (x)->lpVtbl->put_OptionalProperties( x, p )
    #define IADsClass_get_NamingProperties( x, p ) \
        (x)->lpVtbl->get_NamingProperties( x, p )
    #define IADsClass_put_NamingProperties( x, p ) \
        (x)->lpVtbl->put_NamingProperties( x, p )
    #define IADsClass_get_DerivedFrom( x, p ) \
        (x)->lpVtbl->get_DerivedFrom( x, p )
    #define IADsClass_put_DerivedFrom( x, p ) \
        (x)->lpVtbl->put_DerivedFrom( x, p )
    #define IADsClass_get_AuxDerivedFrom( x, p ) \
        (x)->lpVtbl->get_AuxDerivedFrom( x, p )
    #define IADsClass_put_AuxDerivedFrom( x, p ) \
        (x)->lpVtbl->put_AuxDerivedFrom( x, p )
    #define IADsClass_get_PossibleSuperiors( x, p ) \
        (x)->lpVtbl->get_PossibleSuperiors( x, p )
    #define IADsClass_put_PossibleSuperiors( x, p ) \
        (x)->lpVtbl->put_PossibleSuperiors( x, p )
    #define IADsClass_get_Containment( x, p ) \
        (x)->lpVtbl->get_Containment( x, p )
    #define IADsClass_put_Containment( x, p ) \
        (x)->lpVtbl->put_Containment( x, p )
    #define IADsClass_get_Container( x, p ) \
        (x)->lpVtbl->get_Container( x, p )
    #define IADsClass_put_Container( x, p ) \
        (x)->lpVtbl->put_Container( x, p )
    #define IADsClass_get_HelpFileName( x, p ) \
        (x)->lpVtbl->get_HelpFileName( x, p )
    #define IADsClass_put_HelpFileName( x, p ) \
        (x)->lpVtbl->put_HelpFileName( x, p )
    #define IADsClass_get_HelpFileContext( x, p ) \
        (x)->lpVtbl->get_HelpFileContext( x, p )
    #define IADsClass_put_HelpFileContext( x, p ) \
        (x)->lpVtbl->put_HelpFileContext( x, p )
    #define IADsClass_Qualifiers( x, p ) \
        (x)->lpVtbl->Qualifiers( x, p )
    #define IADsProperty_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsProperty_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsProperty_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsProperty_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsProperty_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsProperty_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsProperty_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsProperty_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsProperty_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsProperty_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsProperty_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsProperty_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsProperty_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsProperty_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsProperty_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsProperty_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsProperty_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsProperty_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsProperty_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsProperty_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsProperty_get_OID( x, p ) \
        (x)->lpVtbl->get_OID( x, p )
    #define IADsProperty_put_OID( x, p ) \
        (x)->lpVtbl->put_OID( x, p )
    #define IADsProperty_get_Syntax( x, p ) \
        (x)->lpVtbl->get_Syntax( x, p )
    #define IADsProperty_put_Syntax( x, p ) \
        (x)->lpVtbl->put_Syntax( x, p )
    #define IADsProperty_get_MaxRange( x, p ) \
        (x)->lpVtbl->get_MaxRange( x, p )
    #define IADsProperty_put_MaxRange( x, p ) \
        (x)->lpVtbl->put_MaxRange( x, p )
    #define IADsProperty_get_MinRange( x, p ) \
        (x)->lpVtbl->get_MinRange( x, p )
    #define IADsProperty_put_MinRange( x, p ) \
        (x)->lpVtbl->put_MinRange( x, p )
    #define IADsProperty_get_MultiValued( x, p ) \
        (x)->lpVtbl->get_MultiValued( x, p )
    #define IADsProperty_put_MultiValued( x, p ) \
        (x)->lpVtbl->put_MultiValued( x, p )
    #define IADsProperty_Qualifiers( x, p ) \
        (x)->lpVtbl->Qualifiers( x, p )
    #define IADsSyntax_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsSyntax_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsSyntax_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsSyntax_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsSyntax_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsSyntax_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsSyntax_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsSyntax_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsSyntax_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsSyntax_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsSyntax_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsSyntax_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsSyntax_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsSyntax_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsSyntax_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsSyntax_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsSyntax_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsSyntax_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsSyntax_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsSyntax_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsSyntax_get_OleAutoDataType( x, p ) \
        (x)->lpVtbl->get_OleAutoDataType( x, p )
    #define IADsSyntax_put_OleAutoDataType( x, p ) \
        (x)->lpVtbl->put_OleAutoDataType( x, p )
    #define IADsLocality_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsLocality_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsLocality_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsLocality_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsLocality_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsLocality_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsLocality_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsLocality_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsLocality_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsLocality_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsLocality_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsLocality_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsLocality_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsLocality_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsLocality_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsLocality_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsLocality_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsLocality_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsLocality_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsLocality_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsLocality_get_Description( x, p ) \
        (x)->lpVtbl->get_Description( x, p )
    #define IADsLocality_put_Description( x, p ) \
        (x)->lpVtbl->put_Description( x, p )
    #define IADsLocality_get_LocalityName( x, p ) \
        (x)->lpVtbl->get_LocalityName( x, p )
    #define IADsLocality_put_LocalityName( x, p ) \
        (x)->lpVtbl->put_LocalityName( x, p )
    #define IADsLocality_get_PostalAddress( x, p ) \
        (x)->lpVtbl->get_PostalAddress( x, p )
    #define IADsLocality_put_PostalAddress( x, p ) \
        (x)->lpVtbl->put_PostalAddress( x, p )
    #define IADsLocality_get_SeeAlso( x, p ) \
        (x)->lpVtbl->get_SeeAlso( x, p )
    #define IADsLocality_put_SeeAlso( x, p ) \
        (x)->lpVtbl->put_SeeAlso( x, p )
    #define IADsO_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsO_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsO_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsO_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsO_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsO_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsO_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsO_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsO_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsO_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsO_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsO_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsO_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsO_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsO_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsO_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsO_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsO_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsO_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsO_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsO_get_Description( x, p ) \
        (x)->lpVtbl->get_Description( x, p )
    #define IADsO_put_Description( x, p ) \
        (x)->lpVtbl->put_Description( x, p )
    #define IADsO_get_LocalityName( x, p ) \
        (x)->lpVtbl->get_LocalityName( x, p )
    #define IADsO_put_LocalityName( x, p ) \
        (x)->lpVtbl->put_LocalityName( x, p )
    #define IADsO_get_PostalAddress( x, p ) \
        (x)->lpVtbl->get_PostalAddress( x, p )
    #define IADsO_put_PostalAddress( x, p ) \
        (x)->lpVtbl->put_PostalAddress( x, p )
    #define IADsO_get_TelephoneNumber( x, p ) \
        (x)->lpVtbl->get_TelephoneNumber( x, p )
    #define IADsO_put_TelephoneNumber( x, p ) \
        (x)->lpVtbl->put_TelephoneNumber( x, p )
    #define IADsO_get_FaxNumber( x, p ) \
        (x)->lpVtbl->get_FaxNumber( x, p )
    #define IADsO_put_FaxNumber( x, p ) \
        (x)->lpVtbl->put_FaxNumber( x, p )
    #define IADsO_get_SeeAlso( x, p ) \
        (x)->lpVtbl->get_SeeAlso( x, p )
    #define IADsO_put_SeeAlso( x, p ) \
        (x)->lpVtbl->put_SeeAlso( x, p )
    #define IADsOU_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsOU_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsOU_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsOU_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsOU_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsOU_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsOU_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsOU_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsOU_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsOU_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsOU_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsOU_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsOU_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsOU_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsOU_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsOU_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsOU_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsOU_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsOU_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsOU_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsOU_get_Description( x, p ) \
        (x)->lpVtbl->get_Description( x, p )
    #define IADsOU_put_Description( x, p ) \
        (x)->lpVtbl->put_Description( x, p )
    #define IADsOU_get_LocalityName( x, p ) \
        (x)->lpVtbl->get_LocalityName( x, p )
    #define IADsOU_put_LocalityName( x, p ) \
        (x)->lpVtbl->put_LocalityName( x, p )
    #define IADsOU_get_PostalAddress( x, p ) \
        (x)->lpVtbl->get_PostalAddress( x, p )
    #define IADsOU_put_PostalAddress( x, p ) \
        (x)->lpVtbl->put_PostalAddress( x, p )
    #define IADsOU_get_TelephoneNumber( x, p ) \
        (x)->lpVtbl->get_TelephoneNumber( x, p )
    #define IADsOU_put_TelephoneNumber( x, p ) \
        (x)->lpVtbl->put_TelephoneNumber( x, p )
    #define IADsOU_get_FaxNumber( x, p ) \
        (x)->lpVtbl->get_FaxNumber( x, p )
    #define IADsOU_put_FaxNumber( x, p ) \
        (x)->lpVtbl->put_FaxNumber( x, p )
    #define IADsOU_get_SeeAlso( x, p ) \
        (x)->lpVtbl->get_SeeAlso( x, p )
    #define IADsOU_put_SeeAlso( x, p ) \
        (x)->lpVtbl->put_SeeAlso( x, p )
    #define IADsOU_get_BusinessCategory( x, p ) \
        (x)->lpVtbl->get_BusinessCategory( x, p )
    #define IADsOU_put_BusinessCategory( x, p ) \
        (x)->lpVtbl->put_BusinessCategory( x, p )
    #define IADsDomain_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsDomain_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsDomain_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsDomain_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsDomain_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsDomain_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsDomain_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsDomain_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsDomain_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsDomain_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsDomain_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsDomain_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsDomain_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsDomain_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsDomain_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsDomain_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsDomain_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsDomain_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsDomain_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsDomain_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsDomain_get_IsWorkgroup( x, p ) \
        (x)->lpVtbl->get_IsWorkgroup( x, p )
    #define IADsDomain_get_MinPasswordLength( x, p ) \
        (x)->lpVtbl->get_MinPasswordLength( x, p )
    #define IADsDomain_put_MinPasswordLength( x, p ) \
        (x)->lpVtbl->put_MinPasswordLength( x, p )
    #define IADsDomain_get_MinPasswordAge( x, p ) \
        (x)->lpVtbl->get_MinPasswordAge( x, p )
    #define IADsDomain_put_MinPasswordAge( x, p ) \
        (x)->lpVtbl->put_MinPasswordAge( x, p )
    #define IADsDomain_get_MaxPasswordAge( x, p ) \
        (x)->lpVtbl->get_MaxPasswordAge( x, p )
    #define IADsDomain_put_MaxPasswordAge( x, p ) \
        (x)->lpVtbl->put_MaxPasswordAge( x, p )
    #define IADsDomain_get_MaxBadPasswordsAllowed( x, p ) \
        (x)->lpVtbl->get_MaxBadPasswordsAllowed( x, p )
    #define IADsDomain_put_MaxBadPasswordsAllowed( x, p ) \
        (x)->lpVtbl->put_MaxBadPasswordsAllowed( x, p )
    #define IADsDomain_get_PasswordHistoryLength( x, p ) \
        (x)->lpVtbl->get_PasswordHistoryLength( x, p )
    #define IADsDomain_put_PasswordHistoryLength( x, p ) \
        (x)->lpVtbl->put_PasswordHistoryLength( x, p )
    #define IADsDomain_get_PasswordAttributes( x, p ) \
        (x)->lpVtbl->get_PasswordAttributes( x, p )
    #define IADsDomain_put_PasswordAttributes( x, p ) \
        (x)->lpVtbl->put_PasswordAttributes( x, p )
    #define IADsDomain_get_AutoUnlockInterval( x, p ) \
        (x)->lpVtbl->get_AutoUnlockInterval( x, p )
    #define IADsDomain_put_AutoUnlockInterval( x, p ) \
        (x)->lpVtbl->put_AutoUnlockInterval( x, p )
    #define IADsDomain_get_LockoutObservationInterval( x, p ) \
        (x)->lpVtbl->get_LockoutObservationInterval( x, p )
    #define IADsDomain_put_LockoutObservationInterval( x, p ) \
        (x)->lpVtbl->put_LockoutObservationInterval( x, p )
    #define IADsComputer_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsComputer_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsComputer_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsComputer_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsComputer_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsComputer_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsComputer_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsComputer_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsComputer_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsComputer_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsComputer_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsComputer_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsComputer_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsComputer_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsComputer_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsComputer_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsComputer_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsComputer_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsComputer_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsComputer_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsComputer_get_ComputerID( x, p ) \
        (x)->lpVtbl->get_ComputerID( x, p )
    #define IADsComputer_get_Site( x, p ) \
        (x)->lpVtbl->get_Site( x, p )
    #define IADsComputer_get_Description( x, p ) \
        (x)->lpVtbl->get_Description( x, p )
    #define IADsComputer_put_Description( x, p ) \
        (x)->lpVtbl->put_Description( x, p )
    #define IADsComputer_get_Location( x, p ) \
        (x)->lpVtbl->get_Location( x, p )
    #define IADsComputer_put_Location( x, p ) \
        (x)->lpVtbl->put_Location( x, p )
    #define IADsComputer_get_PrimaryUser( x, p ) \
        (x)->lpVtbl->get_PrimaryUser( x, p )
    #define IADsComputer_put_PrimaryUser( x, p ) \
        (x)->lpVtbl->put_PrimaryUser( x, p )
    #define IADsComputer_get_Owner( x, p ) \
        (x)->lpVtbl->get_Owner( x, p )
    #define IADsComputer_put_Owner( x, p ) \
        (x)->lpVtbl->put_Owner( x, p )
    #define IADsComputer_get_Division( x, p ) \
        (x)->lpVtbl->get_Division( x, p )
    #define IADsComputer_put_Division( x, p ) \
        (x)->lpVtbl->put_Division( x, p )
    #define IADsComputer_get_Department( x, p ) \
        (x)->lpVtbl->get_Department( x, p )
    #define IADsComputer_put_Department( x, p ) \
        (x)->lpVtbl->put_Department( x, p )
    #define IADsComputer_get_Role( x, p ) \
        (x)->lpVtbl->get_Role( x, p )
    #define IADsComputer_put_Role( x, p ) \
        (x)->lpVtbl->put_Role( x, p )
    #define IADsComputer_get_OperatingSystem( x, p ) \
        (x)->lpVtbl->get_OperatingSystem( x, p )
    #define IADsComputer_put_OperatingSystem( x, p ) \
        (x)->lpVtbl->put_OperatingSystem( x, p )
    #define IADsComputer_get_OperatingSystemVersion( x, p ) \
        (x)->lpVtbl->get_OperatingSystemVersion( x, p )
    #define IADsComputer_put_OperatingSystemVersion( x, p ) \
        (x)->lpVtbl->put_OperatingSystemVersion( x, p )
    #define IADsComputer_get_Model( x, p ) \
        (x)->lpVtbl->get_Model( x, p )
    #define IADsComputer_put_Model( x, p ) \
        (x)->lpVtbl->put_Model( x, p )
    #define IADsComputer_get_Processor( x, p ) \
        (x)->lpVtbl->get_Processor( x, p )
    #define IADsComputer_put_Processor( x, p ) \
        (x)->lpVtbl->put_Processor( x, p )
    #define IADsComputer_get_ProcessorCount( x, p ) \
        (x)->lpVtbl->get_ProcessorCount( x, p )
    #define IADsComputer_put_ProcessorCount( x, p ) \
        (x)->lpVtbl->put_ProcessorCount( x, p )
    #define IADsComputer_get_MemorySize( x, p ) \
        (x)->lpVtbl->get_MemorySize( x, p )
    #define IADsComputer_put_MemorySize( x, p ) \
        (x)->lpVtbl->put_MemorySize( x, p )
    #define IADsComputer_get_StorageCapacity( x, p ) \
        (x)->lpVtbl->get_StorageCapacity( x, p )
    #define IADsComputer_put_StorageCapacity( x, p ) \
        (x)->lpVtbl->put_StorageCapacity( x, p )
    #define IADsComputer_get_NetAddresses( x, p ) \
        (x)->lpVtbl->get_NetAddresses( x, p )
    #define IADsComputer_put_NetAddresses( x, p ) \
        (x)->lpVtbl->put_NetAddresses( x, p )
    #define IADsComputerOperations_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsComputerOperations_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsComputerOperations_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsComputerOperations_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsComputerOperations_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsComputerOperations_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsComputerOperations_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsComputerOperations_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsComputerOperations_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsComputerOperations_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsComputerOperations_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsComputerOperations_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsComputerOperations_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsComputerOperations_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsComputerOperations_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsComputerOperations_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsComputerOperations_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsComputerOperations_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsComputerOperations_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsComputerOperations_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsComputerOperations_Status( x, p ) \
        (x)->lpVtbl->Status( x, p )
    #define IADsComputerOperations_Shutdown( x, p ) \
        (x)->lpVtbl->Shutdown( x, p )
    #define IADsGroup_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsGroup_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsGroup_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsGroup_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsGroup_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsGroup_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsGroup_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsGroup_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsGroup_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsGroup_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsGroup_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsGroup_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsGroup_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsGroup_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsGroup_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsGroup_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsGroup_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsGroup_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsGroup_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsGroup_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsGroup_get_Description( x, p ) \
        (x)->lpVtbl->get_Description( x, p )
    #define IADsGroup_put_Description( x, p ) \
        (x)->lpVtbl->put_Description( x, p )
    #define IADsGroup_Members( x, p ) \
        (x)->lpVtbl->Members( x, p )
    #define IADsGroup_IsMember( x, p1, p2 ) \
        (x)->lpVtbl->IsMember( x, p1, p2 )
    #define IADsGroup_Add( x, p ) \
        (x)->lpVtbl->Add( x, p )
    #define IADsGroup_Remove( x, p ) \
        (x)->lpVtbl->Remove( x, p )
    #define IADsUser_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsUser_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsUser_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsUser_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsUser_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsUser_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsUser_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsUser_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsUser_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsUser_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsUser_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsUser_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsUser_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsUser_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsUser_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsUser_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsUser_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsUser_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsUser_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsUser_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsUser_get_BadLoginAddress( x, p ) \
        (x)->lpVtbl->get_BadLoginAddress( x, p )
    #define IADsUser_get_BadLoginCount( x, p ) \
        (x)->lpVtbl->get_BadLoginCount( x, p )
    #define IADsUser_get_LastLogin( x, p ) \
        (x)->lpVtbl->get_LastLogin( x, p )
    #define IADsUser_get_LastLogoff( x, p ) \
        (x)->lpVtbl->get_LastLogoff( x, p )
    #define IADsUser_get_LastFailedLogin( x, p ) \
        (x)->lpVtbl->get_LastFailedLogin( x, p )
    #define IADsUser_get_PasswordLastChanged( x, p ) \
        (x)->lpVtbl->get_PasswordLastChanged( x, p )
    #define IADsUser_get_Description( x, p ) \
        (x)->lpVtbl->get_Description( x, p )
    #define IADsUser_put_Description( x, p ) \
        (x)->lpVtbl->put_Description( x, p )
    #define IADsUser_get_Division( x, p ) \
        (x)->lpVtbl->get_Division( x, p )
    #define IADsUser_put_Division( x, p ) \
        (x)->lpVtbl->put_Division( x, p )
    #define IADsUser_get_Department( x, p ) \
        (x)->lpVtbl->get_Department( x, p )
    #define IADsUser_put_Department( x, p ) \
        (x)->lpVtbl->put_Department( x, p )
    #define IADsUSer_get_EmployeeID( x, p ) \
        (x)->lpVtbl->get_EmployeeID( x, p )
    #define IADsUser_put_EmployeeID( x, p ) \
        (x)->lpVtbl->put_EmployeeID( x, p )
    #define IADsUser_get_FullName( x, p ) \
        (x)->lpVtbl->get_FullName( x, p )
    #define IADsUser_put_FullName( x, p ) \
        (x)->lpVtbl->put_FullName( x, p )
    #define IADsUser_get_FirstName( x, p ) \
        (x)->lpVtbl->get_FirstName( x, p )
    #define IADsUser_put_FirstName( x, p ) \
        (x)->lpVtbl->put_FirstName( x, p )
    #define IADsUser_get_LastName( x, p ) \
        (x)->lpVtbl->get_LastName( x, p )
    #define IADsUser_put_LastName( x, p ) \
        (x)->lpVtbl->put_LastName( x, p )
    #define IADsUser_get_OtherName( x, p ) \
        (x)->lpVtbl->get_OtherName( x, p )
    #define IADsUser_put_OtherName( x, p ) \
        (x)->lpVtbl->put_OtherName( x, p )
    #define IADsUser_get_NamePrefix( x, p ) \
        (x)->lpVtbl->get_NamePrefix( x, p )
    #define IADsUser_put_NamePrefix( x, p ) \
        (x)->lpVtbl->put_NamePrefix( x, p )
    #define IADsUser_get_NameSuffix( x, p ) \
        (x)->lpVtbl->get_NameSuffix( x, p )
    #define IADsUser_put_NameSuffix( x, p ) \
        (x)->lpVtbl->put_NameSuffix( x, p )
    #define IADsUser_get_Title( x, p ) \
        (x)->lpVtbl->get_Title( x, p )
    #define IADsUser_put_Title( x, p ) \
        (x)->lpVtbl->put_Title( x, p )
    #define IADsUser_get_Manager( x, p ) \
        (x)->lpVtbl->get_Manager( x, p )
    #define IADsUser_put_Manager( x, p ) \
        (x)->lpVtbl->put_Manager( x, p )
    #define IADsUser_get_TelephoneHome( x, p ) \
        (x)->lpVtbl->get_TelephoneHome( x, p )
    #define IADsUser_put_TelephoneHome( x, p ) \
        (x)->lpVtbl->put_TelephoneHome( x, p )
    #define IADsUser_get_TelephoneMobile( x, p ) \
        (x)->lpVtbl->get_TelephoneMobile( x, p )
    #define IADsUser_put_TelephoneMobile( x, p ) \
        (x)->lpVtbl->put_TelephoneMobile( x, p )
    #define IADsUser_get_TelephoneNumber( x, p ) \
        (x)->lpVtbl->get_TelephoneNumber( x, p )
    #define IADsUser_put_TelephoneNumber( x, p ) \
        (x)->lpVtbl->put_TelephoneNumber( x, p )
    #define IADsUser_get_TelephonePager( x, p ) \
        (x)->lpVtbl->get_TelephonePager( x, p )
    #define IADsUser_put_TelephonePager( x, p ) \
        (x)->lpVtbl->put_TelephonePager( x, p )
    #define IADsUser_get_FaxNumber( x, p ) \
        (x)->lpVtbl->get_FaxNumber( x, p )
    #define IADsUser_put_FaxNumber( x, p ) \
        (x)->lpVtbl->put_FaxNumber( x, p )
    #define IADsUser_get_OfficeLocations( x, p ) \
        (x)->lpVtbl->get_OfficeLocations( x, p )
    #define IADsUser_put_OfficeLocations( x, p ) \
        (x)->lpVtbl->put_OfficeLocations( x, p )
    #define IADsUser_get_PostalAddresses( x, p ) \
        (x)->lpVtbl->get_PostalAddresses( x, p )
    #define IADsUser_put_PostalAddresses( x, p ) \
        (x)->lpVtbl->put_PostalAddresses( x, p )
    #define IADsUser_get_PostalCodes( x, p ) \
        (x)->lpVtbl->get_PostalCodes( x, p )
    #define IADsUser_put_PostalCodes( x, p ) \
        (x)->lpVtbl->put_PostalCodes( x, p )
    #define IADsUser_get_SeeAlso( x, p ) \
        (x)->lpVtbl->get_SeeAlso( x, p )
    #define IADsUser_put_SeeAlso( x, p ) \
        (x)->lpVtbl->put_SeeAlso( x, p )
    #define IADsUser_get_AccountDisabled( x, p ) \
        (x)->lpVtbl->get_AccountDisabled( x, p )
    #define IADsUser_put_AccountDisabled( x, p ) \
        (x)->lpVtbl->put_AccountDisabled( x, p )
    #define IADsUser_get_AccountExpirationDate( x, p ) \
        (x)->lpVtbl->get_AccountExpirationDate( x, p )
    #define IADsUser_put_AccountExpirationDate( x, p ) \
        (x)->lpVtbl->put_AccountExpirationDate( x, p )
    #define IADsUser_get_GraceLoginsAllowed( x, p ) \
        (x)->lpVtbl->get_GraceLoginsAllowed( x, p )
    #define IADsUser_put_GraceLoginsAllowed( x, p ) \
        (x)->lpVtbl->put_GraceLoginsAllowed( x, p )
    #define IADsUser_get_GraceLoginsRemaining( x, p ) \
        (x)->lpVtbl->get_GraceLoginsRemaining( x, p )
    #define IADsUser_put_GraceLoginsRemaining( x, p ) \
        (x)->lpVtbl->put_GraceLoginsRemaining( x, p )
    #define IADsUser_get_IsAccountLocked( x, p ) \
        (x)->lpVtbl->get_IsAccountLocked( x, p )
    #define IADsUser_put_IsAccountLocked( x, p ) \
        (x)->lpVtbl->put_IsAccountLocked( x, p )
    #define IADsUser_get_LoginHours( x, p ) \
        (x)->lpVtbl->get_LoginHours( x, p )
    #define IADsUser_put_LoginHours( x, p ) \
        (x)->lpVtbl->put_LoginHours( x, p )
    #define IADsUser_get_LoginWorkstations( x, p ) \
        (x)->lpVtbl->get_LoginWorkstations( x, p )
    #define IADsUser_put_LoginWorkstations( x, p ) \
        (x)->lpVtbl->put_LoginWorkstations( x, p )
    #define IADsUser_get_MaxLogins( x, p ) \
        (x)->lpVtbl->get_MaxLogins( x, p )
    #define IADsUser_put_MaxLogins( x, p ) \
        (x)->lpVtbl->put_MaxLogins( x, p )
    #define IADsUser_get_MaxStorage( x, p ) \
        (x)->lpVtbl->get_MaxStorage( x, p )
    #define IADsUser_put_MaxStorage( x, p ) \
        (x)->lpVtbl->put_MaxStorage( x, p )
    #define IADsUser_get_PasswordExpirationDate( x, p ) \
        (x)->lpVtbl->get_PasswordExpirationDate( x, p )
    #define IADsUser_put_PasswordExpirationDate( x, p ) \
        (x)->lpVtbl->put_PasswordExpirationDate( x, p )
    #define IADsUser_get_PasswordMinimumLength( x, p ) \
        (x)->lpVtbl->get_PasswordMinimumLength( x, p )
    #define IADsUser_put_PasswordMinimumLength( x, p ) \
        (x)->lpVtbl->put_PasswordMinimumLength( x, p )
    #define IADsUser_get_PasswordRequired( x, p ) \
        (x)->lpVtbl->get_PasswordRequired( x, p )
    #define IADsUser_put_PasswordRequired( x, p ) \
        (x)->lpVtbl->put_PasswordRequired( x, p )
    #define IADsUser_get_RequireUniquePassword( x, p ) \
        (x)->lpVtbl->get_RequireUniquePassword( x, p )
    #define IADsUser_put_RequireUniquePassword( x, p ) \
        (x)->lpVtbl->put_RequireUniquePassword( x, p )
    #define IADsUser_get_EmailAddress( x, p ) \
        (x)->lpVtbl->get_EmailAddress( x, p )
    #define IADsUser_put_EmailAddress( x, p ) \
        (x)->lpVtbl->put_EmailAddress( x, p )
    #define IADsUser_get_HomeDirectory( x, p ) \
        (x)->lpVtbl->get_HomeDirectory( x, p )
    #define IADsUser_put_HomeDirectory( x, p ) \
        (x)->lpVtbl->put_HomeDirectory( x, p )
    #define IADsUser_get_Languages( x, p ) \
        (x)->lpVtbl->get_Languages( x, p )
    #define IADsUser_put_Languages( x, p ) \
        (x)->lpVtbl->put_Languages( x, p )
    #define IADsUser_get_Profile( x, p ) \
        (x)->lpVtbl->get_Profile( x, p )
    #define IADsUser_put_Profile( x, p ) \
        (x)->lpVtbl->put_Profile( x, p )
    #define IADsUser_get_LoginScript( x, p ) \
        (x)->lpVtbl->get_LoginScript( x, p )
    #define IADsUser_put_LoginScript( x, p ) \
        (x)->lpVtbl->put_LoginScript( x, p )
    #define IADsUser_get_Picture( x, p ) \
        (x)->lpVtbl->get_Picture( x, p )
    #define IADsUser_put_Picture( x, p ) \
        (x)->lpVtbl->put_Picture( x, p )
    #define IADsUser_get_HomePage( x, p ) \
        (x)->lpVtbl->get_HomePage( x, p )
    #define IADsUser_put_HomePage( x, p ) \
        (x)->lpVtbl->put_HomePage( x, p )
    #define IADsUser_Groups( x, p ) \
        (x)->lpVtbl->Groups( x, p )
    #define IADsUser_SetPassword( x, p ) \
        (x)->lpVtbl->SetPassword( x, p )
    #define IADsUser_ChangePassword( x, p1, p2 ) \
        (x)->lpVtbl->ChangePassword( x, p1, p2 )
    #define IADsPrintQueue_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsPrintQueue_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsPrintQueue_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsPrintQueue_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsPrintQueue_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsPrintQueue_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsPrintQueue_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsPrintQueue_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsPrintQueue_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsPrintQueue_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsPrintQueue_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsPrintQueue_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsPrintQueue_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsPrintQueue_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsPrintQueue_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsPrintQueue_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsPrintQueue_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsPrintQueue_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsPrintQueue_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsPrintQueue_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsPrintQueue_get_PrinterPath( x, p ) \
        (x)->lpVtbl->get_PrinterPath( x, p )
    #define IADsPrintQueue_put_PrinterPath( x, p ) \
        (x)->lpVtbl->put_PrinterPath( x, p )
    #define IADsPrintQueue_get_Model( x, p ) \
        (x)->lpVtbl->get_Model( x, p )
    #define IADsPrintQueue_put_Model( x, p ) \
        (x)->lpVtbl->put_Model( x, p )
    #define IADsPrintQueue_get_Datatype( x, p ) \
        (x)->lpVtbl->get_Datatype( x, p )
    #define IADsPrintQueue_put_Datatype( x, p ) \
        (x)->lpVtbl->put_Datatype( x, p )
    #define IADsPrintQueue_get_PrintProcessor( x, p ) \
        (x)->lpVtbl->get_PrintProcessor( x, p )
    #define IADsPrintQueue_put_PrintProcessor( x, p ) \
        (x)->lpVtbl->put_PrintProcessor( x, p )
    #define IADsPrintQueue_get_Description( x, p ) \
        (x)->lpVtbl->get_Description( x, p )
    #define IADsPrintQueue_put_Description( x, p ) \
        (x)->lpVtbl->put_Description( x, p )
    #define IADsPrintQueue_get_Location( x, p ) \
        (x)->lpVtbl->get_Location( x, p )
    #define IADsPrintQueue_put_Location( x, p ) \
        (x)->lpVtbl->put_Location( x, p )
    #define IADsPrintQueue_get_StartTime( x, p ) \
        (x)->lpVtbl->get_StartTime( x, p )
    #define IADsPrintQueue_put_StartTime( x, p ) \
        (x)->lpVtbl->put_StartTime( x, p )
    #define IADsPrintQueue_get_UntilTime( x, p ) \
        (x)->lpVtbl->get_UntilTime( x, p )
    #define IADsPrintQueue_put_UntilTime( x, p ) \
        (x)->lpVtbl->put_UntilTime( x, p )
    #define IADsPrintQueue_get_DefaultJobPriority( x, p ) \
        (x)->lpVtbl->get_DefaultJobPriority( x, p )
    #define IADsPrintQueue_put_DefaultJobPriority( x, p ) \
        (x)->lpVtbl->put_DefaultJobPriority( x, p )
    #define IADsPrintQueue_get_Priority( x, p ) \
        (x)->lpVtbl->get_Priority( x, p )
    #define IADsPrintQueue_put_Priority( x, p ) \
        (x)->lpVtbl->put_Priority( x, p )
    #define IADsPrintQueue_get_BannerPage( x, p ) \
        (x)->lpVtbl->get_BannerPage( x, p )
    #define IADsPrintQueue_put_BannerPage( x, p ) \
        (x)->lpVtbl->put_BannerPage( x, p )
    #define IADsPrintQueue_get_PrintDevices( x, p ) \
        (x)->lpVtbl->get_PrintDevices( x, p )
    #define IADsPrintQueue_put_PrintDevices( x, p ) \
        (x)->lpVtbl->put_PrintDevices( x, p )
    #define IADsPrintQueue_get_NetAddresses( x, p ) \
        (x)->lpVtbl->get_NetAddresses( x, p )
    #define IADsPrintQueue_put_NetAddresses( x, p ) \
        (x)->lpVtbl->put_NetAddresses( x, p )
    #define IADsPrintQueueOperations_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsPrintQueueOperations_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsPrintQueueOperations_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsPrintQueueOperations_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsPrintQueueOperations_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsPrintQueueOperations_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsPrintQueueOperations_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsPrintQueueOperations_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsPrintQueueOperations_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsPrintQueueOperations_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsPrintQueueOperations_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsPrintQueueOperations_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsPrintQueueOperations_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsPrintQueueOperations_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsPrintQueueOperations_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsPrintQueueOperations_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsPrintQueueOperations_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsPrintQueueOperations_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsPrintQueueOperations_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsPrintQueueOperations_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsPrintQueueOperations_get_Status( x, p ) \
        (x)->lpVtbl->get_Status( x, p )
    #define IADsPrintQueueOperations_PrintJobs( x, p ) \
        (x)->lpVtbl->PrintJobs( x, p )
    #define IADsPrintQueueOperations_Pause( x ) \
        (x)->lpVtbl->Pause( x )
    #define IADsPrintQueueOperations_Resume( x ) \
        (x)->lpVtbl->Resume( x )
    #define IADsPrintQueueOperations_Purge( x ) \
        (x)->lpVtbl->Purge( x )
    #define IADsPrintJob_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsPrintJob_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsPrintJob_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsPrintJob_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsPrintJob_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsPrintJob_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsPrintJob_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsPrintJob_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsPrintJob_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsPrintJob_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsPrintJob_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsPrintJob_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsPrintJob_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsPrintJob_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsPrintJob_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsPrintJob_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsPrintJob_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsPrintJob_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsPrintJob_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsPrintJob_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsPrintJob_get_HostPrintQueue( x, p ) \
        (x)->lpVtbl->get_HostPrintQueue( x, p )
    #define IADsPrintJob_get_User( x, p ) \
        (x)->lpVtbl->get_User( x, p )
    #define IADsPrintJob_get_UserPath( x, p ) \
        (x)->lpVtbl->get_UserPath( x, p )
    #define IADsPrintJob_get_TimeSubmitted( x, p ) \
        (x)->lpVtbl->get_TimeSubmitted( x, p )
    #define IADsPrintJob_get_TotalPages( x, p ) \
        (x)->lpVtbl->get_TotalPages( x, p )
    #define IADsPrintJob_get_Size( x, p ) \
        (x)->lpVtbl->get_Size( x, p )
    #define IADsPrintJob_get_Description( x, p ) \
        (x)->lpVtbl->get_Description( x, p )
    #define IADsPrintJob_put_Description( x, p ) \
        (x)->lpVtbl->put_Description( x, p )
    #define IADsPrintJob_get_Priority( x, p ) \
        (x)->lpVtbl->get_Priority( x, p )
    #define IADsPrintJob_put_Priority( x, p ) \
        (x)->lpVtbl->put_Priority( x, p )
    #define IADsPrintJob_get_StartTime( x, p ) \
        (x)->lpVtbl->get_StartTime( x, p )
    #define IADsPrintJob_put_StartTime( x, p ) \
        (x)->lpVtbl->put_StartTime( x, p )
    #define IADsPrintJob_get_UntilTime( x, p ) \
        (x)->lpVtbl->get_UntilTime( x, p )
    #define IADsPrintJob_put_UntilTime( x, p ) \
        (x)->lpVtbl->put_UntilTime( x, p )
    #define IADsPrintJob_get_Notify( x, p ) \
        (x)->lpVtbl->get_Notify( x, p )
    #define IADsPrintJob_put_Notify( x, p ) \
        (x)->lpVtbl->put_Notify( x, p )
    #define IADsPrintJob_get_NotifyPath( x, p ) \
        (x)->lpVtbl->get_NotifyPath( x, p )
    #define IADsPrintJob_put_NotifyPath( x, p ) \
        (x)->lpVtbl->put_NotifyPath( x, p )
    #define IADsPrintJobOperations_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsPrintJobOperations_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsPrintJobOperations_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsPrintJobOperations_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsPrintJobOperations_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsPrintJobOperations_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsPrintJobOperations_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsPrintJobOperations_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsPrintJobOperations_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsPrintJobOperations_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsPrintJobOperations_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsPrintJobOperations_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsPrintJobOperations_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsPrintJobOperations_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsPrintJobOperations_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsPrintJobOperations_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsPrintJobOperations_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsPrintJobOperations_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsPrintJobOperations_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsPrintJobOperations_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsPrintJobOperations_get_Status( x, p ) \
        (x)->lpVtbl->get_Status( x, p )
    #define IADsPrintJobOperations_get_TimeElapsed( x, p ) \
        (x)->lpVtbl->get_TimeElapsed( x, p )
    #define IADsPrintJobOperations_get_PagesPrinted( x, p ) \
        (x)->lpVtbl->get_PagesPrinted( x, p )
    #define IADsPrintJobOperations_get_Position( x, p ) \
        (x)->lpVtbl->get_Position( x, p )
    #define IADsPrintJobOperations_put_Position( x, p ) \
        (x)->lpVtbl->put_Position( x, p )
    #define IADsPrintJobOperations_Pause( x ) \
        (x)->lpVtbl->Pause( x )
    #define IADsPrintJobOperations_Resume( x ) \
        (x)->lpVtbl->Resume( x )
    #define IADsService_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsService_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsService_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsService_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsService_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsService_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsService_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsService_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsService_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsService_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsService_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsService_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsService_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsService_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsService_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsService_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsService_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsService_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsService_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsService_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsService_get_HostComputer( x, p ) \
        (x)->lpVtbl->get_HostComputer( x, p )
    #define IADsService_put_HostComputer( x, p ) \
        (x)->lpVtbl->put_HostComputer( x, p )
    #define IADsService_get_DisplayName( x, p ) \
        (x)->lpVtbl->get_DisplayName( x, p )
    #define IADsService_put_DisplayName( x, p ) \
        (x)->lpVtbl->put_DisplayName( x, p )
    #define IADsService_get_Version( x, p ) \
        (x)->lpVtbl->get_Version( x, p )
    #define IADsService_put_Version( x, p ) \
        (x)->lpVtbl->put_Version( x, p )
    #define IADsService_get_ServiceType( x, p ) \
        (x)->lpVtbl->get_ServiceType( x, p )
    #define IADsService_put_ServiceType( x, p ) \
        (x)->lpVtbl->put_ServiceType( x, p )
    #define IADsService_get_StartType( x, p ) \
        (x)->lpVtbl->get_StartType( x, p )
    #define IADsService_put_StartType( x, p ) \
        (x)->lpVtbl->put_StartType( x, p )
    #define IADsService_get_Path( x, p ) \
        (x)->lpVtbl->get_Path( x, p )
    #define IADsService_put_Path( x, p ) \
        (x)->lpVtbl->put_Path( x, p )
    #define IADsService_get_StartupParameters( x, p ) \
        (x)->lpVtbl->get_StartupParameters( x, p )
    #define IADsService_put_StartupParameters( x, p ) \
        (x)->lpVtbl->put_StartupParameters( x, p )
    #define IADsService_get_ErrorControl( x, p ) \
        (x)->lpVtbl->get_ErrorControl( x, p )
    #define IADsService_put_ErrorControl( x, p ) \
        (x)->lpVtbl->put_ErrorControl( x, p )
    #define IADsService_get_LoadOrderGroup( x, p ) \
        (x)->lpVtbl->get_LoadOrderGroup( x, p )
    #define IADsService_put_LoadOrderGroup( x, p ) \
        (x)->lpVtbl->put_LoadOrderGroup( x, p )
    #define IADsService_get_ServiceAccountName( x, p ) \
        (x)->lpVtbl->get_ServiceAccountName( x, p )
    #define IADsService_put_ServiceAccountName( x, p ) \
        (x)->lpVtbl->put_ServiceAccountName( x, p )
    #define IADsService_get_ServiceAccountPath( x, p ) \
        (x)->lpVtbl->get_ServiceAccountPath( x, p )
    #define IADsService_put_ServiceAccountPath( x, p ) \
        (x)->lpVtbl->put_ServiceAccountPath( x, p )
    #define IADsService_get_Dependencies( x, p ) \
        (x)->lpVtbl->get_Dependencies( x, p )
    #define IADsService_put_Dependencies( x, p ) \
        (x)->lpVtbl->put_Dependencies( x, p )
    #define IADsServiceOperations_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsServiceOperations_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsServiceOperations_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsServiceOperations_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsServiceOperations_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsServiceOperations_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsServiceOperations_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsServiceOperations_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsServiceOperations_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsServiceOperations_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsServiceOperations_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsServiceOperations_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsServiceOperations_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsServiceOperations_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsServiceOperations_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsServiceOperations_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsServiceOperations_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsServiceOperations_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsServiceOperations_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsServiceOperations_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsServiceOperations_get_Status( x, p ) \
        (x)->lpVtbl->get_Status( x, p )
    #define IADsServiceOperations_Start( x ) \
        (x)->lpVtbl->Start( x )
    #define IADsServiceOperations_Stop( x ) \
        (x)->lpVtbl->Stop( x )
    #define IADsServiceOperations_Pause( x ) \
        (x)->lpVtbl->Pause( x )
    #define IADsServiceOperations_Continue( x ) \
        (x)->lpVtbl->Continue( x )
    #define IADsServiceOperations_SetPassword( x, p ) \
        (x)->lpVtbl->SetPassword( x, p )
    #define IADsFileService_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsFileService_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsFileService_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsFileService_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsFileService_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsFileService_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsFileService_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsFileService_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsFileService_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsFileService_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsFileService_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsFileService_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsFileService_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsFileService_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsFileService_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsFileService_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsFileService_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsFileService_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsFileService_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsFileService_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsFileService_get_HostComputer( x, p ) \
        (x)->lpVtbl->get_HostComputer( x, p )
    #define IADsFileService_put_HostComputer( x, p ) \
        (x)->lpVtbl->put_HostComputer( x, p )
    #define IADsFileService_get_DisplayName( x, p ) \
        (x)->lpVtbl->get_DisplayName( x, p )
    #define IADsFileService_put_DisplayName( x, p ) \
        (x)->lpVtbl->put_DisplayName( x, p )
    #define IADsFileService_get_Version( x, p ) \
        (x)->lpVtbl->get_Version( x, p )
    #define IADsFileService_put_Version( x, p ) \
        (x)->lpVtbl->put_Version( x, p )
    #define IADsFileService_get_ServiceType( x, p ) \
        (x)->lpVtbl->get_ServiceType( x, p )
    #define IADsFileService_put_ServiceType( x, p ) \
        (x)->lpVtbl->put_ServiceType( x, p )
    #define IADsFileService_get_StartType( x, p ) \
        (x)->lpVtbl->get_StartType( x, p )
    #define IADsFileService_put_StartType( x, p ) \
        (x)->lpVtbl->put_StartType( x, p )
    #define IADsFileService_get_Path( x, p ) \
        (x)->lpVtbl->get_Path( x, p )
    #define IADsFileService_put_Path( x, p ) \
        (x)->lpVtbl->put_Path( x, p )
    #define IADsFileService_get_StartupParameters( x, p ) \
        (x)->lpVtbl->get_StartupParameters( x, p )
    #define IADsFileService_put_StartupParameters( x, p ) \
        (x)->lpVtbl->put_StartupParameters( x, p )
    #define IADsFileService_get_ErrorControl( x, p ) \
        (x)->lpVtbl->get_ErrorControl( x, p )
    #define IADsFileService_put_ErrorControl( x, p ) \
        (x)->lpVtbl->put_ErrorControl( x, p )
    #define IADsFileService_get_LoadOrderGroup( x, p ) \
        (x)->lpVtbl->get_LoadOrderGroup( x, p )
    #define IADsFileService_put_LoadOrderGroup( x, p ) \
        (x)->lpVtbl->put_LoadOrderGroup( x, p )
    #define IADsFileService_get_ServiceAccountName( x, p ) \
        (x)->lpVtbl->get_ServiceAccountName( x, p )
    #define IADsFileService_put_ServiceAccountName( x, p ) \
        (x)->lpVtbl->put_ServiceAccountName( x, p )
    #define IADsFileService_get_ServiceAccountPath( x, p ) \
        (x)->lpVtbl->get_ServiceAccountPath( x, p )
    #define IADsFileService_put_ServiceAccountPath( x, p ) \
        (x)->lpVtbl->put_ServiceAccountPath( x, p )
    #define IADsFileService_get_Dependencies( x, p ) \
        (x)->lpVtbl->get_Dependencies( x, p )
    #define IADsFileService_put_Dependencies( x, p ) \
        (x)->lpVtbl->put_Dependencies( x, p )
    #define IADsFileService_get_Description( x, p ) \
        (x)->lpVtbl->get_Description( x, p )
    #define IADsFileService_put_Description( x, p ) \
        (x)->lpVtbl->put_Description( x, p )
    #define IADsFileService_get_MaxUserCount( x, p ) \
        (x)->lpVtbl->get_MaxUserCount( x, p )
    #define IADsFileService_put_MaxUserCount( x, p ) \
        (x)->lpVtbl->put_MaxUserCount( x, p )
    #define IADsFileServiceOperations_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsFileServiceOperations_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsFileServiceOperations_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsFileServiceOperations_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsFileServiceOperations_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsFileServiceOperations_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsFileServiceOperations_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsFileServiceOperations_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsFileServiceOperations_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsFileServiceOperations_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsFileServiceOperations_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsFileServiceOperations_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsFileServiceOperations_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsFileServiceOperations_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsFileServiceOperations_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsFileServiceOperations_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsFileServiceOperations_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsFileServiceOperations_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsFileServiceOperations_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsFileServiceOperations_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsFileServiceOperations_get_Status( x, p ) \
        (x)->lpVtbl->get_Status( x, p )
    #define IADsFileServiceOperations_Start( x ) \
        (x)->lpVtbl->Start( x )
    #define IADsFileServiceOperations_Stop( x ) \
        (x)->lpVtbl->Stop( x )
    #define IADsFileServiceOperations_Pause( x ) \
        (x)->lpVtbl->Pause( x )
    #define IADsFileServiceOperations_Continue( x ) \
        (x)->lpVtbl->Continue( x )
    #define IADsFileServiceOperations_SetPassword( x, p ) \
        (x)->lpVtbl->SetPassword( x, p )
    #define IADsFileServiceOperations_Sessions( x, p ) \
        (x)->lpVtbl->Sessions( x, p )
    #define IADsFileServiceOperations_Resources( x, p ) \
        (x)->lpVtbl->Resources( x, p )
    #define IADsFileShare_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsFileShare_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsFileShare_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsFileShare_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsFileShare_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsFileShare_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsFileShare_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsFileShare_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsFileShare_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsFileShare_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsFileShare_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsFileShare_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsFileShare_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsFileShare_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsFileShare_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsFileShare_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsFileShare_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsFileShare_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsFileShare_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsFileShare_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsFileShare_get_CurrentUserCount( x, p ) \
        (x)->lpVtbl->get_CurrentUserCount( x, p )
    #define IADsFileShare_get_Description( x, p ) \
        (x)->lpVtbl->get_Description( x, p )
    #define IADsFileShare_put_Description( x, p ) \
        (x)->lpVtbl->put_Description( x, p )
    #define IADsFileShare_get_HostComputer( x, p ) \
        (x)->lpVtbl->get_HostComputer( x, p )
    #define IADsFileShare_put_HostComputer( x, p ) \
        (x)->lpVtbl->put_HostComputer( x, p )
    #define IADsFileShare_get_Path( x, p ) \
        (x)->lpVtbl->get_Path( x, p )
    #define IADsFileShare_put_Path( x, p ) \
        (x)->lpVtbl->put_Path( x, p )
    #define IADsFileShare_get_MaxUserCount( x, p ) \
        (x)->lpVtbl->get_MaxUserCount( x, p )
    #define IADsFileShare_put_MaxUserCount( x, p ) \
        (x)->lpVtbl->put_MaxUserCount( x, p )
    #define IADsSession_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsSession_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsSession_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsSession_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsSession_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsSession_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsSession_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsSession_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsSession_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsSession_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsSession_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsSession_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsSession_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsSession_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsSession_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsSession_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsSession_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsSession_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsSession_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsSession_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsSession_get_User( x, p ) \
        (x)->lpVtbl->get_User( x, p )
    #define IADsSession_get_UserPath( x, p ) \
        (x)->lpVtbl->get_UserPath( x, p )
    #define IADsSession_get_Computer( x, p ) \
        (x)->lpVtbl->get_Computer( x, p )
    #define IADsSession_get_ComputerPath( x, p ) \
        (x)->lpVtbl->get_ComputerPath( x, p )
    #define IADsSession_get_ConnectTime( x, p ) \
        (x)->lpVtbl->get_ConnectTime( x, p )
    #define IADsSession_get_IdleTime( x, p ) \
        (x)->lpVtbl->get_IdleTime( x, p )
    #define IADsResource_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsResource_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsResource_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsResource_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsResource_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsResource_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsResource_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsResource_get_Name( x, p ) \
        (x)->lpVtbl->get_Name( x, p )
    #define IADsResource_get_Class( x, p ) \
        (x)->lpVtbl->get_Class( x, p )
    #define IADsResource_get_GUID( x, p ) \
        (x)->lpVtbl->get_GUID( x, p )
    #define IADsResource_get_ADsPath( x, p ) \
        (x)->lpVtbl->get_ADsPath( x, p )
    #define IADsResource_get_Parent( x, p ) \
        (x)->lpVtbl->get_Parent( x, p )
    #define IADsResource_get_Schema( x, p ) \
        (x)->lpVtbl->get_Schema( x, p )
    #define IADsResource_GetInfo( x ) \
        (x)->lpVtbl->GetInfo( x )
    #define IADsResource_SetInfo( x ) \
        (x)->lpVtbl->SetInfo( x )
    #define IADsResource_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsResource_Put( x, p1, p2 ) \
        (x)->lpVtbl->Put( x, p1, p2 )
    #define IADsResource_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsResource_PutEx( x, p1, p2, p3 ) \
        (x)->lpVtbl->PutEx( x, p1, p2, p3 )
    #define IADsResource_GetInfoEx( x, p1, p2 ) \
        (x)->lpVtbl->GetInfoEx( x, p1, p2 )
    #define IADsResource_get_User( x, p ) \
        (x)->lpVtbl->get_User( x, p )
    #define IADsResource_get_UserPath( x, p ) \
        (x)->lpVtbl->get_UserPath( x, p )
    #define IADsResource_get_Path( x, p ) \
        (x)->lpVtbl->get_Path( x, p )
    #define IADsResource_get_LockCount( x, p ) \
        (x)->lpVtbl->get_LockCount( x, p )
    #define IADsOpenDSObject_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsOpenDSObject_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsOpenDSObject_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsOpenDSObject_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsOpenDSObject_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsOpenDSObject_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsOpenDSObject_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsOpenDSObject_OpenDSObject( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->OpenDSObject( x, p1, p2, p3, p4, p5 )
    #define IDirectoryObject_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IDirectoryObject_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IDirectoryObject_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IDirectoryObject_GetObjectInformation( x, p ) \
        (x)->lpVtbl->GetObjectInformation( x, p )
    #define IDirectoryObject_GetObjectAttributes( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->GetObjectAttributes( x, p1, p2, p3, p4 )
    #define IDirectoryObject_SetObjectAttributes( x, p1, p2, p3 ) \
        (x)->lpVtbl->SetObjectAttributes( x, p1, p2, p3 )
    #define IDirectoryObject_CreateDSObject( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->CreateDSObject( x, p1, p2, p3, p4 )
    #define IDirectoryObject_DeleteDSObject( x, p ) \
        (x)->lpVtbl->DeleteDSObject( x, p )
    #define IDirectorySearch_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IDirectorySearch_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IDirectorySearch_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IDirectorySearch_SetSearchPreference( x, p1, p2 ) \
        (x)->lpVtbl->SetSearchPreference( x, p1, p2 )
    #define IDirectorySearch_ExecuteSearch( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->ExecuteSearch( x, p1, p2, p3, p4 )
    #define IDirectorySearch_AbandonSearch( x, p ) \
        (x)->lpVtbl->AbandonSearch( x, p )
    #define IDirectorySearch_GetFirstRow( x, p ) \
        (x)->lpVtbl->GetFirstRow( x, p )
    #define IDirectorySearch_GetNextRow( x, p ) \
        (x)->lpVtbl->GetNextRow( x, p )
    #define IDirectorySearch_GetPreviousRow( x, p ) \
        (x)->lpVtbl->GetPreviousRow( x, p )
    #define IDirectorySearch_GetNextColumnName( x, p1, p2 ) \
        (x)->lpVtbl->GetNextColumnName( x, p1, p2 )
    #define IDirectorySearch_GetColumn( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetColumn( x, p1, p2, p3 )
    #define IDirectorySearch_FreeColumn( x, p ) \
        (x)->lpVtbl->FreeColumn( x, p )
    #define IDirectorySearch_CloseSearchHandle( x, p ) \
        (x)->lpVtbl->CloseSearchHandle( x, p )
    #define IDirectorySchemaMgmt_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IDirectorySchemaMgmt_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IDirectorySchemaMgmt_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IDirectorySchemaMgmt_EnumAttributes( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->EnumAttributes( x, p1, p2, p3, p4 )
    #define IDirectorySchemaMgmt_CreateAttributeDefinition( x, p1, p2 ) \
        (x)->lpVtbl->CreateAttributeDefinition( x, p1, p2 )
    #define IDirectorySchemaMgmt_WriteAttributeDefinition( x, p1, p2 ) \
        (x)->lpVtbl->WriteAttributeDefinition( x, p1, p2 )
    #define IDirectorySchemaMgmt_DeleteAttributeDefinition( x, p ) \
        (x)->lpVtbl->DeleteAttributeDefinition( x, p )
    #define IDirectorySchemaMgmt_EnumClasses( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->EnumClasses( x, p1, p2, p3, p4 )
    #define IDirectorySchemaMgmt_WriteClassDefinition( x, p1, p2 ) \
        (x)->lpVtbl->WriteClassDefinition( x, p1, p2 )
    #define IDirectorySchemaMgmt_CreateClassDefinition( x, p1, p2 ) \
        (x)->lpVtbl->CreateClassDefinition( x, p1, p2 )
    #define IDirectorySchemaMgmt_DeleteClassDefinition( x, p ) \
        (x)->lpVtbl->DeleteClassDefinition( x, p )
    #define IADsAggregatee_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsAggregatee_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsAggregatee_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsAggregatee_ConnectAsAggregatee( x, p ) \
        (x)->lpVtbl->ConnectAsAggregatee( x, p )
    #define IADsAggregatee_DisconnectAsAggregatee( x ) \
        (x)->lpVtbl->DisconnectAsAggregatee( x )
    #define IADsAggregatee_RelinquishInterface( x, p ) \
        (x)->lpVtbl->RelinquishInterface( x, p )
    #define IADsAggregatee_RestoreInterface( x, p ) \
        (x)->lpVtbl->RestoreInterface( x, p )
    #define IADsAggregator_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsAggregator_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsAggregator_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsAggregator_ConnectAsAggregator( x, p ) \
        (x)->lpVtbl->ConnectAsAggregator( x, p )
    #define IADsAggregator_DisconnectAsAggregator( x ) \
        (x)->lpVtbl->DisconnectAsAggregator( x )
    #define IADsAccessControlEntry_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsAccessControlEntry_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsAccessControlEntry_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsAccessControlEntry_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsAccessControlEntry_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsAccessControlEntry_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsAccessControlEntry_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsAccessControlEntry_get_AccessMask( x, p ) \
        (x)->lpVtbl->get_AccessMask( x, p )
    #define IADsAccessControlEntry_put_AccessMask( x, p ) \
        (x)->lpVtbl->put_AccessMask( x, p )
    #define IADsAccessControlEntry_get_AceType( x, p ) \
        (x)->lpVtbl->get_AceType( x, p )
    #define IADsAccessControlEntry_put_AceType( x, p ) \
        (x)->lpVtbl->put_AceType( x, p )
    #define IADsAccessControlEntry_get_AceFlags( x, p ) \
        (x)->lpVtbl->get_AceFlags( x, p )
    #define IADsAccessControlEntry_put_AceFlags( x, p ) \
        (x)->lpVtbl->put_AceFlags( x, p )
    #define IADsAccessControlEntry_get_Flags( x, p ) \
        (x)->lpVtbl->get_Flags( x, p )
    #define IADsAccessControlEntry_put_Flags( x, p ) \
        (x)->lpVtbl->put_Flags( x, p )
    #define IADsAccessControlEntry_get_ObjectType( x, p ) \
        (x)->lpVtbl->get_ObjectType( x, p )
    #define IADsAccessControlEntry_put_ObjectType( x, p ) \
        (x)->lpVtbl->put_ObjectType( x, p )
    #define IADsAccessControlEntry_get_InheritedObjectType( x, p ) \
        (x)->lpVtbl->get_InheritedObjectType( x, p )
    #define IADsAccessControlEntry_put_InheritedObjectType( x, p ) \
        (x)->lpVtbl->put_InheritedObjectType( x, p )
    #define IADsAccessControlEntry_get_Trustee( x, p ) \
        (x)->lpVtbl->get_Trustee( x, p )
    #define IADsAccessControlEntry_put_Trustee( x, p ) \
        (x)->lpVtbl->put_Trustee( x, p )
    #define IADsAccessControlList_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsAccessControlList_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsAccessControlList_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsAccessControlList_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsAccessControlList_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsAccessControlList_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsAccessControlList_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsAccessControlList_get_AclRevision( x, p ) \
        (x)->lpVtbl->get_AclRevision( x, p )
    #define IADsAccessControlList_put_AclRevision( x, p ) \
        (x)->lpVtbl->put_AclRevision( x, p )
    #define IADsAccessControlList_get_AceCount( x, p ) \
        (x)->lpVtbl->get_AceCount( x, p )
    #define IADsAccessControlList_put_AceCount( x, p ) \
        (x)->lpVtbl->put_AceCount( x, p )
    #define IADsAccessControlList_AddAce( x, p ) \
        (x)->lpVtbl->AddAce( x, p )
    #define IADsAccessControlList_RemoveAce( x, p ) \
        (x)->lpVtbl->RemoveAce( x, p )
    #define IADsAccessControlList_CopyAccessList( x, p ) \
        (x)->lpVtbl->CopyAccessList( x, p )
    #define IADsAccessControlList_get__NewEnum( x, p ) \
        (x)->lpVtbl->get__NewEnum( x, p )
    #define IADsSecurityDescriptor_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsSecurityDescriptor_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsSecurityDescriptor_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsSecurityDescriptor_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsSecurityDescriptor_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsSecurityDescriptor_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsSecurityDescriptor_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsSecurityDescriptor_get_Revision( x, p ) \
        (x)->lpVtbl->get_Revision( x, p )
    #define IADsSecurityDescriptor_put_Revision( x, p ) \
        (x)->lpVtbl->put_Revision( x, p )
    #define IADsSecurityDescriptor_get_Control( x, p ) \
        (x)->lpVtbl->get_Control( x, p )
    #define IADsSecurityDescriptor_put_Control( x, p ) \
        (x)->lpVtbl->put_Control( x, p )
    #define IADsSecurityDescriptor_get_Owner( x, p ) \
        (x)->lpVtbl->get_Owner( x, p )
    #define IADsSecurityDescriptor_put_Owner( x, p ) \
        (x)->lpVtbl->put_Owner( x, p )
    #define IADsSecurityDescriptor_get_OwnerDefaulted( x, p ) \
        (x)->lpVtbl->get_OwnerDefaulted( x, p )
    #define IADsSecurityDescriptor_put_OwnerDefaulted( x, p ) \
        (x)->lpVtbl->put_OwnerDefaulted( x, p )
    #define IADsSecurityDescriptor_get_Group( x, p ) \
        (x)->lpVtbl->get_Group( x, p )
    #define IADsSecurityDescriptor_put_Group( x, p ) \
        (x)->lpVtbl->put_Group( x, p )
    #define IADsSecurityDescriptor_get_GroupDefaulted( x, p ) \
        (x)->lpVtbl->get_GroupDefaulted( x, p )
    #define IADsSecurityDescriptor_put_GroupDefaulted( x, p ) \
        (x)->lpVtbl->put_GroupDefaulted( x, p )
    #define IADsSecurityDescriptor_get_DiscretionaryAcl( x, p ) \
        (x)->lpVtbl->get_DiscretionaryAcl( x, p )
    #define IADsSecurityDescriptor_put_DiscretionaryAcl( x, p ) \
        (x)->lpVtbl->put_DiscretionaryAcl( x, p )
    #define IADsSecurityDescriptor_get_DaclDefaulted( x, p ) \
        (x)->lpVtbl->get_DaclDefaulted( x, p )
    #define IADsSecurityDescriptor_put_DaclDefaulted( x, p ) \
        (x)->lpVtbl->put_DaclDefaulted( x, p )
    #define IADsSecurityDescriptor_get_SystemAcl( x, p ) \
        (x)->lpVtbl->get_SystemAcl( x, p )
    #define IADsSecurityDescriptor_put_SystemAcl( x, p ) \
        (x)->lpVtbl->put_SystemAcl( x, p )
    #define IADsSecurityDescriptor_get_SaclDefaulted( x, p ) \
        (x)->lpVtbl->get_SaclDefaulted( x, p )
    #define IADsSecurityDescriptor_put_SaclDefaulted( x, p ) \
        (x)->lpVtbl->put_SaclDefaulted( x, p )
    #define IADsSecurityDescriptor_CopySecurityDescriptor( x, p ) \
        (x)->lpVtbl->CopySecurityDescriptor( x, p )
    #define IADsLargeInteger_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsLargeInteger_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsLargeInteger_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsLargeInteger_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsLargeInteger_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsLargeInteger_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsLargeInteger_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsLargeInteger_get_HighPart( x, p ) \
        (x)->lpVtbl->get_HighPart( x, p )
    #define IADsLargeInteger_put_HighPart( x, p ) \
        (x)->lpVtbl->put_HighPart( x, p )
    #define IADsLargeInteger_get_LowPart( x, p ) \
        (x)->lpVtbl->get_LowPart( x, p )
    #define IADsLargeInteger_put_LowPart( x, p ) \
        (x)->lpVtbl->put_LowPart( x, p )
    #define IADsNameTranslate_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsNameTranslate_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsNameTranslate_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsNameTranslate_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsNameTranslate_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsNameTranslate_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsNameTranslate_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsNameTranslate_put_ChaseReferral( x, p ) \
        (x)->lpVtbl->put_ChaseReferral( x, p )
    #define IADsNameTranslate_Init( x, p1, p2 ) \
        (x)->lpVtbl->Init( x, p1, p2 )
    #define IADsNameTranslate_InitEx( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->InitEx( x, p1, p2, p3, p4, p5 )
    #define IADsNameTranslate_Set( x, p1, p2 ) \
        (x)->lpVtbl->Set( x, p1, p2 )
    #define IADsNameTranslate_Get( x, p1, p2 ) \
        (x)->lpVtbl->Get( x, p1, p2 )
    #define IADsNameTranslate_SetEx( x, p1, p2 ) \
        (x)->lpVtbl->SetEx( x, p1, p2 )
    #define IADsNameTranslate_GetEx( x, p1, p2 ) \
        (x)->lpVtbl->GetEx( x, p1, p2 )
    #define IADsCaseIgnoreList_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsCaseIgnoreList_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsCaseIgnoreList_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsCaseIgnoreList_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsCaseIgnoreList_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsCaseIgnoreList_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsCaseIgnoreList_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsFaxNumber_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsFaxNumber_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsFaxNumber_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsFaxNumber_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsFaxNumber_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsFaxNumber_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsFaxNumber_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsFaxNumber_get_TelephoneNumber( x, p ) \
        (x)->lpVtbl->get_TelephoneNumber( x, p )
    #define IADsFaxNumber_put_TelephoneNumber( x, p ) \
        (x)->lpVtbl->put_TelephoneNumber( x, p )
    #define IADsFaxNumber_get_Parameters( x, p ) \
        (x)->lpVtbl->get_Parameters( x, p )
    #define IADsFaxNumber_put_Parameters( x, p ) \
        (x)->lpVtbl->put_Parameters( x, p )
    #define IADsNetAddress_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsNetAddress_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsNetAddress_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsNetAddress_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsNetAddress_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsNetAddress_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsNetAddress_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsNetAddress_get_AddressType( x, p ) \
        (x)->lpVtbl->get_AddressType( x, p )
    #define IADsNetAddress_put_AddressType( x, p ) \
        (x)->lpVtbl->put_AddressType( x, p )
    #define IADsNetAddress_get_Address( x, p ) \
        (x)->lpVtbl->get_Address( x, p )
    #define IADsNetAddress_put_Address( x, p ) \
        (x)->lpVtbl->put_Address( x, p )
    #define IADsOctetList_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsOctetList_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsOctetList_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsOctetList_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsOctetList_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsOctetList_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsOctetList_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsOctetList_get_OctetList( x, p ) \
        (x)->lpVtbl->get_OctetList( x, p )
    #define IADsOctetList_put_OctetList( x, p ) \
        (x)->lpVtbl->put_OctetList( x, p )
    #define IADsEmail_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsEmail_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsEmail_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsEmail_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsEmail_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsEmail_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsEmail_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsEmail_get_Type( x, p ) \
        (x)->lpVtbl->get_Type( x, p )
    #define IADsEmail_put_Type( x, p ) \
        (x)->lpVtbl->put_Type( x, p )
    #define IADsEmail_get_Address( x, p ) \
        (x)->lpVtbl->get_Address( x, p )
    #define IADsEmail_put_Address( x, p ) \
        (x)->lpVtbl->put_Address( x, p )
    #define IADsPath_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsPath_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsPath_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsPath_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsPath_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsPath_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsPath_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsPath_get_Type( x, p ) \
        (x)->lpVtbl->get_Type( x, p )
    #define IADsPath_put_Type( x, p ) \
        (x)->lpVtbl->put_Type( x, p )
    #define IADsPath_get_VolumeName( x, p ) \
        (x)->lpVtbl->get_VolumeName( x, p )
    #define IADsPath_put_VolumeName( x, p ) \
        (x)->lpVtbl->put_VolumeName( x, p )
    #define IADsPath_get_Path( x, p ) \
        (x)->lpVtbl->get_Path( x, p )
    #define IADsPath_put_Path( x, p ) \
        (x)->lpVtbl->put_Path( x, p )
    #define IADsReplicaPointer_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsReplicaPointer_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsReplicaPointer_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsReplicaPointer_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsReplicaPointer_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsReplicaPointer_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsReplicaPointer_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsReplicaPointer_get_ServerName( x, p ) \
        (x)->lpVtbl->get_ServerName( x, p )
    #define IADsReplicaPointer_put_ServerName( x, p ) \
        (x)->lpVtbl->put_ServerName( x, p )
    #define IADsReplicaPointer_get_ReplicaType( x, p ) \
        (x)->lpVtbl->get_ReplicaType( x, p )
    #define IADsReplicaPointer_put_ReplicaType( x, p ) \
        (x)->lpVtbl->put_ReplicaType( x, p )
    #define IADsReplicaPointer_get_ReplicaNumber( x, p ) \
        (x)->lpVtbl->get_ReplicaNumber( x, p )
    #define IADsReplicaPointer_put_ReplicaNumber( x, p ) \
        (x)->lpVtbl->put_ReplicaNumber( x, p )
    #define IADsReplicaPointer_get_Count( x, p ) \
        (x)->lpVtbl->get_Count( x, p )
    #define IADsReplicaPointer_put_Count( x, p ) \
        (x)->lpVtbl->put_Count( x, p )
    #define IADsReplicaPointer_get_ReplicaAddressHints( x, p ) \
        (x)->lpVtbl->get_ReplicaAddressHints( x, p )
    #define IADsReplicaPointer_put_ReplicaAddressHints( x, p ) \
        (x)->lpVtbl->put_ReplicaAddressHints( x, p )
    #define IADsAcl_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsAcl_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsAcl_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsAcl_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsAcl_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsAcl_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsAcl_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsAcl_get_ProtectedAttrName( x, p ) \
        (x)->lpVtbl->get_ProtectedAttrName( x, p )
    #define IADsAcl_put_ProtectedAttrName( x, p ) \
        (x)->lpVtbl->put_ProtectedAttrName( x, p )
    #define IADsAcl_get_SubjectName( x, p ) \
        (x)->lpVtbl->get_SubjectName( x, p )
    #define IADsAcl_put_SubjectName( x, p ) \
        (x)->lpVtbl->put_SubjectName( x, p )
    #define IADsAcl_get_Privileges( x, p ) \
        (x)->lpVtbl->get_Privileges( x, p )
    #define IADsAcl_put_Privileges( x, p ) \
        (x)->lpVtbl->put_Privileges( x, p )
    #define IADsAcl_CopyAcl( x, p ) \
        (x)->lpVtbl->CopyAcl( x, p )
    #define IADsTimestamp_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsTimestamp_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsTimestamp_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsTimestamp_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsTimestamp_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsTimestamp_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsTimestamp_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsTimestamp_get_WholeSeconds( x, p ) \
        (x)->lpVtbl->get_WholeSeconds( x, p )
    #define IADsTimestamp_put_WholeSeconds( x, p ) \
        (x)->lpVtbl->put_WholeSeconds( x, p )
    #define IADsTimestamp_get_EventID( x, p ) \
        (x)->lpVtbl->get_EventID( x, p )
    #define IADsTimestamp_put_EventID( x, p ) \
        (x)->lpVtbl->put_EventID( x, p )
    #define IADsPostalAddress_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsPostalAddress_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsPostalAddress_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsPostalAddress_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsPostalAddress_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsPostalAddress_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsPostalAddress_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsPostalAddress_get_PostalAddress( x, p ) \
        (x)->lpVtbl->get_PostalAddress( x, p )
    #define IADsPostalAddress_put_PostalAddress( x, p ) \
        (x)->lpVtbl->put_PostalAddress( x, p )
    #define IADsBackLink_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsBackLink_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsBackLink_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsBackLink_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsBackLink_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsBackLink_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsBackLink_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsBackLink_get_RemoteID( x, p ) \
        (x)->lpVtbl->get_RemoteID( x, p )
    #define IADsBackLink_put_RemoteID( x, p ) \
        (x)->lpVtbl->put_RemoteID( x, p )
    #define IADsBackLink_get_ObjectName( x, p ) \
        (x)->lpVtbl->get_ObjectName( x, p )
    #define IADsBackLink_put_ObjectName( x, p ) \
        (x)->lpVtbl->put_ObjectName( x, p )
    #define IADsTypedName_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsTypedName_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsTypedName_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsTypedName_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsTypedName_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsTypedName_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsTypedName_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsTypedName_get_ObjectName( x, p ) \
        (x)->lpVtbl->get_ObjectName( x, p )
    #define IADsTypedName_put_ObjectName( x, p ) \
        (x)->lpVtbl->put_ObjectName( x, p )
    #define IADsTypedName_get_Level( x, p ) \
        (x)->lpVtbl->get_Level( x, p )
    #define IADsTypedName_put_Level( x, p ) \
        (x)->lpVtbl->put_Level( x, p )
    #define IADsTypedName_get_Interval( x, p ) \
        (x)->lpVtbl->get_Interval( x, p )
    #define IADsTypedName_put_Interval( x, p ) \
        (x)->lpVtbl->put_Interval( x, p )
    #define IADsHold_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsHold_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsHold_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsHold_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsHold_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsHold_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsHold_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsHold_get_ObjectName( x, p ) \
        (x)->lpVtbl->get_ObjectName( x, p )
    #define IADsHold_put_ObjectName( x, p ) \
        (x)->lpVtbl->put_ObjectName( x, p )
    #define IADsHold_get_Amount( x, p ) \
        (x)->lpVtbl->get_Amount( x, p )
    #define IADsHold_put_Amount( x, p ) \
        (x)->lpVtbl->put_Amount( x, p )
    #define IADsObjectOptions_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsObjectOptions_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsObjectOptions_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsObjectOptions_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsObjectOptions_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsObjectOptions_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsObjectOptions_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsObjectOptions_GetOption( x, p1, p2 ) \
        (x)->lpVtbl->GetOption( x, p1, p2 )
    #define IADsObjectOptions_SetOption( x, p1, p2 ) \
        (x)->lpVtbl->SetOption( x, p1, p2 )
    #define IADsPathname_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsPathname_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsPathname_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsPathname_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsPathname_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsPathname_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsPathname_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsPathname_Set( x, p1, p2 ) \
        (x)->lpVtbl->Set( x, p1, p2 )
    #define IADsPathname_SetDisplayType( x, p ) \
        (x)->lpVtbl->SetDisplayType( x, p )
    #define IADsPathname_Retrieve( x, p1, p2 ) \
        (x)->lpVtbl->Retrieve( x, p1, p2 )
    #define IADsPathname_GetNumElements( x, p ) \
        (x)->lpVtbl->GetNumElements( x, p )
    #define IADsPathname_GetElement( x, p1, p2 ) \
        (x)->lpVtbl->GetElement( x, p1, p2 )
    #define IADsPathname_AddLeafElement( x, p ) \
        (x)->lpVtbl->AddLeafElement( x, p )
    #define IADsPathname_RemoveLeafElement( x ) \
        (x)->lpVtbl->RemoveLeafElement( x )
    #define IADsPathname_CopyPath( x, p ) \
        (x)->lpVtbl->CopyPath( x, p )
    #define IADsPathname_GetEscapedElement( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetEscapedElement( x, p1, p2, p3 )
    #define IADsPathname_get_EscapedMode( x, p ) \
        (x)->lpVtbl->get_EscapedMode( x, p )
    #define IADsPathname_put_EscapedMode( x, p ) \
        (x)->lpVtbl->put_EscapedMode( x, p )
    #define IADsADSystemInfo_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsADSystemInfo_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsADSystemInfo_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsADSystemInfo_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsADSystemInfo_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsADSystemInfo_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsADSystemInfo_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsADSystemInfo_get_UserName( x, p ) \
        (x)->lpVtbl->get_UserName( x, p )
    #define IADsADSystemInfo_get_ComputerName( x, p ) \
        (x)->lpVtbl->get_ComputerName( x, p )
    #define IADsADSystemInfo_get_SiteName( x, p ) \
        (x)->lpVtbl->get_SiteName( x, p )
    #define IADsADSystemInfo_get_DomainShortName( x, p ) \
        (x)->lpVtbl->get_DomainShortName( x, p )
    #define IADsADSystemInfo_get_DomainDNSName( x, p ) \
        (x)->lpVtbl->get_DomainDNSName( x, p )
    #define IADsADSystemInfo_get_ForestDNSName( x, p ) \
        (x)->lpVtbl->get_ForestDNSName( x, p )
    #define IADsADSystemInfo_get_PDCRoleOwner( x, p ) \
        (x)->lpVtbl->get_PDCRoleOwner( x, p )
    #define IADsADSystemInfo_get_SchemaRoleOwner( x, p ) \
        (x)->lpVtbl->get_SchemaRoleOwner( x, p )
    #define IADsADSystemInfo_get_IsNativeMode( x, p ) \
        (x)->lpVtbl->get_IsNativeMode( x, p )
    #define IADsADSystemInfo_GetAnyDCName( x, p ) \
        (x)->lpVtbl->GetAnyDCName( x, p )
    #define IADsADSystemInfo_GetDCSiteName( x, p1, p2 ) \
        (x)->lpVtbl->GetDCSiteName( x, p1, p2 )
    #define IADsADSystemInfo_RefreshSchemaCache( x ) \
        (x)->lpVtbl->RefreshSchemaCache( x )
    #define IADsADSystemInfo_GetTrees( x, p ) \
        (x)->lpVtbl->GetTrees( x, p )
    #define IADsWinNTSystemInfo_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsWinNTSystemInfo_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsWinNTSystemInfo_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsWinNTSystemInfo_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsWinNTSystemInfo_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsWinNTSystemInfo_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsWinNTSystemInfo_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsWinNTSystemInfo_get_UserName( x, p ) \
        (x)->lpVtbl->get_UserName( x, p )
    #define IADsWinNTSystemInfo_get_ComputerName( x, p ) \
        (x)->lpVtbl->get_ComputerName( x, p )
    #define IADsWinNTSystemInfo_get_DomainName( x, p ) \
        (x)->lpVtbl->get_DomainName( x, p )
    #define IADsWinNTSystemInfo_get_PDC( x, p ) \
        (x)->lpVtbl->get_PDC( x, p )
    #define IADsDNWithBinary_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsDNWithBinary_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsDNWithBinary_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsDNWithBinary_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsDNWithBinary_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsDNWithBinary_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsDNWithBinary_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsDNWithBinary_get_BinaryValue( x, p ) \
        (x)->lpVtbl->get_BinaryValue( x, p )
    #define IADsDNWithBinary_put_BinaryValue( x, p ) \
        (x)->lpVtbl->put_BinaryValue( x, p )
    #define IADsDNWithBinary_get_DNString( x, p ) \
        (x)->lpVtbl->get_DNString( x, p )
    #define IADsDNWithBinary_put_DNString( x, p ) \
        (x)->lpVtbl->put_DNString( x, p )
    #define IADsDNWithString_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsDNWithString_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsDNWithString_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsDNWithString_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsDNWithString_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsDNWithString_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsDNWithString_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsDNWithString_get_StringValue( x, p ) \
        (x)->lpVtbl->get_StringValue( x, p )
    #define IADsDNWithString_put_StringValue( x, p ) \
        (x)->lpVtbl->put_StringValue( x, p )
    #define IADsDNWithString_get_DNString( x, p ) \
        (x)->lpVtbl->get_DNString( x, p )
    #define IADsDNWithString_put_DNString( x, p ) \
        (x)->lpVtbl->put_DNString( x, p )
    #define IADsSecurityUtility_QueryInterface( x, p1, p2 ) \
        (x)->lpVtbl->QueryInterface( x, p1, p2 )
    #define IADsSecurityUtility_AddRef( x ) \
        (x)->lpVtbl->AddRef( x )
    #define IADsSecurityUtility_Release( x ) \
        (x)->lpVtbl->Release( x )
    #define IADsSecurityUtility_GetTypeInfoCount( x, p ) \
        (x)->lpVtbl->GetTypeInfoCount( x, p )
    #define IADsSecurityUtility_GetTypeInfo( x, p1, p2, p3 ) \
        (x)->lpVtbl->GetTypeInfo( x, p1, p2, p3 )
    #define IADsSecurityUtility_GetIDsOfNames( x, p1, p2, p3, p4, p5 ) \
        (x)->lpVtbl->GetIDsOfNames( x, p1, p2, p3, p4, p5 )
    #define IADsSecurityUtility_Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 ) \
        (x)->lpVtbl->Invoke( x, p1, p2, p3, p4, p5, p6, p7, p8 )
    #define IADsSecurityUtility_GetSecurityDescriptor( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->GetSecurityDescriptor( x, p1, p2, p3, p4 )
    #define IADsSecurityUtility_SetSecurityDescriptor( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->SetSecurityDescriptor( x, p1, p2, p3, p4 )
    #define IADsSecurityUtility_ConvertSecurityDescriptor( x, p1, p2, p3, p4 ) \
        (x)->lpVtbl->ConvertSecurityDescriptor( x, p1, p2, p3, p4 )
    #define IADsSecurityUtility_get_SecurityMask( x, p ) \
        (x)->lpVtbl->get_SecurityMask( x, p )
    #define IADsSecurityUtility_put_SecurityMask( x, p ) \
        (x)->lpVtbl->put_SecurityMask( x, p )
#endif

#ifdef __cplusplus
} /* extern "C" */
#endif

/* GUIDs */
EXTERN_C const IID      __cdecl IID_IADs;
EXTERN_C const IID      __cdecl IID_IADsContainer;
EXTERN_C const IID      __cdecl IID_IADsCollection;
EXTERN_C const IID      __cdecl IID_IADsMembers;
EXTERN_C const IID      __cdecl IID_IADsPropertyList;
EXTERN_C const IID      __cdecl IID_IADsPropertyEntry;
EXTERN_C const CLSID    __cdecl CLSID_PropertyEntry;
EXTERN_C const IID      __cdecl IID_IADsPropertyValue;
EXTERN_C const IID      __cdecl IID_IADsPropertyValue2;
EXTERN_C const CLSID    __cdecl CLSID_PropertyValue;
EXTERN_C const IID      __cdecl IID_IPrivateDispatch;
EXTERN_C const IID      __cdecl IID_IPrivateUnknown;
EXTERN_C const IID      __cdecl IID_IADsExtension;
EXTERN_C const IID      __cdecl IID_IADsDeleteOps;
EXTERN_C const IID      __cdecl IID_IADsNamespaces;
EXTERN_C const IID      __cdecl IID_IADsClass;
EXTERN_C const IID      __cdecl IID_IADsProperty;
EXTERN_C const IID      __cdecl IID_IADsSyntax;
EXTERN_C const IID      __cdecl IID_IADsLocality;
EXTERN_C const IID      __cdecl IID_IADsO;
EXTERN_C const IID      __cdecl IID_IADsOU;
EXTERN_C const IID      __cdecl IID_IADsDomain;
EXTERN_C const IID      __cdecl IID_IADsComputer;
EXTERN_C const IID      __cdecl IID_IADsComputerOperations;
EXTERN_C const IID      __cdecl IID_IADsGroup;
EXTERN_C const IID      __cdecl IID_IADsUser;
EXTERN_C const IID      __cdecl IID_IADsPrintQueue;
EXTERN_C const IID      __cdecl IID_IADsPrintQueueOperations;
EXTERN_C const IID      __cdecl IID_IADsPrintJob;
EXTERN_C const IID      __cdecl IID_IADsPrintJobOperations;
EXTERN_C const IID      __cdecl IID_IADsService;
EXTERN_C const IID      __cdecl IID_IADsServiceOperations;
EXTERN_C const IID      __cdecl IID_IADsFileService;
EXTERN_C const IID      __cdecl IID_IADsFileServiceOperations;
EXTERN_C const IID      __cdecl IID_IADsFileShare;
EXTERN_C const IID      __cdecl IID_IADsSession;
EXTERN_C const IID      __cdecl IID_IADsResource;
EXTERN_C const IID      __cdecl IID_IADsOpenDSObject;
EXTERN_C const IID      __cdecl IID_IDirectoryObject;
EXTERN_C const IID      __cdecl IID_IDirectorySearch;
EXTERN_C const IID      __cdecl IID_IDirectorySchemaMgmt;
EXTERN_C const IID      __cdecl IID_IADsAggregatee;
EXTERN_C const IID      __cdecl IID_IADsAggregator;
EXTERN_C const IID      __cdecl IID_IADsAccessControlEntry;
EXTERN_C const CLSID    __cdecl CLSID_AccessControlEntry;
EXTERN_C const IID      __cdecl IID_IADsAccessControlList;
EXTERN_C const CLSID    __cdecl CLSID_AccessControlList;
EXTERN_C const IID      __cdecl IID_IADsSecurityDescriptor;
EXTERN_C const CLSID    __cdecl CLSID_SecurityDescriptor;
EXTERN_C const IID      __cdecl IID_IADsLargeInteger;
EXTERN_C const CLSID    __cdecl CLSID_LargeInteger;
EXTERN_C const IID      __cdecl IID_IADsNameTranslate;
EXTERN_C const CLSID    __cdecl CLSID_NameTranslate;
EXTERN_C const IID      __cdecl IID_IADsCaseIgnoreList;
EXTERN_C const CLSID    __cdecl CLSID_CaseIgnoreList;
EXTERN_C const IID      __cdecl IID_IADsNetAddress;
EXTERN_C const CLSID    __cdecl CLSID_NetAddress;
EXTERN_C const IID      __cdecl IID_IADsOctetList;
EXTERN_C const CLSID    __cdecl CLSID_OctetList;
EXTERN_C const IID      __cdecl IID_IADsEmail;
EXTERN_C const CLSID    __cdecl CLSID_Email;
EXTERN_C const IID      __cdecl IID_IADsPath;
EXTERN_C const CLSID    __cdecl CLSID_Path;
EXTERN_C const IID      __cdecl IID_IADsReplicaPointer;
EXTERN_C const CLSID    __cdecl CLSID_ReplicaPointer;
EXTERN_C const IID      __cdecl IID_IADsAcl;
EXTERN_C const IID      __cdecl IID_IADsTimestamp;
EXTERN_C const CLSID    __cdecl CLSID_Timestamp;
EXTERN_C const IID      __cdecl IID_IADsPostalAddress;
EXTERN_C const CLSID    __cdecl CLSID_PostalAddress;
EXTERN_C const IID      __cdecl IID_IADsBackLink;
EXTERN_C const CLSID    __cdecl CLSID_BackLink;
EXTERN_C const IID      __cdecl IID_IADsTypedName;
EXTERN_C const CLSID    __cdecl CLSID_TypedName;
EXTERN_C const IID      __cdecl IID_IADsHold;
EXTERN_C const CLSID    __cdecl CLSID_Hold;
EXTERN_C const IID      __cdecl IID_IADsObjectOptions;
EXTERN_C const IID      __cdecl IID_IADsPathname;
EXTERN_C const CLSID    __cdecl CLSID_Pathname;
EXTERN_C const IID      __cdecl IID_IADsADSystemInfo;
EXTERN_C const CLSID    __cdecl CLSID_ADSystemInfo;
EXTERN_C const IID      __cdecl IID_IADsWinNTSystemInfo;
EXTERN_C const CLSID    __cdecl CLSID_WinNTSystemInfo;
EXTERN_C const IID      __cdecl IID_IADsDNWithBinary;
EXTERN_C const CLSID    __cdecl CLSID_DNWithBinary;
EXTERN_C const IID      __cdecl IID_IADsDNWithString;
EXTERN_C const CLSID    __cdecl CLSID_DNWithString;
EXTERN_C const IID      __cdecl IID_IADsSecurityUtility;
EXTERN_C const CLSID    __cdecl CLSID_ADsSecurityUtility;

#endif /* __iads_h__ */
