/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER within this package.
 */
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif

#include "rpc.h"
#include "rpcndr.h"

#ifndef __RPCNDR_H_VERSION__
#error This stub requires an updated version of <rpcndr.h>
#endif

#ifndef __sdoias_h__
#define __sdoias_h__

#ifndef __ISdoMachine_FWD_DEFINED__
#define __ISdoMachine_FWD_DEFINED__
typedef struct ISdoMachine ISdoMachine;
#endif

#ifndef __ISdoServiceControl_FWD_DEFINED__
#define __ISdoServiceControl_FWD_DEFINED__
typedef struct ISdoServiceControl ISdoServiceControl;
#endif

#ifndef __ISdo_FWD_DEFINED__
#define __ISdo_FWD_DEFINED__
typedef struct ISdo ISdo;
#endif

#ifndef __ISdoCollection_FWD_DEFINED__
#define __ISdoCollection_FWD_DEFINED__
typedef struct ISdoCollection ISdoCollection;
#endif

#ifndef __ISdoDictionaryOld_FWD_DEFINED__
#define __ISdoDictionaryOld_FWD_DEFINED__
typedef struct ISdoDictionaryOld ISdoDictionaryOld;
#endif

#ifndef __SdoMachine_FWD_DEFINED__
#define __SdoMachine_FWD_DEFINED__

#ifdef __cplusplus
typedef class SdoMachine SdoMachine;
#else
typedef struct SdoMachine SdoMachine;
#endif
#endif

#include "oaidl.h"
#include "ocidl.h"

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __MIDL_user_allocate_free_DEFINED__
#define __MIDL_user_allocate_free_DEFINED__
  void *__RPC_API MIDL_user_allocate(size_t);
  void __RPC_API MIDL_user_free(void *);
#endif

#ifndef __SDOIASLib_LIBRARY_DEFINED__
#define __SDOIASLib_LIBRARY_DEFINED__

  typedef enum _ATTRIBUTEID {
    ATTRIBUTE_UNDEFINED = 0,ATTRIBUTE_MIN_VALUE = 1,RADIUS_ATTRIBUTE_USER_NAME = ATTRIBUTE_MIN_VALUE,
    RADIUS_ATTRIBUTE_USER_PASSWORD = RADIUS_ATTRIBUTE_USER_NAME + 1,RADIUS_ATTRIBUTE_CHAP_PASSWORD = RADIUS_ATTRIBUTE_USER_PASSWORD + 1,
    RADIUS_ATTRIBUTE_NAS_IP_ADDRESS = RADIUS_ATTRIBUTE_CHAP_PASSWORD + 1,RADIUS_ATTRIBUTE_NAS_PORT = RADIUS_ATTRIBUTE_NAS_IP_ADDRESS + 1,
    RADIUS_ATTRIBUTE_SERVICE_TYPE = RADIUS_ATTRIBUTE_NAS_PORT + 1,RADIUS_ATTRIBUTE_FRAMED_PROTOCOL = RADIUS_ATTRIBUTE_SERVICE_TYPE + 1,
    RADIUS_ATTRIBUTE_FRAMED_IP_ADDRESS = RADIUS_ATTRIBUTE_FRAMED_PROTOCOL + 1,
    RADIUS_ATTRIBUTE_FRAMED_IP_NETMASK = RADIUS_ATTRIBUTE_FRAMED_IP_ADDRESS + 1,
    RADIUS_ATTRIBUTE_FRAMED_ROUTING = RADIUS_ATTRIBUTE_FRAMED_IP_NETMASK + 1,RADIUS_ATTRIBUTE_FILTER_ID = RADIUS_ATTRIBUTE_FRAMED_ROUTING + 1,
    RADIUS_ATTRIBUTE_FRAMED_MTU = RADIUS_ATTRIBUTE_FILTER_ID + 1,RADIUS_ATTRIBUTE_FRAMED_COMPRESSION = RADIUS_ATTRIBUTE_FRAMED_MTU + 1,
    RADIUS_ATTRIBUTE_LOGIN_IP_HOST = RADIUS_ATTRIBUTE_FRAMED_COMPRESSION + 1,RADIUS_ATTRIBUTE_LOGIN_SERVICE = RADIUS_ATTRIBUTE_LOGIN_IP_HOST + 1,
    RADIUS_ATTRIBUTE_LOGIN_TCP_PORT = RADIUS_ATTRIBUTE_LOGIN_SERVICE + 1,RADIUS_ATTRIBUTE_UNASSIGNED1 = RADIUS_ATTRIBUTE_LOGIN_TCP_PORT + 1,
    RADIUS_ATTRIBUTE_REPLY_MESSAGE = RADIUS_ATTRIBUTE_UNASSIGNED1 + 1,RADIUS_ATTRIBUTE_CALLBACK_NUMBER = RADIUS_ATTRIBUTE_REPLY_MESSAGE + 1,
    RADIUS_ATTRIBUTE_CALLBACK_ID = RADIUS_ATTRIBUTE_CALLBACK_NUMBER + 1,RADIUS_ATTRIBUTE_UNASSIGNED2 = RADIUS_ATTRIBUTE_CALLBACK_ID + 1,
    RADIUS_ATTRIBUTE_FRAMED_ROUTE = RADIUS_ATTRIBUTE_UNASSIGNED2 + 1,RADIUS_ATTRIBUTE_FRAMED_IPX_NETWORK = RADIUS_ATTRIBUTE_FRAMED_ROUTE + 1,
    RADIUS_ATTRIBUTE_STATE = RADIUS_ATTRIBUTE_FRAMED_IPX_NETWORK + 1,RADIUS_ATTRIBUTE_CLASS = RADIUS_ATTRIBUTE_STATE + 1,
    RADIUS_ATTRIBUTE_VENDOR_SPECIFIC = RADIUS_ATTRIBUTE_CLASS + 1,RADIUS_ATTRIBUTE_SESSION_TIMEOUT = RADIUS_ATTRIBUTE_VENDOR_SPECIFIC + 1,
    RADIUS_ATTRIBUTE_IDLE_TIMEOUT = RADIUS_ATTRIBUTE_SESSION_TIMEOUT + 1,RADIUS_ATTRIBUTE_TERMINATION_ACTION = RADIUS_ATTRIBUTE_IDLE_TIMEOUT + 1,
    RADIUS_ATTRIBUTE_CALLED_STATION_ID = RADIUS_ATTRIBUTE_TERMINATION_ACTION + 1,
    RADIUS_ATTRIBUTE_CALLING_STATION_ID = RADIUS_ATTRIBUTE_CALLED_STATION_ID + 1,
    RADIUS_ATTRIBUTE_NAS_IDENTIFIER = RADIUS_ATTRIBUTE_CALLING_STATION_ID + 1,RADIUS_ATTRIBUTE_PROXY_STATE = RADIUS_ATTRIBUTE_NAS_IDENTIFIER + 1,
    RADIUS_ATTRIBUTE_LOGIN_LAT_SERVICE = RADIUS_ATTRIBUTE_PROXY_STATE + 1,RADIUS_ATTRIBUTE_LOGIN_LAT_NODE = RADIUS_ATTRIBUTE_LOGIN_LAT_SERVICE + 1,
    RADIUS_ATTRIBUTE_LOGIN_LAT_GROUP = RADIUS_ATTRIBUTE_LOGIN_LAT_NODE + 1,RADIUS_ATTRIBUTE_FRAMED_APPLETALK_LINK = RADIUS_ATTRIBUTE_LOGIN_LAT_GROUP + 1,
    RADIUS_ATTRIBUTE_FRAMED_APPLETALK_NET = RADIUS_ATTRIBUTE_FRAMED_APPLETALK_LINK + 1,
    RADIUS_ATTRIBUTE_FRAMED_APPLETALK_ZONE = RADIUS_ATTRIBUTE_FRAMED_APPLETALK_NET + 1,
    RADIUS_ATTRIBUTE_ACCT_STATUS_TYPE = RADIUS_ATTRIBUTE_FRAMED_APPLETALK_ZONE + 1,
    RADIUS_ATTRIBUTE_ACCT_DELAY_TIME = RADIUS_ATTRIBUTE_ACCT_STATUS_TYPE + 1,RADIUS_ATTRIBUTE_ACCT_INPUT_OCTETS = RADIUS_ATTRIBUTE_ACCT_DELAY_TIME + 1,
    RADIUS_ATTRIBUTE_ACCT_OUTPUT_OCTETS = RADIUS_ATTRIBUTE_ACCT_INPUT_OCTETS + 1,
    RADIUS_ATTRIBUTE_ACCT_SESSION_ID = RADIUS_ATTRIBUTE_ACCT_OUTPUT_OCTETS + 1,RADIUS_ATTRIBUTE_ACCT_AUTHENTIC = RADIUS_ATTRIBUTE_ACCT_SESSION_ID + 1,
    RADIUS_ATTRIBUTE_ACCT_SESSION_TIME = RADIUS_ATTRIBUTE_ACCT_AUTHENTIC + 1,
    RADIUS_ATTRIBUTE_ACCT_INPUT_PACKETS = RADIUS_ATTRIBUTE_ACCT_SESSION_TIME + 1,
    RADIUS_ATTRIBUTE_ACCT_OUTPUT_PACKETS = RADIUS_ATTRIBUTE_ACCT_INPUT_PACKETS + 1,
    RADIUS_ATTRIBUTE_ACCT_TERMINATE_CAUSE = RADIUS_ATTRIBUTE_ACCT_OUTPUT_PACKETS + 1,
    RADIUS_ATTRIBUTE_ACCT_MULTI_SSN_ID = RADIUS_ATTRIBUTE_ACCT_TERMINATE_CAUSE + 1,
    RADIUS_ATTRIBUTE_ACCT_LINK_COUNT = RADIUS_ATTRIBUTE_ACCT_MULTI_SSN_ID + 1,RADIUS_ATTRIBUTE_CHAP_CHALLENGE = 60,
    RADIUS_ATTRIBUTE_NAS_PORT_TYPE = RADIUS_ATTRIBUTE_CHAP_CHALLENGE + 1,RADIUS_ATTRIBUTE_PORT_LIMIT = RADIUS_ATTRIBUTE_NAS_PORT_TYPE + 1,
    RADIUS_ATTRIBUTE_LOGIN_LAT_PORT = RADIUS_ATTRIBUTE_PORT_LIMIT + 1,RADIUS_ATTRIBUTE_TUNNEL_TYPE = RADIUS_ATTRIBUTE_LOGIN_LAT_PORT + 1,
    RADIUS_ATTRIBUTE_TUNNEL_MEDIUM_TYPE = RADIUS_ATTRIBUTE_TUNNEL_TYPE + 1,
    RADIUS_ATTRIBUTE_TUNNEL_CLIENT_ENDPT = RADIUS_ATTRIBUTE_TUNNEL_MEDIUM_TYPE + 1,
    RADIUS_ATTRIBUTE_TUNNEL_SERVER_ENDPT = RADIUS_ATTRIBUTE_TUNNEL_CLIENT_ENDPT + 1,
    RADIUS_ATTRIBUTE_ACCT_TUNNEL_CONN = RADIUS_ATTRIBUTE_TUNNEL_SERVER_ENDPT + 1,
    RADIUS_ATTRIBUTE_TUNNEL_PASSWORD = RADIUS_ATTRIBUTE_ACCT_TUNNEL_CONN + 1,
    RADIUS_ATTRIBUTE_ARAP_PASSWORD = RADIUS_ATTRIBUTE_TUNNEL_PASSWORD + 1,RADIUS_ATTRIBUTE_ARAP_FEATURES = RADIUS_ATTRIBUTE_ARAP_PASSWORD + 1,
    RADIUS_ATTRIBUTE_ARAP_ZONE_ACCESS = RADIUS_ATTRIBUTE_ARAP_FEATURES + 1,RADIUS_ATTRIBUTE_ARAP_SECURITY = RADIUS_ATTRIBUTE_ARAP_ZONE_ACCESS + 1,
    RADIUS_ATTRIBUTE_ARAP_SECURITY_DATA = RADIUS_ATTRIBUTE_ARAP_SECURITY + 1,RADIUS_ATTRIBUTE_PASSWORD_RETRY = RADIUS_ATTRIBUTE_ARAP_SECURITY_DATA + 1,
    RADIUS_ATTRIBUTE_PROMPT = 76,RADIUS_ATTRIBUTE_CONNECT_INFO = RADIUS_ATTRIBUTE_PROMPT + 1,
    RADIUS_ATTRIBUTE_CONFIGURATION_TOKEN = RADIUS_ATTRIBUTE_CONNECT_INFO + 1,RADIUS_ATTRIBUTE_EAP_MESSAGE = RADIUS_ATTRIBUTE_CONFIGURATION_TOKEN + 1,
    RADIUS_ATTRIBUTE_SIGNATURE = RADIUS_ATTRIBUTE_EAP_MESSAGE + 1,RADIUS_ATTRIBUTE_TUNNEL_PVT_GROUP_ID = RADIUS_ATTRIBUTE_SIGNATURE + 1,
    RADIUS_ATTRIBUTE_TUNNEL_ASSIGNMENT_ID = RADIUS_ATTRIBUTE_TUNNEL_PVT_GROUP_ID + 1,
    RADIUS_ATTRIBUTE_TUNNEL_PREFERENCE = RADIUS_ATTRIBUTE_TUNNEL_ASSIGNMENT_ID + 1,
    RADIUS_ATTRIBUTE_ARAP_CHALLENGE_RESPONSE = RADIUS_ATTRIBUTE_TUNNEL_PREFERENCE + 1,
    RADIUS_ATTRIBUTE_ACCT_INTERIM_INTERVAL = RADIUS_ATTRIBUTE_ARAP_CHALLENGE_RESPONSE + 1,
    IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_IP_ADDRESS = 0x1000,IAS_ATTRIBUTE_SAVED_RADIUS_CALLBACK_NUMBER = IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_IP_ADDRESS + 1,
    IAS_ATTRIBUTE_NP_CALLING_STATION_ID = IAS_ATTRIBUTE_SAVED_RADIUS_CALLBACK_NUMBER + 1,
    IAS_ATTRIBUTE_SAVED_NP_CALLING_STATION_ID = IAS_ATTRIBUTE_NP_CALLING_STATION_ID + 1,
    IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_ROUTE = IAS_ATTRIBUTE_SAVED_NP_CALLING_STATION_ID + 1,
    IAS_ATTRIBUTE_IGNORE_USER_DIALIN_PROPERTIES = IAS_ATTRIBUTE_SAVED_RADIUS_FRAMED_ROUTE + 1,
    IAS_ATTRIBUTE_NP_TIME_OF_DAY = IAS_ATTRIBUTE_IGNORE_USER_DIALIN_PROPERTIES + 1,
    IAS_ATTRIBUTE_NP_CALLED_STATION_ID = IAS_ATTRIBUTE_NP_TIME_OF_DAY + 1,IAS_ATTRIBUTE_NP_ALLOWED_PORT_TYPES = IAS_ATTRIBUTE_NP_CALLED_STATION_ID + 1,
    IAS_ATTRIBUTE_NP_AUTHENTICATION_TYPE = IAS_ATTRIBUTE_NP_ALLOWED_PORT_TYPES + 1,
    IAS_ATTRIBUTE_NP_ALLOWED_EAP_TYPE = IAS_ATTRIBUTE_NP_AUTHENTICATION_TYPE + 1,IAS_ATTRIBUTE_SHARED_SECRET = IAS_ATTRIBUTE_NP_ALLOWED_EAP_TYPE + 1,
    IAS_ATTRIBUTE_CLIENT_IP_ADDRESS = IAS_ATTRIBUTE_SHARED_SECRET + 1,IAS_ATTRIBUTE_CLIENT_PACKET_HEADER = IAS_ATTRIBUTE_CLIENT_IP_ADDRESS + 1,
    IAS_ATTRIBUTE_TOKEN_GROUPS = IAS_ATTRIBUTE_CLIENT_PACKET_HEADER + 1,IAS_ATTRIBUTE_ALLOW_DIALIN = IAS_ATTRIBUTE_TOKEN_GROUPS + 1,
    IAS_ATTRIBUTE_REQUEST_ID = IAS_ATTRIBUTE_ALLOW_DIALIN + 1,IAS_ATTRIBUTE_MANIPULATION_TARGET = IAS_ATTRIBUTE_REQUEST_ID + 1,
    IAS_ATTRIBUTE_MANIPULATION_RULE = IAS_ATTRIBUTE_MANIPULATION_TARGET + 1,IAS_ATTRIBUTE_ORIGINAL_USER_NAME = IAS_ATTRIBUTE_MANIPULATION_RULE + 1,
    IAS_ATTRIBUTE_CLIENT_VENDOR_TYPE = IAS_ATTRIBUTE_ORIGINAL_USER_NAME + 1,IAS_ATTRIBUTE_CLIENT_UDP_PORT = IAS_ATTRIBUTE_CLIENT_VENDOR_TYPE + 1,
    MS_ATTRIBUTE_CHAP_CHALLENGE = IAS_ATTRIBUTE_CLIENT_UDP_PORT + 1,MS_ATTRIBUTE_CHAP_RESPONSE = MS_ATTRIBUTE_CHAP_CHALLENGE + 1,
    MS_ATTRIBUTE_CHAP_DOMAIN = MS_ATTRIBUTE_CHAP_RESPONSE + 1,MS_ATTRIBUTE_CHAP_ERROR = MS_ATTRIBUTE_CHAP_DOMAIN + 1,
    MS_ATTRIBUTE_CHAP_CPW1 = MS_ATTRIBUTE_CHAP_ERROR + 1,MS_ATTRIBUTE_CHAP_CPW2 = MS_ATTRIBUTE_CHAP_CPW1 + 1,
    MS_ATTRIBUTE_CHAP_LM_ENC_PW = MS_ATTRIBUTE_CHAP_CPW2 + 1,MS_ATTRIBUTE_CHAP_NT_ENC_PW = MS_ATTRIBUTE_CHAP_LM_ENC_PW + 1,
    MS_ATTRIBUTE_CHAP_MPPE_KEYS = MS_ATTRIBUTE_CHAP_NT_ENC_PW + 1,IAS_ATTRIBUTE_AUTHENTICATION_TYPE = MS_ATTRIBUTE_CHAP_MPPE_KEYS + 1,
    IAS_ATTRIBUTE_CLIENT_NAME = IAS_ATTRIBUTE_AUTHENTICATION_TYPE + 1,IAS_ATTRIBUTE_NT4_ACCOUNT_NAME = IAS_ATTRIBUTE_CLIENT_NAME + 1,
    IAS_ATTRIBUTE_FULLY_QUALIFIED_USER_NAME = IAS_ATTRIBUTE_NT4_ACCOUNT_NAME + 1,IAS_ATTRIBUTE_NTGROUPS = IAS_ATTRIBUTE_FULLY_QUALIFIED_USER_NAME + 1,
    IAS_ATTRIBUTE_EAP_FRIENDLY_NAME = IAS_ATTRIBUTE_NTGROUPS + 1,IAS_ATTRIBUTE_AUTH_PROVIDER_TYPE = IAS_ATTRIBUTE_EAP_FRIENDLY_NAME + 1,
    MS_ATTRIBUTE_ACCT_AUTH_TYPE = IAS_ATTRIBUTE_AUTH_PROVIDER_TYPE + 1,MS_ATTRIBUTE_ACCT_EAP_TYPE = MS_ATTRIBUTE_ACCT_AUTH_TYPE + 1,
    IAS_ATTRIBUTE_PACKET_TYPE = MS_ATTRIBUTE_ACCT_EAP_TYPE + 1,IAS_ATTRIBUTE_AUTH_PROVIDER_NAME = IAS_ATTRIBUTE_PACKET_TYPE + 1,
    IAS_ATTRIBUTE_ACCT_PROVIDER_TYPE = IAS_ATTRIBUTE_AUTH_PROVIDER_NAME + 1,IAS_ATTRIBUTE_ACCT_PROVIDER_NAME = IAS_ATTRIBUTE_ACCT_PROVIDER_TYPE + 1,
    MS_ATTRIBUTE_MPPE_SEND_KEY = IAS_ATTRIBUTE_ACCT_PROVIDER_NAME + 1,MS_ATTRIBUTE_MPPE_RECV_KEY = MS_ATTRIBUTE_MPPE_SEND_KEY + 1,
    IAS_ATTRIBUTE_REASON_CODE = MS_ATTRIBUTE_MPPE_RECV_KEY + 1,MS_ATTRIBUTE_FILTER = IAS_ATTRIBUTE_REASON_CODE + 1,
    MS_ATTRIBUTE_CHAP2_RESPONSE = MS_ATTRIBUTE_FILTER + 1,MS_ATTRIBUTE_CHAP2_SUCCESS = MS_ATTRIBUTE_CHAP2_RESPONSE + 1,
    MS_ATTRIBUTE_CHAP2_CPW = MS_ATTRIBUTE_CHAP2_SUCCESS + 1,MS_ATTRIBUTE_RAS_VENDOR = MS_ATTRIBUTE_CHAP2_CPW + 1,
    MS_ATTRIBUTE_RAS_VERSION = MS_ATTRIBUTE_RAS_VENDOR + 1,IAS_ATTRIBUTE_NP_NAME = MS_ATTRIBUTE_RAS_VERSION + 1,
    MS_ATTRIBUTE_PRIMARY_DNS_SERVER = IAS_ATTRIBUTE_NP_NAME + 1,MS_ATTRIBUTE_SECONDARY_DNS_SERVER = MS_ATTRIBUTE_PRIMARY_DNS_SERVER + 1,
    MS_ATTRIBUTE_PRIMARY_NBNS_SERVER = MS_ATTRIBUTE_SECONDARY_DNS_SERVER + 1,MS_ATTRIBUTE_SECONDARY_NBNS_SERVER = MS_ATTRIBUTE_PRIMARY_NBNS_SERVER + 1,
    IAS_ATTRIBUTE_PROXY_POLICY_NAME = MS_ATTRIBUTE_SECONDARY_NBNS_SERVER + 1,IAS_ATTRIBUTE_PROVIDER_TYPE = IAS_ATTRIBUTE_PROXY_POLICY_NAME + 1,
    IAS_ATTRIBUTE_PROVIDER_NAME = IAS_ATTRIBUTE_PROVIDER_TYPE + 1,IAS_ATTRIBUTE_REMOTE_SERVER_ADDRESS = IAS_ATTRIBUTE_PROVIDER_NAME + 1,
    IAS_ATTRIBUTE_GENERATE_CLASS_ATTRIBUTE = IAS_ATTRIBUTE_REMOTE_SERVER_ADDRESS + 1,
    MS_ATTRIBUTE_RAS_CLIENT_NAME = IAS_ATTRIBUTE_GENERATE_CLASS_ATTRIBUTE + 1,MS_ATTRIBUTE_RAS_CLIENT_VERSION = MS_ATTRIBUTE_RAS_CLIENT_NAME + 1,
    IAS_ATTRIBUTE_ALLOWED_CERTIFICATE_EKU = MS_ATTRIBUTE_RAS_CLIENT_VERSION + 1,
    IAS_ATTRIBUTE_EXTENSION_STATE = IAS_ATTRIBUTE_ALLOWED_CERTIFICATE_EKU + 1,IAS_ATTRIBUTE_GENERATE_SESSION_TIMEOUT = IAS_ATTRIBUTE_EXTENSION_STATE + 1,
    MS_ATTRIBUTE_SESSION_TIMEOUT = IAS_ATTRIBUTE_GENERATE_SESSION_TIMEOUT + 1,MS_ATTRIBUTE_QUARANTINE_IPFILTER = MS_ATTRIBUTE_SESSION_TIMEOUT + 1,
    MS_ATTRIBUTE_QUARANTINE_SESSION_TIMEOUT = MS_ATTRIBUTE_QUARANTINE_IPFILTER + 1,
    MS_ATTRIBUTE_USER_SECURITY_IDENTITY = MS_ATTRIBUTE_QUARANTINE_SESSION_TIMEOUT + 1,
    IAS_ATTRIBUTE_REMOTE_RADIUS_TO_WINDOWS_USER_MAPPING = MS_ATTRIBUTE_USER_SECURITY_IDENTITY + 1,
    IAS_ATTRIBUTE_PASSPORT_USER_MAPPING_UPN_SUFFIX = IAS_ATTRIBUTE_REMOTE_RADIUS_TO_WINDOWS_USER_MAPPING + 1,
    IAS_ATTRIBUTE_TUNNEL_TAG = IAS_ATTRIBUTE_PASSPORT_USER_MAPPING_UPN_SUFFIX + 1,IAS_ATTRIBUTE_NP_PEAPUPFRONT_ENABLED = IAS_ATTRIBUTE_TUNNEL_TAG + 1,
    IAS_ATTRIBUTE_CERTIFICATE_EKU = 8097,IAS_ATTRIBUTE_EAP_CONFIG = IAS_ATTRIBUTE_CERTIFICATE_EKU + 1,
    MS_ATTRIBUTE_PEAP_EMBEDDED_EAP_TYPEID = IAS_ATTRIBUTE_EAP_CONFIG + 1,
    MS_ATTRIBUTE_PEAP_FAST_ROAMED_SESSION = MS_ATTRIBUTE_PEAP_EMBEDDED_EAP_TYPEID + 1,
    IAS_ATTRIBUTE_EAP_TYPEID = MS_ATTRIBUTE_PEAP_FAST_ROAMED_SESSION + 1,IAS_ATTRIBUTE_EAP_TLV = IAS_ATTRIBUTE_EAP_TYPEID + 1,
    IAS_ATTRIBUTE_REJECT_REASON_CODE = IAS_ATTRIBUTE_EAP_TLV + 1,IAS_ATTRIBUTE_PROXY_EAP_CONFIG = IAS_ATTRIBUTE_REJECT_REASON_CODE + 1,
    IAS_ATTRIBUTE_EAP_SESSION = IAS_ATTRIBUTE_PROXY_EAP_CONFIG + 1,IAS_ATTRIBUTE_IS_REPLAY = IAS_ATTRIBUTE_EAP_SESSION + 1,
    IAS_ATTRIBUTE_CLEAR_TEXT_PASSWORD = IAS_ATTRIBUTE_IS_REPLAY + 1,RAS_ATTRIBUTE_ENCRYPTION_TYPE = 0xffffffff - 89,
    RAS_ATTRIBUTE_ENCRYPTION_POLICY = RAS_ATTRIBUTE_ENCRYPTION_TYPE + 1,RAS_ATTRIBUTE_BAP_REQUIRED = RAS_ATTRIBUTE_ENCRYPTION_POLICY + 1,
    RAS_ATTRIBUTE_BAP_LINE_DOWN_TIME = RAS_ATTRIBUTE_BAP_REQUIRED + 1,RAS_ATTRIBUTE_BAP_LINE_DOWN_LIMIT = RAS_ATTRIBUTE_BAP_LINE_DOWN_TIME + 1
  } ATTRIBUTEID;

  typedef enum _NEW_LOG_FILE_FREQUENCY {
    IAS_LOGGING_UNLIMITED_SIZE = 0,IAS_LOGGING_DAILY = IAS_LOGGING_UNLIMITED_SIZE + 1,IAS_LOGGING_WEEKLY = IAS_LOGGING_DAILY + 1,
    IAS_LOGGING_MONTHLY = IAS_LOGGING_WEEKLY + 1,IAS_LOGGING_WHEN_FILE_SIZE_REACHES = IAS_LOGGING_MONTHLY + 1
  } NEW_LOG_FILE_FREQUENCY;

  typedef enum _AUTHENTICATION_TYPE {
    IAS_AUTH_INVALID = 0,IAS_AUTH_PAP = IAS_AUTH_INVALID + 1,IAS_AUTH_MD5CHAP = IAS_AUTH_PAP + 1,IAS_AUTH_MSCHAP = IAS_AUTH_MD5CHAP + 1,
    IAS_AUTH_MSCHAP2 = IAS_AUTH_MSCHAP + 1,IAS_AUTH_EAP = IAS_AUTH_MSCHAP2 + 1,IAS_AUTH_ARAP = IAS_AUTH_EAP + 1,IAS_AUTH_NONE = IAS_AUTH_ARAP + 1,
    IAS_AUTH_CUSTOM = IAS_AUTH_NONE + 1,IAS_AUTH_MSCHAP_CPW = IAS_AUTH_CUSTOM + 1,IAS_AUTH_MSCHAP2_CPW = IAS_AUTH_MSCHAP_CPW + 1,
    IAS_AUTH_PEAP = IAS_AUTH_MSCHAP2_CPW + 1
  } AUTHENTICATION_TYPE;

  typedef enum _ATTRIBUTESYNTAX {
    IAS_SYNTAX_BOOLEAN = 1,IAS_SYNTAX_INTEGER = IAS_SYNTAX_BOOLEAN + 1,IAS_SYNTAX_ENUMERATOR = IAS_SYNTAX_INTEGER + 1,
    IAS_SYNTAX_INETADDR = IAS_SYNTAX_ENUMERATOR + 1,IAS_SYNTAX_STRING = IAS_SYNTAX_INETADDR + 1,IAS_SYNTAX_OCTETSTRING = IAS_SYNTAX_STRING + 1,
    IAS_SYNTAX_UTCTIME = IAS_SYNTAX_OCTETSTRING + 1,IAS_SYNTAX_PROVIDERSPECIFIC = IAS_SYNTAX_UTCTIME + 1,
    IAS_SYNTAX_UNSIGNEDINTEGER = IAS_SYNTAX_PROVIDERSPECIFIC + 1
  } ATTRIBUTESYNTAX;

  typedef enum _ATTRIBUTERESTRICTIONS {
    MULTIVALUED = 0x1,ALLOWEDINPROFILE = 0x2,ALLOWEDINCONDITION = 0x4,ALLOWEDINPROXYPROFILE = 0x8,ALLOWEDINPROXYCONDITION = 0x10
  } ATTRIBUTERESTRICTIONS;

  typedef enum _ATTRIBUTEINFO {
    NAME = 1,SYNTAX = NAME + 1,RESTRICTIONS = SYNTAX + 1,DESCRIPTION = RESTRICTIONS + 1,VENDORID = DESCRIPTION + 1,LDAPNAME = VENDORID + 1,
    VENDORTYPE = LDAPNAME + 1
  } ATTRIBUTEINFO;

  typedef enum _IASCOMMONPROPERTIES {
    PROPERTY_SDO_RESERVED = 0,PROPERTY_SDO_CLASS = PROPERTY_SDO_RESERVED + 1,PROPERTY_SDO_NAME = PROPERTY_SDO_CLASS + 1,
    PROPERTY_SDO_DESCRIPTION = PROPERTY_SDO_NAME + 1,PROPERTY_SDO_ID = PROPERTY_SDO_DESCRIPTION + 1,PROPERTY_SDO_DATASTORE_NAME = PROPERTY_SDO_ID + 1,
    PROPERTY_SDO_START = 0x400
  } IASCOMMONPROPERTIES;

  typedef enum _USERPROPERTIES {
    PROPERTY_USER_CALLING_STATION_ID = PROPERTY_SDO_START,PROPERTY_USER_SAVED_CALLING_STATION_ID = PROPERTY_USER_CALLING_STATION_ID + 1,
    PROPERTY_USER_RADIUS_CALLBACK_NUMBER = PROPERTY_USER_SAVED_CALLING_STATION_ID + 1,
    PROPERTY_USER_RADIUS_FRAMED_ROUTE = PROPERTY_USER_RADIUS_CALLBACK_NUMBER + 1,
    PROPERTY_USER_RADIUS_FRAMED_IP_ADDRESS = PROPERTY_USER_RADIUS_FRAMED_ROUTE + 1,
    PROPERTY_USER_SAVED_RADIUS_CALLBACK_NUMBER = PROPERTY_USER_RADIUS_FRAMED_IP_ADDRESS + 1,
    PROPERTY_USER_SAVED_RADIUS_FRAMED_ROUTE = PROPERTY_USER_SAVED_RADIUS_CALLBACK_NUMBER + 1,
    PROPERTY_USER_SAVED_RADIUS_FRAMED_IP_ADDRESS = PROPERTY_USER_SAVED_RADIUS_FRAMED_ROUTE + 1,
    PROPERTY_USER_ALLOW_DIALIN = PROPERTY_USER_SAVED_RADIUS_FRAMED_IP_ADDRESS + 1,PROPERTY_USER_SERVICE_TYPE = PROPERTY_USER_ALLOW_DIALIN + 1
  } USERPROPERTIES;

  typedef enum _DICTIONARYPROPERTIES {
    PROPERTY_DICTIONARY_ATTRIBUTES_COLLECTION = PROPERTY_SDO_START,PROPERTY_DICTIONARY_LOCATION = PROPERTY_DICTIONARY_ATTRIBUTES_COLLECTION + 1
  } DICTIONARYPROPERTIES;

  typedef enum _ATTRIBUTEPROPERTIES {
    PROPERTY_ATTRIBUTE_ID = PROPERTY_SDO_START,PROPERTY_ATTRIBUTE_VENDOR_ID = PROPERTY_ATTRIBUTE_ID + 1,
    PROPERTY_ATTRIBUTE_VENDOR_TYPE_ID = PROPERTY_ATTRIBUTE_VENDOR_ID + 1,PROPERTY_ATTRIBUTE_IS_ENUMERABLE = PROPERTY_ATTRIBUTE_VENDOR_TYPE_ID + 1,
    PROPERTY_ATTRIBUTE_ENUM_NAMES = PROPERTY_ATTRIBUTE_IS_ENUMERABLE + 1,PROPERTY_ATTRIBUTE_ENUM_VALUES = PROPERTY_ATTRIBUTE_ENUM_NAMES + 1,
    PROPERTY_ATTRIBUTE_SYNTAX = PROPERTY_ATTRIBUTE_ENUM_VALUES + 1,PROPERTY_ATTRIBUTE_ALLOW_MULTIPLE = PROPERTY_ATTRIBUTE_SYNTAX + 1,
    PROPERTY_ATTRIBUTE_ALLOW_LOG_ORDINAL = PROPERTY_ATTRIBUTE_ALLOW_MULTIPLE + 1,
    PROPERTY_ATTRIBUTE_ALLOW_IN_PROFILE = PROPERTY_ATTRIBUTE_ALLOW_LOG_ORDINAL + 1,
    PROPERTY_ATTRIBUTE_ALLOW_IN_CONDITION = PROPERTY_ATTRIBUTE_ALLOW_IN_PROFILE + 1,
    PROPERTY_ATTRIBUTE_DISPLAY_NAME = PROPERTY_ATTRIBUTE_ALLOW_IN_CONDITION + 1,PROPERTY_ATTRIBUTE_VALUE = PROPERTY_ATTRIBUTE_DISPLAY_NAME + 1,
    PROPERTY_ATTRIBUTE_ALLOW_IN_PROXY_PROFILE = PROPERTY_ATTRIBUTE_VALUE + 1,
    PROPERTY_ATTRIBUTE_ALLOW_IN_PROXY_CONDITION = PROPERTY_ATTRIBUTE_ALLOW_IN_PROXY_PROFILE + 1
  } ATTRIBUTEPROPERTIES;

  typedef enum _IASPROPERTIES {
    PROPERTY_IAS_RADIUSSERVERGROUPS_COLLECTION = PROPERTY_SDO_START,PROPERTY_IAS_POLICIES_COLLECTION = PROPERTY_IAS_RADIUSSERVERGROUPS_COLLECTION + 1,
    PROPERTY_IAS_PROFILES_COLLECTION = PROPERTY_IAS_POLICIES_COLLECTION + 1,PROPERTY_IAS_PROTOCOLS_COLLECTION = PROPERTY_IAS_PROFILES_COLLECTION + 1,
    PROPERTY_IAS_AUDITORS_COLLECTION = PROPERTY_IAS_PROTOCOLS_COLLECTION + 1,
    PROPERTY_IAS_REQUESTHANDLERS_COLLECTION = PROPERTY_IAS_AUDITORS_COLLECTION + 1,
    PROPERTY_IAS_PROXYPOLICIES_COLLECTION = PROPERTY_IAS_REQUESTHANDLERS_COLLECTION + 1,
    PROPERTY_IAS_PROXYPROFILES_COLLECTION = PROPERTY_IAS_PROXYPOLICIES_COLLECTION + 1
  } IASPROPERTIES;

  typedef enum _CLIENTPROPERTIES {
    PROPERTY_CLIENT_REQUIRE_SIGNATURE = PROPERTY_SDO_START,PROPERTY_CLIENT_UNUSED = PROPERTY_CLIENT_REQUIRE_SIGNATURE + 1,
    PROPERTY_CLIENT_SHARED_SECRET = PROPERTY_CLIENT_UNUSED + 1,PROPERTY_CLIENT_NAS_MANUFACTURER = PROPERTY_CLIENT_SHARED_SECRET + 1,
    PROPERTY_CLIENT_ADDRESS = PROPERTY_CLIENT_NAS_MANUFACTURER + 1
  } CLIENTPROPERTIES;

  typedef enum _VENDORPROPERTIES {
    PROPERTY_NAS_VENDOR_ID = PROPERTY_SDO_START
  } VENDORPROPERTIES;

  typedef enum _PROFILEPROPERTIES {
    PROPERTY_PROFILE_ATTRIBUTES_COLLECTION = PROPERTY_SDO_START
  } PROFILEPROPERTIES;

  typedef enum _POLICYPROPERTIES {
    PROPERTY_POLICY_CONSTRAINT = PROPERTY_SDO_START,PROPERTY_POLICY_MERIT = PROPERTY_POLICY_CONSTRAINT + 1,
    PROPERTY_POLICY_UNUSED0 = PROPERTY_POLICY_MERIT + 1,PROPERTY_POLICY_UNUSED1 = PROPERTY_POLICY_UNUSED0 + 1,
    PROPERTY_POLICY_PROFILE_NAME = PROPERTY_POLICY_UNUSED1 + 1,PROPERTY_POLICY_ACTION = PROPERTY_POLICY_PROFILE_NAME + 1,
    PROPERTY_POLICY_CONDITIONS_COLLECTION = PROPERTY_POLICY_ACTION + 1
  } POLICYPROPERTIES;

  typedef enum _CONDITIONPROPERTIES {
    PROPERTY_CONDITION_TEXT = PROPERTY_SDO_START
  } CONDITIONPROPERTIES;

  typedef enum _RADIUSSERVERGROUPPROPERTIES {
    PROPERTY_RADIUSSERVERGROUP_SERVERS_COLLECTION = PROPERTY_SDO_START
  } RADIUSSERVERGROUPPROPERTIES;

  typedef enum _RADIUSSERVERPROPERTIES {
    PROPERTY_RADIUSSERVER_AUTH_PORT = PROPERTY_SDO_START,PROPERTY_RADIUSSERVER_AUTH_SECRET = PROPERTY_RADIUSSERVER_AUTH_PORT + 1,
    PROPERTY_RADIUSSERVER_ACCT_PORT = PROPERTY_RADIUSSERVER_AUTH_SECRET + 1,PROPERTY_RADIUSSERVER_ACCT_SECRET = PROPERTY_RADIUSSERVER_ACCT_PORT + 1,
    PROPERTY_RADIUSSERVER_ADDRESS = PROPERTY_RADIUSSERVER_ACCT_SECRET + 1,PROPERTY_RADIUSSERVER_FORWARD_ACCT_ONOFF = PROPERTY_RADIUSSERVER_ADDRESS + 1,
    PROPERTY_RADIUSSERVER_PRIORITY = PROPERTY_RADIUSSERVER_FORWARD_ACCT_ONOFF + 1,PROPERTY_RADIUSSERVER_WEIGHT = PROPERTY_RADIUSSERVER_PRIORITY + 1,
    PROPERTY_RADIUSSERVER_TIMEOUT = PROPERTY_RADIUSSERVER_WEIGHT + 1,PROPERTY_RADIUSSERVER_MAX_LOST = PROPERTY_RADIUSSERVER_TIMEOUT + 1,
    PROPERTY_RADIUSSERVER_BLACKOUT = PROPERTY_RADIUSSERVER_MAX_LOST + 1
  } RADIUSSERVERPROPERTIES;

  typedef enum _IASCOMPONENTPROPERTIES {
    PROPERTY_COMPONENT_ID = PROPERTY_SDO_START,PROPERTY_COMPONENT_PROG_ID = PROPERTY_COMPONENT_ID + 1,
    PROPERTY_COMPONENT_START = PROPERTY_COMPONENT_PROG_ID + 1
  } IASCOMPONENTPROPERTIES;

  typedef enum _PROTOCOLPROPERTIES {
    PROPERTY_PROTOCOL_REQUEST_HANDLER = PROPERTY_COMPONENT_START,PROPERTY_PROTOCOL_START = PROPERTY_PROTOCOL_REQUEST_HANDLER + 1
  } PROTOCOLPROPERTIES;

  typedef enum _RADIUSPROPERTIES {
    PROPERTY_RADIUS_ACCOUNTING_PORT = PROPERTY_PROTOCOL_START,PROPERTY_RADIUS_AUTHENTICATION_PORT = PROPERTY_RADIUS_ACCOUNTING_PORT + 1,
    PROPERTY_RADIUS_CLIENTS_COLLECTION = PROPERTY_RADIUS_AUTHENTICATION_PORT + 1,
    PROPERTY_RADIUS_VENDORS_COLLECTION = PROPERTY_RADIUS_CLIENTS_COLLECTION + 1
  } RADIUSPROPERTIES;

  typedef enum _NTEVENTLOGPROPERTIES {
    PROPERTY_EVENTLOG_LOG_APPLICATION_EVENTS = PROPERTY_COMPONENT_START,PROPERTY_EVENTLOG_LOG_MALFORMED = PROPERTY_EVENTLOG_LOG_APPLICATION_EVENTS + 1,
    PROPERTY_EVENTLOG_LOG_DEBUG = PROPERTY_EVENTLOG_LOG_MALFORMED + 1
  } NTEVENTLOGPROPERTIES;

  typedef enum _NAMESPROPERTIES {
    PROPERTY_NAMES_REALMS = PROPERTY_COMPONENT_START
  } NAMESPROPERTIES;

  typedef enum _NTSAMPROPERTIES {
    PROPERTY_NTSAM_ALLOW_LM_AUTHENTICATION = PROPERTY_COMPONENT_START
  } NTSAMPROPERTIES;

  typedef enum _ACCOUNTINGPROPERTIES {
    PROPERTY_ACCOUNTING_LOG_ACCOUNTING = PROPERTY_COMPONENT_START,PROPERTY_ACCOUNTING_LOG_ACCOUNTING_INTERIM = PROPERTY_ACCOUNTING_LOG_ACCOUNTING + 1,
    PROPERTY_ACCOUNTING_LOG_AUTHENTICATION = PROPERTY_ACCOUNTING_LOG_ACCOUNTING_INTERIM + 1,
    PROPERTY_ACCOUNTING_LOG_OPEN_NEW_FREQUENCY = PROPERTY_ACCOUNTING_LOG_AUTHENTICATION + 1,
    PROPERTY_ACCOUNTING_LOG_OPEN_NEW_SIZE = PROPERTY_ACCOUNTING_LOG_OPEN_NEW_FREQUENCY + 1,
    PROPERTY_ACCOUNTING_LOG_FILE_DIRECTORY = PROPERTY_ACCOUNTING_LOG_OPEN_NEW_SIZE + 1,
    PROPERTY_ACCOUNTING_LOG_IAS1_FORMAT = PROPERTY_ACCOUNTING_LOG_FILE_DIRECTORY + 1,
    PROPERTY_ACCOUNTING_LOG_ENABLE_LOGGING = PROPERTY_ACCOUNTING_LOG_IAS1_FORMAT + 1,
    PROPERTY_ACCOUNTING_LOG_DELETE_IF_FULL = PROPERTY_ACCOUNTING_LOG_ENABLE_LOGGING + 1,
    PROPERTY_ACCOUNTING_SQL_MAX_SESSIONS = PROPERTY_ACCOUNTING_LOG_DELETE_IF_FULL + 1,
    PROPERTY_ACCOUNTING_LOG_AUTHENTICATION_INTERIM = PROPERTY_ACCOUNTING_SQL_MAX_SESSIONS + 1
  } ACCOUNTINGPROPERTIES;

  typedef enum _EAPWRAPPROPERTIES {
    PROPERTY_EAP_SESSION_TIMEOUT = PROPERTY_COMPONENT_START,PROPERTY_EAP_MAX_SESSIONS = PROPERTY_EAP_SESSION_TIMEOUT + 1
  } EAPWRAPPROPERTIES;

  typedef enum _NAPPROPERTIES {
    PROPERTY_NAP_POLICIES_COLLECTION = PROPERTY_COMPONENT_START
  } NAPPROPERTIES;

  typedef enum _RADIUSPROXYPROPERTIES {
    PROPERTY_RADIUSPROXY_SERVERGROUPS = PROPERTY_COMPONENT_START
  } RADIUSPROXYPROPERTIES;

  typedef enum _SERVICE_TYPE {
    SERVICE_TYPE_IAS = 0,SERVICE_TYPE_RAS = SERVICE_TYPE_IAS + 1,SERVICE_TYPE_MAX = SERVICE_TYPE_RAS + 1
  } SERVICE_TYPE;

  typedef enum _IASOSTYPE {
    SYSTEM_TYPE_NT4_WORKSTATION = 0,SYSTEM_TYPE_NT5_WORKSTATION = SYSTEM_TYPE_NT4_WORKSTATION + 1,
    SYSTEM_TYPE_NT4_SERVER = SYSTEM_TYPE_NT5_WORKSTATION + 1,SYSTEM_TYPE_NT5_SERVER = SYSTEM_TYPE_NT4_SERVER + 1
  } IASOSTYPE;

  typedef enum _IASOSTYPE *PIASOSTYPE;

  typedef enum _DOMAINTYPE {
    DOMAIN_TYPE_NONE = 0,DOMAIN_TYPE_NT4 = DOMAIN_TYPE_NONE + 1,DOMAIN_TYPE_NT5 = DOMAIN_TYPE_NT4 + 1,DOMAIN_TYPE_MIXED = DOMAIN_TYPE_NT5 + 1
  } IASDOMAINTYPE;

  typedef enum _DOMAINTYPE *PIASDOMAINTYPE;

  typedef enum _IASDATASTORE {
    DATA_STORE_LOCAL = 0,DATA_STORE_DIRECTORY = DATA_STORE_LOCAL + 1
  } IASDATASTORE;

  typedef enum _IASDATASTORE *PIASDATASTORE;

  EXTERN_C const IID LIBID_SDOIASLib;
#ifndef __ISdoMachine_INTERFACE_DEFINED__
#define __ISdoMachine_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISdoMachine;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ISdoMachine : public IDispatch {
  public:
    virtual HRESULT WINAPI Attach(BSTR bstrComputerName) = 0;
    virtual HRESULT WINAPI GetDictionarySDO(IUnknown **ppDictionarySDO) = 0;
    virtual HRESULT WINAPI GetServiceSDO(IASDATASTORE eDataStore,BSTR bstrServiceName,IUnknown **ppServiceSDO) = 0;
    virtual HRESULT WINAPI GetUserSDO(IASDATASTORE eDataStore,BSTR bstrUserName,IUnknown **ppUserSDO) = 0;
    virtual HRESULT WINAPI GetOSType(IASOSTYPE *eOSType) = 0;
    virtual HRESULT WINAPI GetDomainType(IASDOMAINTYPE *eDomainType) = 0;
    virtual HRESULT WINAPI IsDirectoryAvailable(VARIANT_BOOL *boolDirectoryAvailable) = 0;
    virtual HRESULT WINAPI GetAttachedComputer(BSTR *bstrComputerName) = 0;
    virtual HRESULT WINAPI GetSDOSchema(IUnknown **ppSDOSchema) = 0;
  };
#else
  typedef struct ISdoMachineVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ISdoMachine *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ISdoMachine *This);
      ULONG (WINAPI *Release)(ISdoMachine *This);
      HRESULT (WINAPI *GetTypeInfoCount)(ISdoMachine *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(ISdoMachine *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(ISdoMachine *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(ISdoMachine *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *Attach)(ISdoMachine *This,BSTR bstrComputerName);
      HRESULT (WINAPI *GetDictionarySDO)(ISdoMachine *This,IUnknown **ppDictionarySDO);
      HRESULT (WINAPI *GetServiceSDO)(ISdoMachine *This,IASDATASTORE eDataStore,BSTR bstrServiceName,IUnknown **ppServiceSDO);
      HRESULT (WINAPI *GetUserSDO)(ISdoMachine *This,IASDATASTORE eDataStore,BSTR bstrUserName,IUnknown **ppUserSDO);
      HRESULT (WINAPI *GetOSType)(ISdoMachine *This,IASOSTYPE *eOSType);
      HRESULT (WINAPI *GetDomainType)(ISdoMachine *This,IASDOMAINTYPE *eDomainType);
      HRESULT (WINAPI *IsDirectoryAvailable)(ISdoMachine *This,VARIANT_BOOL *boolDirectoryAvailable);
      HRESULT (WINAPI *GetAttachedComputer)(ISdoMachine *This,BSTR *bstrComputerName);
      HRESULT (WINAPI *GetSDOSchema)(ISdoMachine *This,IUnknown **ppSDOSchema);
    END_INTERFACE
  } ISdoMachineVtbl;
  struct ISdoMachine {
    CONST_VTBL struct ISdoMachineVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ISdoMachine_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISdoMachine_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISdoMachine_Release(This) (This)->lpVtbl->Release(This)
#define ISdoMachine_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISdoMachine_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISdoMachine_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISdoMachine_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISdoMachine_Attach(This,bstrComputerName) (This)->lpVtbl->Attach(This,bstrComputerName)
#define ISdoMachine_GetDictionarySDO(This,ppDictionarySDO) (This)->lpVtbl->GetDictionarySDO(This,ppDictionarySDO)
#define ISdoMachine_GetServiceSDO(This,eDataStore,bstrServiceName,ppServiceSDO) (This)->lpVtbl->GetServiceSDO(This,eDataStore,bstrServiceName,ppServiceSDO)
#define ISdoMachine_GetUserSDO(This,eDataStore,bstrUserName,ppUserSDO) (This)->lpVtbl->GetUserSDO(This,eDataStore,bstrUserName,ppUserSDO)
#define ISdoMachine_GetOSType(This,eOSType) (This)->lpVtbl->GetOSType(This,eOSType)
#define ISdoMachine_GetDomainType(This,eDomainType) (This)->lpVtbl->GetDomainType(This,eDomainType)
#define ISdoMachine_IsDirectoryAvailable(This,boolDirectoryAvailable) (This)->lpVtbl->IsDirectoryAvailable(This,boolDirectoryAvailable)
#define ISdoMachine_GetAttachedComputer(This,bstrComputerName) (This)->lpVtbl->GetAttachedComputer(This,bstrComputerName)
#define ISdoMachine_GetSDOSchema(This,ppSDOSchema) (This)->lpVtbl->GetSDOSchema(This,ppSDOSchema)
#endif
#endif
  HRESULT WINAPI ISdoMachine_Attach_Proxy(ISdoMachine *This,BSTR bstrComputerName);
  void __RPC_STUB ISdoMachine_Attach_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoMachine_GetDictionarySDO_Proxy(ISdoMachine *This,IUnknown **ppDictionarySDO);
  void __RPC_STUB ISdoMachine_GetDictionarySDO_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoMachine_GetServiceSDO_Proxy(ISdoMachine *This,IASDATASTORE eDataStore,BSTR bstrServiceName,IUnknown **ppServiceSDO);
  void __RPC_STUB ISdoMachine_GetServiceSDO_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoMachine_GetUserSDO_Proxy(ISdoMachine *This,IASDATASTORE eDataStore,BSTR bstrUserName,IUnknown **ppUserSDO);
  void __RPC_STUB ISdoMachine_GetUserSDO_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoMachine_GetOSType_Proxy(ISdoMachine *This,IASOSTYPE *eOSType);
  void __RPC_STUB ISdoMachine_GetOSType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoMachine_GetDomainType_Proxy(ISdoMachine *This,IASDOMAINTYPE *eDomainType);
  void __RPC_STUB ISdoMachine_GetDomainType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoMachine_IsDirectoryAvailable_Proxy(ISdoMachine *This,VARIANT_BOOL *boolDirectoryAvailable);
  void __RPC_STUB ISdoMachine_IsDirectoryAvailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoMachine_GetAttachedComputer_Proxy(ISdoMachine *This,BSTR *bstrComputerName);
  void __RPC_STUB ISdoMachine_GetAttachedComputer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoMachine_GetSDOSchema_Proxy(ISdoMachine *This,IUnknown **ppSDOSchema);
  void __RPC_STUB ISdoMachine_GetSDOSchema_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISdoServiceControl_INTERFACE_DEFINED__
#define __ISdoServiceControl_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISdoServiceControl;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ISdoServiceControl : public IDispatch {
  public:
    virtual HRESULT WINAPI StartService(void) = 0;
    virtual HRESULT WINAPI StopService(void) = 0;
    virtual HRESULT WINAPI GetServiceStatus(LONG *status) = 0;
    virtual HRESULT WINAPI ResetService(void) = 0;
  };
#else
  typedef struct ISdoServiceControlVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ISdoServiceControl *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ISdoServiceControl *This);
      ULONG (WINAPI *Release)(ISdoServiceControl *This);
      HRESULT (WINAPI *GetTypeInfoCount)(ISdoServiceControl *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(ISdoServiceControl *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(ISdoServiceControl *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(ISdoServiceControl *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *StartService)(ISdoServiceControl *This);
      HRESULT (WINAPI *StopService)(ISdoServiceControl *This);
      HRESULT (WINAPI *GetServiceStatus)(ISdoServiceControl *This,LONG *status);
      HRESULT (WINAPI *ResetService)(ISdoServiceControl *This);
    END_INTERFACE
  } ISdoServiceControlVtbl;
  struct ISdoServiceControl {
    CONST_VTBL struct ISdoServiceControlVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ISdoServiceControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISdoServiceControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISdoServiceControl_Release(This) (This)->lpVtbl->Release(This)
#define ISdoServiceControl_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISdoServiceControl_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISdoServiceControl_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISdoServiceControl_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISdoServiceControl_StartService(This) (This)->lpVtbl->StartService(This)
#define ISdoServiceControl_StopService(This) (This)->lpVtbl->StopService(This)
#define ISdoServiceControl_GetServiceStatus(This,status) (This)->lpVtbl->GetServiceStatus(This,status)
#define ISdoServiceControl_ResetService(This) (This)->lpVtbl->ResetService(This)
#endif
#endif
  HRESULT WINAPI ISdoServiceControl_StartService_Proxy(ISdoServiceControl *This);
  void __RPC_STUB ISdoServiceControl_StartService_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoServiceControl_StopService_Proxy(ISdoServiceControl *This);
  void __RPC_STUB ISdoServiceControl_StopService_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoServiceControl_GetServiceStatus_Proxy(ISdoServiceControl *This,LONG *status);
  void __RPC_STUB ISdoServiceControl_GetServiceStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoServiceControl_ResetService_Proxy(ISdoServiceControl *This);
  void __RPC_STUB ISdoServiceControl_ResetService_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISdo_INTERFACE_DEFINED__
#define __ISdo_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISdo;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ISdo : public IDispatch {
  public:
    virtual HRESULT WINAPI GetPropertyInfo(LONG Id,IUnknown **ppPropertyInfo) = 0;
    virtual HRESULT WINAPI GetProperty(LONG Id,VARIANT *pValue) = 0;
    virtual HRESULT WINAPI PutProperty(LONG Id,VARIANT *pValue) = 0;
    virtual HRESULT WINAPI ResetProperty(LONG Id) = 0;
    virtual HRESULT WINAPI Apply(void) = 0;
    virtual HRESULT WINAPI Restore(void) = 0;
    virtual HRESULT WINAPI get__NewEnum(IUnknown **ppEnumVARIANT) = 0;
  };
#else
  typedef struct ISdoVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ISdo *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ISdo *This);
      ULONG (WINAPI *Release)(ISdo *This);
      HRESULT (WINAPI *GetTypeInfoCount)(ISdo *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(ISdo *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(ISdo *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(ISdo *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *GetPropertyInfo)(ISdo *This,LONG Id,IUnknown **ppPropertyInfo);
      HRESULT (WINAPI *GetProperty)(ISdo *This,LONG Id,VARIANT *pValue);
      HRESULT (WINAPI *PutProperty)(ISdo *This,LONG Id,VARIANT *pValue);
      HRESULT (WINAPI *ResetProperty)(ISdo *This,LONG Id);
      HRESULT (WINAPI *Apply)(ISdo *This);
      HRESULT (WINAPI *Restore)(ISdo *This);
      HRESULT (WINAPI *get__NewEnum)(ISdo *This,IUnknown **ppEnumVARIANT);
    END_INTERFACE
  } ISdoVtbl;
  struct ISdo {
    CONST_VTBL struct ISdoVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ISdo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISdo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISdo_Release(This) (This)->lpVtbl->Release(This)
#define ISdo_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISdo_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISdo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISdo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISdo_GetPropertyInfo(This,Id,ppPropertyInfo) (This)->lpVtbl->GetPropertyInfo(This,Id,ppPropertyInfo)
#define ISdo_GetProperty(This,Id,pValue) (This)->lpVtbl->GetProperty(This,Id,pValue)
#define ISdo_PutProperty(This,Id,pValue) (This)->lpVtbl->PutProperty(This,Id,pValue)
#define ISdo_ResetProperty(This,Id) (This)->lpVtbl->ResetProperty(This,Id)
#define ISdo_Apply(This) (This)->lpVtbl->Apply(This)
#define ISdo_Restore(This) (This)->lpVtbl->Restore(This)
#define ISdo_get__NewEnum(This,ppEnumVARIANT) (This)->lpVtbl->get__NewEnum(This,ppEnumVARIANT)
#endif
#endif
  HRESULT WINAPI ISdo_GetPropertyInfo_Proxy(ISdo *This,LONG Id,IUnknown **ppPropertyInfo);
  void __RPC_STUB ISdo_GetPropertyInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdo_GetProperty_Proxy(ISdo *This,LONG Id,VARIANT *pValue);
  void __RPC_STUB ISdo_GetProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdo_PutProperty_Proxy(ISdo *This,LONG Id,VARIANT *pValue);
  void __RPC_STUB ISdo_PutProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdo_ResetProperty_Proxy(ISdo *This,LONG Id);
  void __RPC_STUB ISdo_ResetProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdo_Apply_Proxy(ISdo *This);
  void __RPC_STUB ISdo_Apply_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdo_Restore_Proxy(ISdo *This);
  void __RPC_STUB ISdo_Restore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdo_get__NewEnum_Proxy(ISdo *This,IUnknown **ppEnumVARIANT);
  void __RPC_STUB ISdo_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISdoCollection_INTERFACE_DEFINED__
#define __ISdoCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISdoCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ISdoCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_Count(long *pCount) = 0;
    virtual HRESULT WINAPI Add(BSTR bstrName,IDispatch **ppItem) = 0;
    virtual HRESULT WINAPI Remove(IDispatch *pItem) = 0;
    virtual HRESULT WINAPI RemoveAll(void) = 0;
    virtual HRESULT WINAPI Reload(void) = 0;
    virtual HRESULT WINAPI IsNameUnique(BSTR bstrName,VARIANT_BOOL *pBool) = 0;
    virtual HRESULT WINAPI Item(VARIANT *Name,IDispatch **pItem) = 0;
    virtual HRESULT WINAPI get__NewEnum(IUnknown **ppEnumVARIANT) = 0;
  };
#else
  typedef struct ISdoCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ISdoCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ISdoCollection *This);
      ULONG (WINAPI *Release)(ISdoCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(ISdoCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(ISdoCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(ISdoCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(ISdoCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Count)(ISdoCollection *This,long *pCount);
      HRESULT (WINAPI *Add)(ISdoCollection *This,BSTR bstrName,IDispatch **ppItem);
      HRESULT (WINAPI *Remove)(ISdoCollection *This,IDispatch *pItem);
      HRESULT (WINAPI *RemoveAll)(ISdoCollection *This);
      HRESULT (WINAPI *Reload)(ISdoCollection *This);
      HRESULT (WINAPI *IsNameUnique)(ISdoCollection *This,BSTR bstrName,VARIANT_BOOL *pBool);
      HRESULT (WINAPI *Item)(ISdoCollection *This,VARIANT *Name,IDispatch **pItem);
      HRESULT (WINAPI *get__NewEnum)(ISdoCollection *This,IUnknown **ppEnumVARIANT);
    END_INTERFACE
  } ISdoCollectionVtbl;
  struct ISdoCollection {
    CONST_VTBL struct ISdoCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ISdoCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISdoCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISdoCollection_Release(This) (This)->lpVtbl->Release(This)
#define ISdoCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISdoCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISdoCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISdoCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISdoCollection_get_Count(This,pCount) (This)->lpVtbl->get_Count(This,pCount)
#define ISdoCollection_Add(This,bstrName,ppItem) (This)->lpVtbl->Add(This,bstrName,ppItem)
#define ISdoCollection_Remove(This,pItem) (This)->lpVtbl->Remove(This,pItem)
#define ISdoCollection_RemoveAll(This) (This)->lpVtbl->RemoveAll(This)
#define ISdoCollection_Reload(This) (This)->lpVtbl->Reload(This)
#define ISdoCollection_IsNameUnique(This,bstrName,pBool) (This)->lpVtbl->IsNameUnique(This,bstrName,pBool)
#define ISdoCollection_Item(This,Name,pItem) (This)->lpVtbl->Item(This,Name,pItem)
#define ISdoCollection_get__NewEnum(This,ppEnumVARIANT) (This)->lpVtbl->get__NewEnum(This,ppEnumVARIANT)
#endif
#endif
  HRESULT WINAPI ISdoCollection_get_Count_Proxy(ISdoCollection *This,long *pCount);
  void __RPC_STUB ISdoCollection_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoCollection_Add_Proxy(ISdoCollection *This,BSTR bstrName,IDispatch **ppItem);
  void __RPC_STUB ISdoCollection_Add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoCollection_Remove_Proxy(ISdoCollection *This,IDispatch *pItem);
  void __RPC_STUB ISdoCollection_Remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoCollection_RemoveAll_Proxy(ISdoCollection *This);
  void __RPC_STUB ISdoCollection_RemoveAll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoCollection_Reload_Proxy(ISdoCollection *This);
  void __RPC_STUB ISdoCollection_Reload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoCollection_IsNameUnique_Proxy(ISdoCollection *This,BSTR bstrName,VARIANT_BOOL *pBool);
  void __RPC_STUB ISdoCollection_IsNameUnique_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoCollection_Item_Proxy(ISdoCollection *This,VARIANT *Name,IDispatch **pItem);
  void __RPC_STUB ISdoCollection_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoCollection_get__NewEnum_Proxy(ISdoCollection *This,IUnknown **ppEnumVARIANT);
  void __RPC_STUB ISdoCollection_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISdoDictionaryOld_INTERFACE_DEFINED__
#define __ISdoDictionaryOld_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISdoDictionaryOld;
#if defined(__cplusplus) && !defined(CINTERFACE)

  struct ISdoDictionaryOld : public IDispatch {
  public:
    virtual HRESULT WINAPI EnumAttributes(VARIANT *Id,VARIANT *pValues) = 0;
    virtual HRESULT WINAPI GetAttributeInfo(ATTRIBUTEID Id,VARIANT *pInfoIDs,VARIANT *pInfoValues) = 0;
    virtual HRESULT WINAPI EnumAttributeValues(ATTRIBUTEID Id,VARIANT *pValueIds,VARIANT *pValuesDesc) = 0;
    virtual HRESULT WINAPI CreateAttribute(ATTRIBUTEID Id,IDispatch **ppAttributeObject) = 0;
    virtual HRESULT WINAPI GetAttributeID(BSTR bstrAttributeName,ATTRIBUTEID *pId) = 0;
  };
#else
  typedef struct ISdoDictionaryOldVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ISdoDictionaryOld *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ISdoDictionaryOld *This);
      ULONG (WINAPI *Release)(ISdoDictionaryOld *This);
      HRESULT (WINAPI *GetTypeInfoCount)(ISdoDictionaryOld *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(ISdoDictionaryOld *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(ISdoDictionaryOld *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(ISdoDictionaryOld *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *EnumAttributes)(ISdoDictionaryOld *This,VARIANT *Id,VARIANT *pValues);
      HRESULT (WINAPI *GetAttributeInfo)(ISdoDictionaryOld *This,ATTRIBUTEID Id,VARIANT *pInfoIDs,VARIANT *pInfoValues);
      HRESULT (WINAPI *EnumAttributeValues)(ISdoDictionaryOld *This,ATTRIBUTEID Id,VARIANT *pValueIds,VARIANT *pValuesDesc);
      HRESULT (WINAPI *CreateAttribute)(ISdoDictionaryOld *This,ATTRIBUTEID Id,IDispatch **ppAttributeObject);
      HRESULT (WINAPI *GetAttributeID)(ISdoDictionaryOld *This,BSTR bstrAttributeName,ATTRIBUTEID *pId);
    END_INTERFACE
  } ISdoDictionaryOldVtbl;
  struct ISdoDictionaryOld {
    CONST_VTBL struct ISdoDictionaryOldVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ISdoDictionaryOld_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISdoDictionaryOld_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISdoDictionaryOld_Release(This) (This)->lpVtbl->Release(This)
#define ISdoDictionaryOld_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISdoDictionaryOld_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISdoDictionaryOld_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISdoDictionaryOld_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISdoDictionaryOld_EnumAttributes(This,Id,pValues) (This)->lpVtbl->EnumAttributes(This,Id,pValues)
#define ISdoDictionaryOld_GetAttributeInfo(This,Id,pInfoIDs,pInfoValues) (This)->lpVtbl->GetAttributeInfo(This,Id,pInfoIDs,pInfoValues)
#define ISdoDictionaryOld_EnumAttributeValues(This,Id,pValueIds,pValuesDesc) (This)->lpVtbl->EnumAttributeValues(This,Id,pValueIds,pValuesDesc)
#define ISdoDictionaryOld_CreateAttribute(This,Id,ppAttributeObject) (This)->lpVtbl->CreateAttribute(This,Id,ppAttributeObject)
#define ISdoDictionaryOld_GetAttributeID(This,bstrAttributeName,pId) (This)->lpVtbl->GetAttributeID(This,bstrAttributeName,pId)
#endif
#endif
  HRESULT WINAPI ISdoDictionaryOld_EnumAttributes_Proxy(ISdoDictionaryOld *This,VARIANT *Id,VARIANT *pValues);
  void __RPC_STUB ISdoDictionaryOld_EnumAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoDictionaryOld_GetAttributeInfo_Proxy(ISdoDictionaryOld *This,ATTRIBUTEID Id,VARIANT *pInfoIDs,VARIANT *pInfoValues);
  void __RPC_STUB ISdoDictionaryOld_GetAttributeInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoDictionaryOld_EnumAttributeValues_Proxy(ISdoDictionaryOld *This,ATTRIBUTEID Id,VARIANT *pValueIds,VARIANT *pValuesDesc);
  void __RPC_STUB ISdoDictionaryOld_EnumAttributeValues_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoDictionaryOld_CreateAttribute_Proxy(ISdoDictionaryOld *This,ATTRIBUTEID Id,IDispatch **ppAttributeObject);
  void __RPC_STUB ISdoDictionaryOld_CreateAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISdoDictionaryOld_GetAttributeID_Proxy(ISdoDictionaryOld *This,BSTR bstrAttributeName,ATTRIBUTEID *pId);
  void __RPC_STUB ISdoDictionaryOld_GetAttributeID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_SdoMachine;
#ifdef __cplusplus
  class SdoMachine;
#endif
#endif

#ifdef __cplusplus
}
#endif
#endif
