using System;

// namespace Devices.Tapi
namespace Win32
{
	extension Win32
	{
		// --- Constants ---
		
		public const uint32 TAPI_CURRENT_VERSION = 131074;
		public const int32 LINE_ADDRESSSTATE = 0;
		public const int32 LINE_CALLINFO = 1;
		public const int32 LINE_CALLSTATE = 2;
		public const int32 LINE_CLOSE = 3;
		public const int32 LINE_DEVSPECIFIC = 4;
		public const int32 LINE_DEVSPECIFICFEATURE = 5;
		public const int32 LINE_GATHERDIGITS = 6;
		public const int32 LINE_GENERATE = 7;
		public const int32 LINE_LINEDEVSTATE = 8;
		public const int32 LINE_MONITORDIGITS = 9;
		public const int32 LINE_MONITORMEDIA = 10;
		public const int32 LINE_MONITORTONE = 11;
		public const int32 LINE_REPLY = 12;
		public const int32 LINE_REQUEST = 13;
		public const int32 PHONE_BUTTON = 14;
		public const int32 PHONE_CLOSE = 15;
		public const int32 PHONE_DEVSPECIFIC = 16;
		public const int32 PHONE_REPLY = 17;
		public const int32 PHONE_STATE = 18;
		public const int32 LINE_CREATE = 19;
		public const int32 PHONE_CREATE = 20;
		public const int32 LINE_AGENTSPECIFIC = 21;
		public const int32 LINE_AGENTSTATUS = 22;
		public const int32 LINE_APPNEWCALL = 23;
		public const int32 LINE_PROXYREQUEST = 24;
		public const int32 LINE_REMOVE = 25;
		public const int32 PHONE_REMOVE = 26;
		public const int32 LINE_AGENTSESSIONSTATUS = 27;
		public const int32 LINE_QUEUESTATUS = 28;
		public const int32 LINE_AGENTSTATUSEX = 29;
		public const int32 LINE_GROUPSTATUS = 30;
		public const int32 LINE_PROXYSTATUS = 31;
		public const int32 LINE_APPNEWCALLHUB = 32;
		public const int32 LINE_CALLHUBCLOSE = 33;
		public const int32 LINE_DEVSPECIFICEX = 34;
		public const uint32 INITIALIZE_NEGOTIATION = 4294967295;
		public const uint32 LINEADDRCAPFLAGS_FWDNUMRINGS = 1;
		public const uint32 LINEADDRCAPFLAGS_PICKUPGROUPID = 2;
		public const uint32 LINEADDRCAPFLAGS_SECURE = 4;
		public const uint32 LINEADDRCAPFLAGS_BLOCKIDDEFAULT = 8;
		public const uint32 LINEADDRCAPFLAGS_BLOCKIDOVERRIDE = 16;
		public const uint32 LINEADDRCAPFLAGS_DIALED = 32;
		public const uint32 LINEADDRCAPFLAGS_ORIGOFFHOOK = 64;
		public const uint32 LINEADDRCAPFLAGS_DESTOFFHOOK = 128;
		public const uint32 LINEADDRCAPFLAGS_FWDCONSULT = 256;
		public const uint32 LINEADDRCAPFLAGS_SETUPCONFNULL = 512;
		public const uint32 LINEADDRCAPFLAGS_AUTORECONNECT = 1024;
		public const uint32 LINEADDRCAPFLAGS_COMPLETIONID = 2048;
		public const uint32 LINEADDRCAPFLAGS_TRANSFERHELD = 4096;
		public const uint32 LINEADDRCAPFLAGS_TRANSFERMAKE = 8192;
		public const uint32 LINEADDRCAPFLAGS_CONFERENCEHELD = 16384;
		public const uint32 LINEADDRCAPFLAGS_CONFERENCEMAKE = 32768;
		public const uint32 LINEADDRCAPFLAGS_PARTIALDIAL = 65536;
		public const uint32 LINEADDRCAPFLAGS_FWDSTATUSVALID = 131072;
		public const uint32 LINEADDRCAPFLAGS_FWDINTEXTADDR = 262144;
		public const uint32 LINEADDRCAPFLAGS_FWDBUSYNAADDR = 524288;
		public const uint32 LINEADDRCAPFLAGS_ACCEPTTOALERT = 1048576;
		public const uint32 LINEADDRCAPFLAGS_CONFDROP = 2097152;
		public const uint32 LINEADDRCAPFLAGS_PICKUPCALLWAIT = 4194304;
		public const uint32 LINEADDRCAPFLAGS_PREDICTIVEDIALER = 8388608;
		public const uint32 LINEADDRCAPFLAGS_QUEUE = 16777216;
		public const uint32 LINEADDRCAPFLAGS_ROUTEPOINT = 33554432;
		public const uint32 LINEADDRCAPFLAGS_HOLDMAKESNEW = 67108864;
		public const uint32 LINEADDRCAPFLAGS_NOINTERNALCALLS = 134217728;
		public const uint32 LINEADDRCAPFLAGS_NOEXTERNALCALLS = 268435456;
		public const uint32 LINEADDRCAPFLAGS_SETCALLINGID = 536870912;
		public const uint32 LINEADDRCAPFLAGS_ACDGROUP = 1073741824;
		public const uint32 LINEADDRCAPFLAGS_NOPSTNADDRESSTRANSLATION = 2147483648;
		public const uint32 LINEADDRESSMODE_ADDRESSID = 1;
		public const uint32 LINEADDRESSMODE_DIALABLEADDR = 2;
		public const uint32 LINEADDRESSSHARING_PRIVATE = 1;
		public const uint32 LINEADDRESSSHARING_BRIDGEDEXCL = 2;
		public const uint32 LINEADDRESSSHARING_BRIDGEDNEW = 4;
		public const uint32 LINEADDRESSSHARING_BRIDGEDSHARED = 8;
		public const uint32 LINEADDRESSSHARING_MONITORED = 16;
		public const uint32 LINEADDRESSSTATE_OTHER = 1;
		public const uint32 LINEADDRESSSTATE_DEVSPECIFIC = 2;
		public const uint32 LINEADDRESSSTATE_INUSEZERO = 4;
		public const uint32 LINEADDRESSSTATE_INUSEONE = 8;
		public const uint32 LINEADDRESSSTATE_INUSEMANY = 16;
		public const uint32 LINEADDRESSSTATE_NUMCALLS = 32;
		public const uint32 LINEADDRESSSTATE_FORWARD = 64;
		public const uint32 LINEADDRESSSTATE_TERMINALS = 128;
		public const uint32 LINEADDRESSSTATE_CAPSCHANGE = 256;
		public const uint32 LINEADDRESSTYPE_PHONENUMBER = 1;
		public const uint32 LINEADDRESSTYPE_SDP = 2;
		public const uint32 LINEADDRESSTYPE_EMAILNAME = 4;
		public const uint32 LINEADDRESSTYPE_DOMAINNAME = 8;
		public const uint32 LINEADDRESSTYPE_IPADDRESS = 16;
		public const uint32 LINEADDRFEATURE_FORWARD = 1;
		public const uint32 LINEADDRFEATURE_MAKECALL = 2;
		public const uint32 LINEADDRFEATURE_PICKUP = 4;
		public const uint32 LINEADDRFEATURE_SETMEDIACONTROL = 8;
		public const uint32 LINEADDRFEATURE_SETTERMINAL = 16;
		public const uint32 LINEADDRFEATURE_SETUPCONF = 32;
		public const uint32 LINEADDRFEATURE_UNCOMPLETECALL = 64;
		public const uint32 LINEADDRFEATURE_UNPARK = 128;
		public const uint32 LINEADDRFEATURE_PICKUPHELD = 256;
		public const uint32 LINEADDRFEATURE_PICKUPGROUP = 512;
		public const uint32 LINEADDRFEATURE_PICKUPDIRECT = 1024;
		public const uint32 LINEADDRFEATURE_PICKUPWAITING = 2048;
		public const uint32 LINEADDRFEATURE_FORWARDFWD = 4096;
		public const uint32 LINEADDRFEATURE_FORWARDDND = 8192;
		public const uint32 LINEAGENTFEATURE_SETAGENTGROUP = 1;
		public const uint32 LINEAGENTFEATURE_SETAGENTSTATE = 2;
		public const uint32 LINEAGENTFEATURE_SETAGENTACTIVITY = 4;
		public const uint32 LINEAGENTFEATURE_AGENTSPECIFIC = 8;
		public const uint32 LINEAGENTFEATURE_GETAGENTACTIVITYLIST = 16;
		public const uint32 LINEAGENTFEATURE_GETAGENTGROUP = 32;
		public const uint32 LINEAGENTSTATE_LOGGEDOFF = 1;
		public const uint32 LINEAGENTSTATE_NOTREADY = 2;
		public const uint32 LINEAGENTSTATE_READY = 4;
		public const uint32 LINEAGENTSTATE_BUSYACD = 8;
		public const uint32 LINEAGENTSTATE_BUSYINCOMING = 16;
		public const uint32 LINEAGENTSTATE_BUSYOUTBOUND = 32;
		public const uint32 LINEAGENTSTATE_BUSYOTHER = 64;
		public const uint32 LINEAGENTSTATE_WORKINGAFTERCALL = 128;
		public const uint32 LINEAGENTSTATE_UNKNOWN = 256;
		public const uint32 LINEAGENTSTATE_UNAVAIL = 512;
		public const uint32 LINEAGENTSTATUS_GROUP = 1;
		public const uint32 LINEAGENTSTATUS_STATE = 2;
		public const uint32 LINEAGENTSTATUS_NEXTSTATE = 4;
		public const uint32 LINEAGENTSTATUS_ACTIVITY = 8;
		public const uint32 LINEAGENTSTATUS_ACTIVITYLIST = 16;
		public const uint32 LINEAGENTSTATUS_GROUPLIST = 32;
		public const uint32 LINEAGENTSTATUS_CAPSCHANGE = 64;
		public const uint32 LINEAGENTSTATUS_VALIDSTATES = 128;
		public const uint32 LINEAGENTSTATUS_VALIDNEXTSTATES = 256;
		public const uint32 LINEAGENTSTATEEX_NOTREADY = 1;
		public const uint32 LINEAGENTSTATEEX_READY = 2;
		public const uint32 LINEAGENTSTATEEX_BUSYACD = 4;
		public const uint32 LINEAGENTSTATEEX_BUSYINCOMING = 8;
		public const uint32 LINEAGENTSTATEEX_BUSYOUTGOING = 16;
		public const uint32 LINEAGENTSTATEEX_UNKNOWN = 32;
		public const uint32 LINEAGENTSTATEEX_RELEASED = 64;
		public const uint32 LINEAGENTSTATUSEX_NEWAGENT = 1;
		public const uint32 LINEAGENTSTATUSEX_STATE = 2;
		public const uint32 LINEAGENTSTATUSEX_UPDATEINFO = 4;
		public const uint32 LINEAGENTSESSIONSTATE_NOTREADY = 1;
		public const uint32 LINEAGENTSESSIONSTATE_READY = 2;
		public const uint32 LINEAGENTSESSIONSTATE_BUSYONCALL = 4;
		public const uint32 LINEAGENTSESSIONSTATE_BUSYWRAPUP = 8;
		public const uint32 LINEAGENTSESSIONSTATE_ENDED = 16;
		public const uint32 LINEAGENTSESSIONSTATE_RELEASED = 32;
		public const uint32 LINEAGENTSESSIONSTATUS_NEWSESSION = 1;
		public const uint32 LINEAGENTSESSIONSTATUS_STATE = 2;
		public const uint32 LINEAGENTSESSIONSTATUS_UPDATEINFO = 4;
		public const uint32 LINEQUEUESTATUS_UPDATEINFO = 1;
		public const uint32 LINEQUEUESTATUS_NEWQUEUE = 2;
		public const uint32 LINEQUEUESTATUS_QUEUEREMOVED = 4;
		public const uint32 LINEGROUPSTATUS_NEWGROUP = 1;
		public const uint32 LINEGROUPSTATUS_GROUPREMOVED = 2;
		public const uint32 LINEPROXYSTATUS_OPEN = 1;
		public const uint32 LINEPROXYSTATUS_CLOSE = 2;
		public const uint32 LINEPROXYSTATUS_ALLOPENFORACD = 4;
		public const uint32 LINEANSWERMODE_NONE = 1;
		public const uint32 LINEANSWERMODE_DROP = 2;
		public const uint32 LINEANSWERMODE_HOLD = 4;
		public const uint32 LINEBEARERMODE_VOICE = 1;
		public const uint32 LINEBEARERMODE_SPEECH = 2;
		public const uint32 LINEBEARERMODE_MULTIUSE = 4;
		public const uint32 LINEBEARERMODE_DATA = 8;
		public const uint32 LINEBEARERMODE_ALTSPEECHDATA = 16;
		public const uint32 LINEBEARERMODE_NONCALLSIGNALING = 32;
		public const uint32 LINEBEARERMODE_PASSTHROUGH = 64;
		public const uint32 LINEBEARERMODE_RESTRICTEDDATA = 128;
		public const uint32 LINEBUSYMODE_STATION = 1;
		public const uint32 LINEBUSYMODE_TRUNK = 2;
		public const uint32 LINEBUSYMODE_UNKNOWN = 4;
		public const uint32 LINEBUSYMODE_UNAVAIL = 8;
		public const uint32 LINECALLCOMPLCOND_BUSY = 1;
		public const uint32 LINECALLCOMPLCOND_NOANSWER = 2;
		public const uint32 LINECALLCOMPLMODE_CAMPON = 1;
		public const uint32 LINECALLCOMPLMODE_CALLBACK = 2;
		public const uint32 LINECALLCOMPLMODE_INTRUDE = 4;
		public const uint32 LINECALLCOMPLMODE_MESSAGE = 8;
		public const uint32 LINECALLFEATURE_ACCEPT = 1;
		public const uint32 LINECALLFEATURE_ADDTOCONF = 2;
		public const uint32 LINECALLFEATURE_ANSWER = 4;
		public const uint32 LINECALLFEATURE_BLINDTRANSFER = 8;
		public const uint32 LINECALLFEATURE_COMPLETECALL = 16;
		public const uint32 LINECALLFEATURE_COMPLETETRANSF = 32;
		public const uint32 LINECALLFEATURE_DIAL = 64;
		public const uint32 LINECALLFEATURE_DROP = 128;
		public const uint32 LINECALLFEATURE_GATHERDIGITS = 256;
		public const uint32 LINECALLFEATURE_GENERATEDIGITS = 512;
		public const uint32 LINECALLFEATURE_GENERATETONE = 1024;
		public const uint32 LINECALLFEATURE_HOLD = 2048;
		public const uint32 LINECALLFEATURE_MONITORDIGITS = 4096;
		public const uint32 LINECALLFEATURE_MONITORMEDIA = 8192;
		public const uint32 LINECALLFEATURE_MONITORTONES = 16384;
		public const uint32 LINECALLFEATURE_PARK = 32768;
		public const uint32 LINECALLFEATURE_PREPAREADDCONF = 65536;
		public const uint32 LINECALLFEATURE_REDIRECT = 131072;
		public const uint32 LINECALLFEATURE_REMOVEFROMCONF = 262144;
		public const uint32 LINECALLFEATURE_SECURECALL = 524288;
		public const uint32 LINECALLFEATURE_SENDUSERUSER = 1048576;
		public const uint32 LINECALLFEATURE_SETCALLPARAMS = 2097152;
		public const uint32 LINECALLFEATURE_SETMEDIACONTROL = 4194304;
		public const uint32 LINECALLFEATURE_SETTERMINAL = 8388608;
		public const uint32 LINECALLFEATURE_SETUPCONF = 16777216;
		public const uint32 LINECALLFEATURE_SETUPTRANSFER = 33554432;
		public const uint32 LINECALLFEATURE_SWAPHOLD = 67108864;
		public const uint32 LINECALLFEATURE_UNHOLD = 134217728;
		public const uint32 LINECALLFEATURE_RELEASEUSERUSERINFO = 268435456;
		public const uint32 LINECALLFEATURE_SETTREATMENT = 536870912;
		public const uint32 LINECALLFEATURE_SETQOS = 1073741824;
		public const uint32 LINECALLFEATURE_SETCALLDATA = 2147483648;
		public const uint32 LINECALLFEATURE2_NOHOLDCONFERENCE = 1;
		public const uint32 LINECALLFEATURE2_ONESTEPTRANSFER = 2;
		public const uint32 LINECALLFEATURE2_COMPLCAMPON = 4;
		public const uint32 LINECALLFEATURE2_COMPLCALLBACK = 8;
		public const uint32 LINECALLFEATURE2_COMPLINTRUDE = 16;
		public const uint32 LINECALLFEATURE2_COMPLMESSAGE = 32;
		public const uint32 LINECALLFEATURE2_TRANSFERNORM = 64;
		public const uint32 LINECALLFEATURE2_TRANSFERCONF = 128;
		public const uint32 LINECALLFEATURE2_PARKDIRECT = 256;
		public const uint32 LINECALLFEATURE2_PARKNONDIRECT = 512;
		public const uint32 LINECALLHUBTRACKING_NONE = 0;
		public const uint32 LINECALLHUBTRACKING_PROVIDERLEVEL = 1;
		public const uint32 LINECALLHUBTRACKING_ALLCALLS = 2;
		public const uint32 LINECALLINFOSTATE_OTHER = 1;
		public const uint32 LINECALLINFOSTATE_DEVSPECIFIC = 2;
		public const uint32 LINECALLINFOSTATE_BEARERMODE = 4;
		public const uint32 LINECALLINFOSTATE_RATE = 8;
		public const uint32 LINECALLINFOSTATE_MEDIAMODE = 16;
		public const uint32 LINECALLINFOSTATE_APPSPECIFIC = 32;
		public const uint32 LINECALLINFOSTATE_CALLID = 64;
		public const uint32 LINECALLINFOSTATE_RELATEDCALLID = 128;
		public const uint32 LINECALLINFOSTATE_ORIGIN = 256;
		public const uint32 LINECALLINFOSTATE_REASON = 512;
		public const uint32 LINECALLINFOSTATE_COMPLETIONID = 1024;
		public const uint32 LINECALLINFOSTATE_NUMOWNERINCR = 2048;
		public const uint32 LINECALLINFOSTATE_NUMOWNERDECR = 4096;
		public const uint32 LINECALLINFOSTATE_NUMMONITORS = 8192;
		public const uint32 LINECALLINFOSTATE_TRUNK = 16384;
		public const uint32 LINECALLINFOSTATE_CALLERID = 32768;
		public const uint32 LINECALLINFOSTATE_CALLEDID = 65536;
		public const uint32 LINECALLINFOSTATE_CONNECTEDID = 131072;
		public const uint32 LINECALLINFOSTATE_REDIRECTIONID = 262144;
		public const uint32 LINECALLINFOSTATE_REDIRECTINGID = 524288;
		public const uint32 LINECALLINFOSTATE_DISPLAY = 1048576;
		public const uint32 LINECALLINFOSTATE_USERUSERINFO = 2097152;
		public const uint32 LINECALLINFOSTATE_HIGHLEVELCOMP = 4194304;
		public const uint32 LINECALLINFOSTATE_LOWLEVELCOMP = 8388608;
		public const uint32 LINECALLINFOSTATE_CHARGINGINFO = 16777216;
		public const uint32 LINECALLINFOSTATE_TERMINAL = 33554432;
		public const uint32 LINECALLINFOSTATE_DIALPARAMS = 67108864;
		public const uint32 LINECALLINFOSTATE_MONITORMODES = 134217728;
		public const uint32 LINECALLINFOSTATE_TREATMENT = 268435456;
		public const uint32 LINECALLINFOSTATE_QOS = 536870912;
		public const uint32 LINECALLINFOSTATE_CALLDATA = 1073741824;
		public const uint32 LINECALLORIGIN_OUTBOUND = 1;
		public const uint32 LINECALLORIGIN_INTERNAL = 2;
		public const uint32 LINECALLORIGIN_EXTERNAL = 4;
		public const uint32 LINECALLORIGIN_UNKNOWN = 16;
		public const uint32 LINECALLORIGIN_UNAVAIL = 32;
		public const uint32 LINECALLORIGIN_CONFERENCE = 64;
		public const uint32 LINECALLORIGIN_INBOUND = 128;
		public const uint32 LINECALLPARAMFLAGS_SECURE = 1;
		public const uint32 LINECALLPARAMFLAGS_IDLE = 2;
		public const uint32 LINECALLPARAMFLAGS_BLOCKID = 4;
		public const uint32 LINECALLPARAMFLAGS_ORIGOFFHOOK = 8;
		public const uint32 LINECALLPARAMFLAGS_DESTOFFHOOK = 16;
		public const uint32 LINECALLPARAMFLAGS_NOHOLDCONFERENCE = 32;
		public const uint32 LINECALLPARAMFLAGS_PREDICTIVEDIAL = 64;
		public const uint32 LINECALLPARAMFLAGS_ONESTEPTRANSFER = 128;
		public const uint32 LINECALLPARTYID_BLOCKED = 1;
		public const uint32 LINECALLPARTYID_OUTOFAREA = 2;
		public const uint32 LINECALLPARTYID_NAME = 4;
		public const uint32 LINECALLPARTYID_ADDRESS = 8;
		public const uint32 LINECALLPARTYID_PARTIAL = 16;
		public const uint32 LINECALLPARTYID_UNKNOWN = 32;
		public const uint32 LINECALLPARTYID_UNAVAIL = 64;
		public const uint32 LINECALLPRIVILEGE_NONE = 1;
		public const uint32 LINECALLPRIVILEGE_MONITOR = 2;
		public const uint32 LINECALLPRIVILEGE_OWNER = 4;
		public const uint32 LINECALLREASON_DIRECT = 1;
		public const uint32 LINECALLREASON_FWDBUSY = 2;
		public const uint32 LINECALLREASON_FWDNOANSWER = 4;
		public const uint32 LINECALLREASON_FWDUNCOND = 8;
		public const uint32 LINECALLREASON_PICKUP = 16;
		public const uint32 LINECALLREASON_UNPARK = 32;
		public const uint32 LINECALLREASON_REDIRECT = 64;
		public const uint32 LINECALLREASON_CALLCOMPLETION = 128;
		public const uint32 LINECALLREASON_TRANSFER = 256;
		public const uint32 LINECALLREASON_REMINDER = 512;
		public const uint32 LINECALLREASON_UNKNOWN = 1024;
		public const uint32 LINECALLREASON_UNAVAIL = 2048;
		public const uint32 LINECALLREASON_INTRUDE = 4096;
		public const uint32 LINECALLREASON_PARKED = 8192;
		public const uint32 LINECALLREASON_CAMPEDON = 16384;
		public const uint32 LINECALLREASON_ROUTEREQUEST = 32768;
		public const uint32 LINECALLSELECT_LINE = 1;
		public const uint32 LINECALLSELECT_ADDRESS = 2;
		public const uint32 LINECALLSELECT_CALL = 4;
		public const uint32 LINECALLSELECT_DEVICEID = 8;
		public const uint32 LINECALLSELECT_CALLID = 16;
		public const uint32 LINECALLSTATE_IDLE = 1;
		public const uint32 LINECALLSTATE_OFFERING = 2;
		public const uint32 LINECALLSTATE_ACCEPTED = 4;
		public const uint32 LINECALLSTATE_DIALTONE = 8;
		public const uint32 LINECALLSTATE_DIALING = 16;
		public const uint32 LINECALLSTATE_RINGBACK = 32;
		public const uint32 LINECALLSTATE_BUSY = 64;
		public const uint32 LINECALLSTATE_SPECIALINFO = 128;
		public const uint32 LINECALLSTATE_CONNECTED = 256;
		public const uint32 LINECALLSTATE_PROCEEDING = 512;
		public const uint32 LINECALLSTATE_ONHOLD = 1024;
		public const uint32 LINECALLSTATE_CONFERENCED = 2048;
		public const uint32 LINECALLSTATE_ONHOLDPENDCONF = 4096;
		public const uint32 LINECALLSTATE_ONHOLDPENDTRANSFER = 8192;
		public const uint32 LINECALLSTATE_DISCONNECTED = 16384;
		public const uint32 LINECALLSTATE_UNKNOWN = 32768;
		public const uint32 LINECALLTREATMENT_SILENCE = 1;
		public const uint32 LINECALLTREATMENT_RINGBACK = 2;
		public const uint32 LINECALLTREATMENT_BUSY = 3;
		public const uint32 LINECALLTREATMENT_MUSIC = 4;
		public const uint32 LINECARDOPTION_PREDEFINED = 1;
		public const uint32 LINECARDOPTION_HIDDEN = 2;
		public const uint32 LINECONNECTEDMODE_ACTIVE = 1;
		public const uint32 LINECONNECTEDMODE_INACTIVE = 2;
		public const uint32 LINECONNECTEDMODE_ACTIVEHELD = 4;
		public const uint32 LINECONNECTEDMODE_INACTIVEHELD = 8;
		public const uint32 LINECONNECTEDMODE_CONFIRMED = 16;
		public const uint32 LINEDEVCAPFLAGS_CROSSADDRCONF = 1;
		public const uint32 LINEDEVCAPFLAGS_HIGHLEVCOMP = 2;
		public const uint32 LINEDEVCAPFLAGS_LOWLEVCOMP = 4;
		public const uint32 LINEDEVCAPFLAGS_MEDIACONTROL = 8;
		public const uint32 LINEDEVCAPFLAGS_MULTIPLEADDR = 16;
		public const uint32 LINEDEVCAPFLAGS_CLOSEDROP = 32;
		public const uint32 LINEDEVCAPFLAGS_DIALBILLING = 64;
		public const uint32 LINEDEVCAPFLAGS_DIALQUIET = 128;
		public const uint32 LINEDEVCAPFLAGS_DIALDIALTONE = 256;
		public const uint32 LINEDEVCAPFLAGS_MSP = 512;
		public const uint32 LINEDEVCAPFLAGS_CALLHUB = 1024;
		public const uint32 LINEDEVCAPFLAGS_CALLHUBTRACKING = 2048;
		public const uint32 LINEDEVCAPFLAGS_PRIVATEOBJECTS = 4096;
		public const uint32 LINEDEVCAPFLAGS_LOCAL = 8192;
		public const uint32 LINEDEVSTATE_OTHER = 1;
		public const uint32 LINEDEVSTATE_RINGING = 2;
		public const uint32 LINEDEVSTATE_CONNECTED = 4;
		public const uint32 LINEDEVSTATE_DISCONNECTED = 8;
		public const uint32 LINEDEVSTATE_MSGWAITON = 16;
		public const uint32 LINEDEVSTATE_MSGWAITOFF = 32;
		public const uint32 LINEDEVSTATE_INSERVICE = 64;
		public const uint32 LINEDEVSTATE_OUTOFSERVICE = 128;
		public const uint32 LINEDEVSTATE_MAINTENANCE = 256;
		public const uint32 LINEDEVSTATE_OPEN = 512;
		public const uint32 LINEDEVSTATE_CLOSE = 1024;
		public const uint32 LINEDEVSTATE_NUMCALLS = 2048;
		public const uint32 LINEDEVSTATE_NUMCOMPLETIONS = 4096;
		public const uint32 LINEDEVSTATE_TERMINALS = 8192;
		public const uint32 LINEDEVSTATE_ROAMMODE = 16384;
		public const uint32 LINEDEVSTATE_BATTERY = 32768;
		public const uint32 LINEDEVSTATE_SIGNAL = 65536;
		public const uint32 LINEDEVSTATE_DEVSPECIFIC = 131072;
		public const uint32 LINEDEVSTATE_REINIT = 262144;
		public const uint32 LINEDEVSTATE_LOCK = 524288;
		public const uint32 LINEDEVSTATE_CAPSCHANGE = 1048576;
		public const uint32 LINEDEVSTATE_CONFIGCHANGE = 2097152;
		public const uint32 LINEDEVSTATE_TRANSLATECHANGE = 4194304;
		public const uint32 LINEDEVSTATE_COMPLCANCEL = 8388608;
		public const uint32 LINEDEVSTATE_REMOVED = 16777216;
		public const uint32 LINEDEVSTATUSFLAGS_CONNECTED = 1;
		public const uint32 LINEDEVSTATUSFLAGS_MSGWAIT = 2;
		public const uint32 LINEDEVSTATUSFLAGS_INSERVICE = 4;
		public const uint32 LINEDEVSTATUSFLAGS_LOCKED = 8;
		public const uint32 LINEDIALTONEMODE_NORMAL = 1;
		public const uint32 LINEDIALTONEMODE_SPECIAL = 2;
		public const uint32 LINEDIALTONEMODE_INTERNAL = 4;
		public const uint32 LINEDIALTONEMODE_EXTERNAL = 8;
		public const uint32 LINEDIALTONEMODE_UNKNOWN = 16;
		public const uint32 LINEDIALTONEMODE_UNAVAIL = 32;
		public const uint32 LINEDIGITMODE_PULSE = 1;
		public const uint32 LINEDIGITMODE_DTMF = 2;
		public const uint32 LINEDIGITMODE_DTMFEND = 4;
		public const uint32 LINEDISCONNECTMODE_NORMAL = 1;
		public const uint32 LINEDISCONNECTMODE_UNKNOWN = 2;
		public const uint32 LINEDISCONNECTMODE_REJECT = 4;
		public const uint32 LINEDISCONNECTMODE_PICKUP = 8;
		public const uint32 LINEDISCONNECTMODE_FORWARDED = 16;
		public const uint32 LINEDISCONNECTMODE_BUSY = 32;
		public const uint32 LINEDISCONNECTMODE_NOANSWER = 64;
		public const uint32 LINEDISCONNECTMODE_BADADDRESS = 128;
		public const uint32 LINEDISCONNECTMODE_UNREACHABLE = 256;
		public const uint32 LINEDISCONNECTMODE_CONGESTION = 512;
		public const uint32 LINEDISCONNECTMODE_INCOMPATIBLE = 1024;
		public const uint32 LINEDISCONNECTMODE_UNAVAIL = 2048;
		public const uint32 LINEDISCONNECTMODE_NODIALTONE = 4096;
		public const uint32 LINEDISCONNECTMODE_NUMBERCHANGED = 8192;
		public const uint32 LINEDISCONNECTMODE_OUTOFORDER = 16384;
		public const uint32 LINEDISCONNECTMODE_TEMPFAILURE = 32768;
		public const uint32 LINEDISCONNECTMODE_QOSUNAVAIL = 65536;
		public const uint32 LINEDISCONNECTMODE_BLOCKED = 131072;
		public const uint32 LINEDISCONNECTMODE_DONOTDISTURB = 262144;
		public const uint32 LINEDISCONNECTMODE_CANCELLED = 524288;
		public const uint32 LINEDISCONNECTMODE_DESTINATIONBARRED = 1048576;
		public const uint32 LINEDISCONNECTMODE_FDNRESTRICT = 2097152;
		public const uint32 LINEERR_ALLOCATED = 2147483649;
		public const uint32 LINEERR_BADDEVICEID = 2147483650;
		public const uint32 LINEERR_BEARERMODEUNAVAIL = 2147483651;
		public const uint32 LINEERR_CALLUNAVAIL = 2147483653;
		public const uint32 LINEERR_COMPLETIONOVERRUN = 2147483654;
		public const uint32 LINEERR_CONFERENCEFULL = 2147483655;
		public const uint32 LINEERR_DIALBILLING = 2147483656;
		public const uint32 LINEERR_DIALDIALTONE = 2147483657;
		public const uint32 LINEERR_DIALPROMPT = 2147483658;
		public const uint32 LINEERR_DIALQUIET = 2147483659;
		public const uint32 LINEERR_INCOMPATIBLEAPIVERSION = 2147483660;
		public const uint32 LINEERR_INCOMPATIBLEEXTVERSION = 2147483661;
		public const uint32 LINEERR_INIFILECORRUPT = 2147483662;
		public const uint32 LINEERR_INUSE = 2147483663;
		public const uint32 LINEERR_INVALADDRESS = 2147483664;
		public const uint32 LINEERR_INVALADDRESSID = 2147483665;
		public const uint32 LINEERR_INVALADDRESSMODE = 2147483666;
		public const uint32 LINEERR_INVALADDRESSSTATE = 2147483667;
		public const uint32 LINEERR_INVALAPPHANDLE = 2147483668;
		public const uint32 LINEERR_INVALAPPNAME = 2147483669;
		public const uint32 LINEERR_INVALBEARERMODE = 2147483670;
		public const uint32 LINEERR_INVALCALLCOMPLMODE = 2147483671;
		public const uint32 LINEERR_INVALCALLHANDLE = 2147483672;
		public const uint32 LINEERR_INVALCALLPARAMS = 2147483673;
		public const uint32 LINEERR_INVALCALLPRIVILEGE = 2147483674;
		public const uint32 LINEERR_INVALCALLSELECT = 2147483675;
		public const uint32 LINEERR_INVALCALLSTATE = 2147483676;
		public const uint32 LINEERR_INVALCALLSTATELIST = 2147483677;
		public const uint32 LINEERR_INVALCARD = 2147483678;
		public const uint32 LINEERR_INVALCOMPLETIONID = 2147483679;
		public const uint32 LINEERR_INVALCONFCALLHANDLE = 2147483680;
		public const uint32 LINEERR_INVALCONSULTCALLHANDLE = 2147483681;
		public const uint32 LINEERR_INVALCOUNTRYCODE = 2147483682;
		public const uint32 LINEERR_INVALDEVICECLASS = 2147483683;
		public const uint32 LINEERR_INVALDEVICEHANDLE = 2147483684;
		public const uint32 LINEERR_INVALDIALPARAMS = 2147483685;
		public const uint32 LINEERR_INVALDIGITLIST = 2147483686;
		public const uint32 LINEERR_INVALDIGITMODE = 2147483687;
		public const uint32 LINEERR_INVALDIGITS = 2147483688;
		public const uint32 LINEERR_INVALEXTVERSION = 2147483689;
		public const uint32 LINEERR_INVALGROUPID = 2147483690;
		public const uint32 LINEERR_INVALLINEHANDLE = 2147483691;
		public const uint32 LINEERR_INVALLINESTATE = 2147483692;
		public const uint32 LINEERR_INVALLOCATION = 2147483693;
		public const uint32 LINEERR_INVALMEDIALIST = 2147483694;
		public const uint32 LINEERR_INVALMEDIAMODE = 2147483695;
		public const uint32 LINEERR_INVALMESSAGEID = 2147483696;
		public const uint32 LINEERR_INVALPARAM = 2147483698;
		public const uint32 LINEERR_INVALPARKID = 2147483699;
		public const uint32 LINEERR_INVALPARKMODE = 2147483700;
		public const uint32 LINEERR_INVALPOINTER = 2147483701;
		public const uint32 LINEERR_INVALPRIVSELECT = 2147483702;
		public const uint32 LINEERR_INVALRATE = 2147483703;
		public const uint32 LINEERR_INVALREQUESTMODE = 2147483704;
		public const uint32 LINEERR_INVALTERMINALID = 2147483705;
		public const uint32 LINEERR_INVALTERMINALMODE = 2147483706;
		public const uint32 LINEERR_INVALTIMEOUT = 2147483707;
		public const uint32 LINEERR_INVALTONE = 2147483708;
		public const uint32 LINEERR_INVALTONELIST = 2147483709;
		public const uint32 LINEERR_INVALTONEMODE = 2147483710;
		public const uint32 LINEERR_INVALTRANSFERMODE = 2147483711;
		public const uint32 LINEERR_LINEMAPPERFAILED = 2147483712;
		public const uint32 LINEERR_NOCONFERENCE = 2147483713;
		public const uint32 LINEERR_NODEVICE = 2147483714;
		public const uint32 LINEERR_NODRIVER = 2147483715;
		public const uint32 LINEERR_NOMEM = 2147483716;
		public const uint32 LINEERR_NOREQUEST = 2147483717;
		public const uint32 LINEERR_NOTOWNER = 2147483718;
		public const uint32 LINEERR_NOTREGISTERED = 2147483719;
		public const uint32 LINEERR_OPERATIONFAILED = 2147483720;
		public const uint32 LINEERR_OPERATIONUNAVAIL = 2147483721;
		public const uint32 LINEERR_RATEUNAVAIL = 2147483722;
		public const uint32 LINEERR_RESOURCEUNAVAIL = 2147483723;
		public const uint32 LINEERR_REQUESTOVERRUN = 2147483724;
		public const uint32 LINEERR_STRUCTURETOOSMALL = 2147483725;
		public const uint32 LINEERR_TARGETNOTFOUND = 2147483726;
		public const uint32 LINEERR_TARGETSELF = 2147483727;
		public const uint32 LINEERR_UNINITIALIZED = 2147483728;
		public const uint32 LINEERR_USERUSERINFOTOOBIG = 2147483729;
		public const uint32 LINEERR_REINIT = 2147483730;
		public const uint32 LINEERR_ADDRESSBLOCKED = 2147483731;
		public const uint32 LINEERR_BILLINGREJECTED = 2147483732;
		public const uint32 LINEERR_INVALFEATURE = 2147483733;
		public const uint32 LINEERR_NOMULTIPLEINSTANCE = 2147483734;
		public const uint32 LINEERR_INVALAGENTID = 2147483735;
		public const uint32 LINEERR_INVALAGENTGROUP = 2147483736;
		public const uint32 LINEERR_INVALPASSWORD = 2147483737;
		public const uint32 LINEERR_INVALAGENTSTATE = 2147483738;
		public const uint32 LINEERR_INVALAGENTACTIVITY = 2147483739;
		public const uint32 LINEERR_DIALVOICEDETECT = 2147483740;
		public const uint32 LINEERR_USERCANCELLED = 2147483741;
		public const uint32 LINEERR_INVALADDRESSTYPE = 2147483742;
		public const uint32 LINEERR_INVALAGENTSESSIONSTATE = 2147483743;
		public const uint32 LINEERR_DISCONNECTED = 2147483744;
		public const uint32 LINEERR_SERVICE_NOT_RUNNING = 2147483745;
		public const uint32 LINEFEATURE_DEVSPECIFIC = 1;
		public const uint32 LINEFEATURE_DEVSPECIFICFEAT = 2;
		public const uint32 LINEFEATURE_FORWARD = 4;
		public const uint32 LINEFEATURE_MAKECALL = 8;
		public const uint32 LINEFEATURE_SETMEDIACONTROL = 16;
		public const uint32 LINEFEATURE_SETTERMINAL = 32;
		public const uint32 LINEFEATURE_SETDEVSTATUS = 64;
		public const uint32 LINEFEATURE_FORWARDFWD = 128;
		public const uint32 LINEFEATURE_FORWARDDND = 256;
		public const uint32 LINEFORWARDMODE_UNCOND = 1;
		public const uint32 LINEFORWARDMODE_UNCONDINTERNAL = 2;
		public const uint32 LINEFORWARDMODE_UNCONDEXTERNAL = 4;
		public const uint32 LINEFORWARDMODE_UNCONDSPECIFIC = 8;
		public const uint32 LINEFORWARDMODE_BUSY = 16;
		public const uint32 LINEFORWARDMODE_BUSYINTERNAL = 32;
		public const uint32 LINEFORWARDMODE_BUSYEXTERNAL = 64;
		public const uint32 LINEFORWARDMODE_BUSYSPECIFIC = 128;
		public const uint32 LINEFORWARDMODE_NOANSW = 256;
		public const uint32 LINEFORWARDMODE_NOANSWINTERNAL = 512;
		public const uint32 LINEFORWARDMODE_NOANSWEXTERNAL = 1024;
		public const uint32 LINEFORWARDMODE_NOANSWSPECIFIC = 2048;
		public const uint32 LINEFORWARDMODE_BUSYNA = 4096;
		public const uint32 LINEFORWARDMODE_BUSYNAINTERNAL = 8192;
		public const uint32 LINEFORWARDMODE_BUSYNAEXTERNAL = 16384;
		public const uint32 LINEFORWARDMODE_BUSYNASPECIFIC = 32768;
		public const uint32 LINEFORWARDMODE_UNKNOWN = 65536;
		public const uint32 LINEFORWARDMODE_UNAVAIL = 131072;
		public const uint32 LINEGATHERTERM_BUFFERFULL = 1;
		public const uint32 LINEGATHERTERM_TERMDIGIT = 2;
		public const uint32 LINEGATHERTERM_FIRSTTIMEOUT = 4;
		public const uint32 LINEGATHERTERM_INTERTIMEOUT = 8;
		public const uint32 LINEGATHERTERM_CANCEL = 16;
		public const uint32 LINEGENERATETERM_DONE = 1;
		public const uint32 LINEGENERATETERM_CANCEL = 2;
		public const uint32 LINEINITIALIZEEXOPTION_USEHIDDENWINDOW = 1;
		public const uint32 LINEINITIALIZEEXOPTION_USEEVENT = 2;
		public const uint32 LINEINITIALIZEEXOPTION_USECOMPLETIONPORT = 3;
		public const uint32 LINEINITIALIZEEXOPTION_CALLHUBTRACKING = 2147483648;
		public const uint32 LINELOCATIONOPTION_PULSEDIAL = 1;
		public const uint32 LINEMAPPER = 4294967295;
		public const uint32 LINEMEDIACONTROL_NONE = 1;
		public const uint32 LINEMEDIACONTROL_START = 2;
		public const uint32 LINEMEDIACONTROL_RESET = 4;
		public const uint32 LINEMEDIACONTROL_PAUSE = 8;
		public const uint32 LINEMEDIACONTROL_RESUME = 16;
		public const uint32 LINEMEDIACONTROL_RATEUP = 32;
		public const uint32 LINEMEDIACONTROL_RATEDOWN = 64;
		public const uint32 LINEMEDIACONTROL_RATENORMAL = 128;
		public const uint32 LINEMEDIACONTROL_VOLUMEUP = 256;
		public const uint32 LINEMEDIACONTROL_VOLUMEDOWN = 512;
		public const uint32 LINEMEDIACONTROL_VOLUMENORMAL = 1024;
		public const uint32 LINEMEDIAMODE_UNKNOWN = 2;
		public const uint32 LINEMEDIAMODE_INTERACTIVEVOICE = 4;
		public const uint32 LINEMEDIAMODE_AUTOMATEDVOICE = 8;
		public const uint32 LINEMEDIAMODE_DATAMODEM = 16;
		public const uint32 LINEMEDIAMODE_G3FAX = 32;
		public const uint32 LINEMEDIAMODE_TDD = 64;
		public const uint32 LINEMEDIAMODE_G4FAX = 128;
		public const uint32 LINEMEDIAMODE_DIGITALDATA = 256;
		public const uint32 LINEMEDIAMODE_TELETEX = 512;
		public const uint32 LINEMEDIAMODE_VIDEOTEX = 1024;
		public const uint32 LINEMEDIAMODE_TELEX = 2048;
		public const uint32 LINEMEDIAMODE_MIXED = 4096;
		public const uint32 LINEMEDIAMODE_ADSI = 8192;
		public const uint32 LINEMEDIAMODE_VOICEVIEW = 16384;
		public const uint32 LINEMEDIAMODE_VIDEO = 32768;
		public const uint32 LAST_LINEMEDIAMODE = 32768;
		public const uint32 LINEOFFERINGMODE_ACTIVE = 1;
		public const uint32 LINEOFFERINGMODE_INACTIVE = 2;
		public const uint32 LINEOPENOPTION_SINGLEADDRESS = 2147483648;
		public const uint32 LINEOPENOPTION_PROXY = 1073741824;
		public const uint32 LINEPARKMODE_DIRECTED = 1;
		public const uint32 LINEPARKMODE_NONDIRECTED = 2;
		public const uint32 LINEPROXYREQUEST_SETAGENTGROUP = 1;
		public const uint32 LINEPROXYREQUEST_SETAGENTSTATE = 2;
		public const uint32 LINEPROXYREQUEST_SETAGENTACTIVITY = 3;
		public const uint32 LINEPROXYREQUEST_GETAGENTCAPS = 4;
		public const uint32 LINEPROXYREQUEST_GETAGENTSTATUS = 5;
		public const uint32 LINEPROXYREQUEST_AGENTSPECIFIC = 6;
		public const uint32 LINEPROXYREQUEST_GETAGENTACTIVITYLIST = 7;
		public const uint32 LINEPROXYREQUEST_GETAGENTGROUPLIST = 8;
		public const uint32 LINEPROXYREQUEST_CREATEAGENT = 9;
		public const uint32 LINEPROXYREQUEST_SETAGENTMEASUREMENTPERIOD = 10;
		public const uint32 LINEPROXYREQUEST_GETAGENTINFO = 11;
		public const uint32 LINEPROXYREQUEST_CREATEAGENTSESSION = 12;
		public const uint32 LINEPROXYREQUEST_GETAGENTSESSIONLIST = 13;
		public const uint32 LINEPROXYREQUEST_SETAGENTSESSIONSTATE = 14;
		public const uint32 LINEPROXYREQUEST_GETAGENTSESSIONINFO = 15;
		public const uint32 LINEPROXYREQUEST_GETQUEUELIST = 16;
		public const uint32 LINEPROXYREQUEST_SETQUEUEMEASUREMENTPERIOD = 17;
		public const uint32 LINEPROXYREQUEST_GETQUEUEINFO = 18;
		public const uint32 LINEPROXYREQUEST_GETGROUPLIST = 19;
		public const uint32 LINEPROXYREQUEST_SETAGENTSTATEEX = 20;
		public const uint32 LINEREMOVEFROMCONF_NONE = 1;
		public const uint32 LINEREMOVEFROMCONF_LAST = 2;
		public const uint32 LINEREMOVEFROMCONF_ANY = 3;
		public const uint32 LINEREQUESTMODE_MAKECALL = 1;
		public const uint32 LINEREQUESTMODE_MEDIACALL = 2;
		public const uint32 LINEREQUESTMODE_DROP = 4;
		public const uint32 LAST_LINEREQUESTMODE = 2;
		public const uint32 LINEROAMMODE_UNKNOWN = 1;
		public const uint32 LINEROAMMODE_UNAVAIL = 2;
		public const uint32 LINEROAMMODE_HOME = 4;
		public const uint32 LINEROAMMODE_ROAMA = 8;
		public const uint32 LINEROAMMODE_ROAMB = 16;
		public const uint32 LINESPECIALINFO_NOCIRCUIT = 1;
		public const uint32 LINESPECIALINFO_CUSTIRREG = 2;
		public const uint32 LINESPECIALINFO_REORDER = 4;
		public const uint32 LINESPECIALINFO_UNKNOWN = 8;
		public const uint32 LINESPECIALINFO_UNAVAIL = 16;
		public const uint32 LINETERMDEV_PHONE = 1;
		public const uint32 LINETERMDEV_HEADSET = 2;
		public const uint32 LINETERMDEV_SPEAKER = 4;
		public const uint32 LINETERMMODE_BUTTONS = 1;
		public const uint32 LINETERMMODE_LAMPS = 2;
		public const uint32 LINETERMMODE_DISPLAY = 4;
		public const uint32 LINETERMMODE_RINGER = 8;
		public const uint32 LINETERMMODE_HOOKSWITCH = 16;
		public const uint32 LINETERMMODE_MEDIATOLINE = 32;
		public const uint32 LINETERMMODE_MEDIAFROMLINE = 64;
		public const uint32 LINETERMMODE_MEDIABIDIRECT = 128;
		public const uint32 LINETERMSHARING_PRIVATE = 1;
		public const uint32 LINETERMSHARING_SHAREDEXCL = 2;
		public const uint32 LINETERMSHARING_SHAREDCONF = 4;
		public const uint32 LINETOLLLISTOPTION_ADD = 1;
		public const uint32 LINETOLLLISTOPTION_REMOVE = 2;
		public const uint32 LINETONEMODE_CUSTOM = 1;
		public const uint32 LINETONEMODE_RINGBACK = 2;
		public const uint32 LINETONEMODE_BUSY = 4;
		public const uint32 LINETONEMODE_BEEP = 8;
		public const uint32 LINETONEMODE_BILLING = 16;
		public const uint32 LINETRANSFERMODE_TRANSFER = 1;
		public const uint32 LINETRANSFERMODE_CONFERENCE = 2;
		public const uint32 LINETRANSLATEOPTION_CARDOVERRIDE = 1;
		public const uint32 LINETRANSLATEOPTION_CANCELCALLWAITING = 2;
		public const uint32 LINETRANSLATEOPTION_FORCELOCAL = 4;
		public const uint32 LINETRANSLATEOPTION_FORCELD = 8;
		public const uint32 LINETRANSLATERESULT_CANONICAL = 1;
		public const uint32 LINETRANSLATERESULT_INTERNATIONAL = 2;
		public const uint32 LINETRANSLATERESULT_LONGDISTANCE = 4;
		public const uint32 LINETRANSLATERESULT_LOCAL = 8;
		public const uint32 LINETRANSLATERESULT_INTOLLLIST = 16;
		public const uint32 LINETRANSLATERESULT_NOTINTOLLLIST = 32;
		public const uint32 LINETRANSLATERESULT_DIALBILLING = 64;
		public const uint32 LINETRANSLATERESULT_DIALQUIET = 128;
		public const uint32 LINETRANSLATERESULT_DIALDIALTONE = 256;
		public const uint32 LINETRANSLATERESULT_DIALPROMPT = 512;
		public const uint32 LINETRANSLATERESULT_VOICEDETECT = 1024;
		public const uint32 LINETRANSLATERESULT_NOTRANSLATION = 2048;
		public const uint32 PHONEBUTTONFUNCTION_UNKNOWN = 0;
		public const uint32 PHONEBUTTONFUNCTION_CONFERENCE = 1;
		public const uint32 PHONEBUTTONFUNCTION_TRANSFER = 2;
		public const uint32 PHONEBUTTONFUNCTION_DROP = 3;
		public const uint32 PHONEBUTTONFUNCTION_HOLD = 4;
		public const uint32 PHONEBUTTONFUNCTION_RECALL = 5;
		public const uint32 PHONEBUTTONFUNCTION_DISCONNECT = 6;
		public const uint32 PHONEBUTTONFUNCTION_CONNECT = 7;
		public const uint32 PHONEBUTTONFUNCTION_MSGWAITON = 8;
		public const uint32 PHONEBUTTONFUNCTION_MSGWAITOFF = 9;
		public const uint32 PHONEBUTTONFUNCTION_SELECTRING = 10;
		public const uint32 PHONEBUTTONFUNCTION_ABBREVDIAL = 11;
		public const uint32 PHONEBUTTONFUNCTION_FORWARD = 12;
		public const uint32 PHONEBUTTONFUNCTION_PICKUP = 13;
		public const uint32 PHONEBUTTONFUNCTION_RINGAGAIN = 14;
		public const uint32 PHONEBUTTONFUNCTION_PARK = 15;
		public const uint32 PHONEBUTTONFUNCTION_REJECT = 16;
		public const uint32 PHONEBUTTONFUNCTION_REDIRECT = 17;
		public const uint32 PHONEBUTTONFUNCTION_MUTE = 18;
		public const uint32 PHONEBUTTONFUNCTION_VOLUMEUP = 19;
		public const uint32 PHONEBUTTONFUNCTION_VOLUMEDOWN = 20;
		public const uint32 PHONEBUTTONFUNCTION_SPEAKERON = 21;
		public const uint32 PHONEBUTTONFUNCTION_SPEAKEROFF = 22;
		public const uint32 PHONEBUTTONFUNCTION_FLASH = 23;
		public const uint32 PHONEBUTTONFUNCTION_DATAON = 24;
		public const uint32 PHONEBUTTONFUNCTION_DATAOFF = 25;
		public const uint32 PHONEBUTTONFUNCTION_DONOTDISTURB = 26;
		public const uint32 PHONEBUTTONFUNCTION_INTERCOM = 27;
		public const uint32 PHONEBUTTONFUNCTION_BRIDGEDAPP = 28;
		public const uint32 PHONEBUTTONFUNCTION_BUSY = 29;
		public const uint32 PHONEBUTTONFUNCTION_CALLAPP = 30;
		public const uint32 PHONEBUTTONFUNCTION_DATETIME = 31;
		public const uint32 PHONEBUTTONFUNCTION_DIRECTORY = 32;
		public const uint32 PHONEBUTTONFUNCTION_COVER = 33;
		public const uint32 PHONEBUTTONFUNCTION_CALLID = 34;
		public const uint32 PHONEBUTTONFUNCTION_LASTNUM = 35;
		public const uint32 PHONEBUTTONFUNCTION_NIGHTSRV = 36;
		public const uint32 PHONEBUTTONFUNCTION_SENDCALLS = 37;
		public const uint32 PHONEBUTTONFUNCTION_MSGINDICATOR = 38;
		public const uint32 PHONEBUTTONFUNCTION_REPDIAL = 39;
		public const uint32 PHONEBUTTONFUNCTION_SETREPDIAL = 40;
		public const uint32 PHONEBUTTONFUNCTION_SYSTEMSPEED = 41;
		public const uint32 PHONEBUTTONFUNCTION_STATIONSPEED = 42;
		public const uint32 PHONEBUTTONFUNCTION_CAMPON = 43;
		public const uint32 PHONEBUTTONFUNCTION_SAVEREPEAT = 44;
		public const uint32 PHONEBUTTONFUNCTION_QUEUECALL = 45;
		public const uint32 PHONEBUTTONFUNCTION_NONE = 46;
		public const uint32 PHONEBUTTONFUNCTION_SEND = 47;
		public const uint32 PHONEBUTTONMODE_DUMMY = 1;
		public const uint32 PHONEBUTTONMODE_CALL = 2;
		public const uint32 PHONEBUTTONMODE_FEATURE = 4;
		public const uint32 PHONEBUTTONMODE_KEYPAD = 8;
		public const uint32 PHONEBUTTONMODE_LOCAL = 16;
		public const uint32 PHONEBUTTONMODE_DISPLAY = 32;
		public const uint32 PHONEBUTTONSTATE_UP = 1;
		public const uint32 PHONEBUTTONSTATE_DOWN = 2;
		public const uint32 PHONEBUTTONSTATE_UNKNOWN = 4;
		public const uint32 PHONEBUTTONSTATE_UNAVAIL = 8;
		public const uint32 PHONEERR_ALLOCATED = 2415919105;
		public const uint32 PHONEERR_BADDEVICEID = 2415919106;
		public const uint32 PHONEERR_INCOMPATIBLEAPIVERSION = 2415919107;
		public const uint32 PHONEERR_INCOMPATIBLEEXTVERSION = 2415919108;
		public const uint32 PHONEERR_INIFILECORRUPT = 2415919109;
		public const uint32 PHONEERR_INUSE = 2415919110;
		public const uint32 PHONEERR_INVALAPPHANDLE = 2415919111;
		public const uint32 PHONEERR_INVALAPPNAME = 2415919112;
		public const uint32 PHONEERR_INVALBUTTONLAMPID = 2415919113;
		public const uint32 PHONEERR_INVALBUTTONMODE = 2415919114;
		public const uint32 PHONEERR_INVALBUTTONSTATE = 2415919115;
		public const uint32 PHONEERR_INVALDATAID = 2415919116;
		public const uint32 PHONEERR_INVALDEVICECLASS = 2415919117;
		public const uint32 PHONEERR_INVALEXTVERSION = 2415919118;
		public const uint32 PHONEERR_INVALHOOKSWITCHDEV = 2415919119;
		public const uint32 PHONEERR_INVALHOOKSWITCHMODE = 2415919120;
		public const uint32 PHONEERR_INVALLAMPMODE = 2415919121;
		public const uint32 PHONEERR_INVALPARAM = 2415919122;
		public const uint32 PHONEERR_INVALPHONEHANDLE = 2415919123;
		public const uint32 PHONEERR_INVALPHONESTATE = 2415919124;
		public const uint32 PHONEERR_INVALPOINTER = 2415919125;
		public const uint32 PHONEERR_INVALPRIVILEGE = 2415919126;
		public const uint32 PHONEERR_INVALRINGMODE = 2415919127;
		public const uint32 PHONEERR_NODEVICE = 2415919128;
		public const uint32 PHONEERR_NODRIVER = 2415919129;
		public const uint32 PHONEERR_NOMEM = 2415919130;
		public const uint32 PHONEERR_NOTOWNER = 2415919131;
		public const uint32 PHONEERR_OPERATIONFAILED = 2415919132;
		public const uint32 PHONEERR_OPERATIONUNAVAIL = 2415919133;
		public const uint32 PHONEERR_RESOURCEUNAVAIL = 2415919135;
		public const uint32 PHONEERR_REQUESTOVERRUN = 2415919136;
		public const uint32 PHONEERR_STRUCTURETOOSMALL = 2415919137;
		public const uint32 PHONEERR_UNINITIALIZED = 2415919138;
		public const uint32 PHONEERR_REINIT = 2415919139;
		public const uint32 PHONEERR_DISCONNECTED = 2415919140;
		public const uint32 PHONEERR_SERVICE_NOT_RUNNING = 2415919141;
		public const uint32 PHONEFEATURE_GETBUTTONINFO = 1;
		public const uint32 PHONEFEATURE_GETDATA = 2;
		public const uint32 PHONEFEATURE_GETDISPLAY = 4;
		public const uint32 PHONEFEATURE_GETGAINHANDSET = 8;
		public const uint32 PHONEFEATURE_GETGAINSPEAKER = 16;
		public const uint32 PHONEFEATURE_GETGAINHEADSET = 32;
		public const uint32 PHONEFEATURE_GETHOOKSWITCHHANDSET = 64;
		public const uint32 PHONEFEATURE_GETHOOKSWITCHSPEAKER = 128;
		public const uint32 PHONEFEATURE_GETHOOKSWITCHHEADSET = 256;
		public const uint32 PHONEFEATURE_GETLAMP = 512;
		public const uint32 PHONEFEATURE_GETRING = 1024;
		public const uint32 PHONEFEATURE_GETVOLUMEHANDSET = 2048;
		public const uint32 PHONEFEATURE_GETVOLUMESPEAKER = 4096;
		public const uint32 PHONEFEATURE_GETVOLUMEHEADSET = 8192;
		public const uint32 PHONEFEATURE_SETBUTTONINFO = 16384;
		public const uint32 PHONEFEATURE_SETDATA = 32768;
		public const uint32 PHONEFEATURE_SETDISPLAY = 65536;
		public const uint32 PHONEFEATURE_SETGAINHANDSET = 131072;
		public const uint32 PHONEFEATURE_SETGAINSPEAKER = 262144;
		public const uint32 PHONEFEATURE_SETGAINHEADSET = 524288;
		public const uint32 PHONEFEATURE_SETHOOKSWITCHHANDSET = 1048576;
		public const uint32 PHONEFEATURE_SETHOOKSWITCHSPEAKER = 2097152;
		public const uint32 PHONEFEATURE_SETHOOKSWITCHHEADSET = 4194304;
		public const uint32 PHONEFEATURE_SETLAMP = 8388608;
		public const uint32 PHONEFEATURE_SETRING = 16777216;
		public const uint32 PHONEFEATURE_SETVOLUMEHANDSET = 33554432;
		public const uint32 PHONEFEATURE_SETVOLUMESPEAKER = 67108864;
		public const uint32 PHONEFEATURE_SETVOLUMEHEADSET = 134217728;
		public const uint32 PHONEFEATURE_GENERICPHONE = 268435456;
		public const uint32 PHONEHOOKSWITCHDEV_HANDSET = 1;
		public const uint32 PHONEHOOKSWITCHDEV_SPEAKER = 2;
		public const uint32 PHONEHOOKSWITCHDEV_HEADSET = 4;
		public const uint32 PHONEHOOKSWITCHMODE_ONHOOK = 1;
		public const uint32 PHONEHOOKSWITCHMODE_MIC = 2;
		public const uint32 PHONEHOOKSWITCHMODE_SPEAKER = 4;
		public const uint32 PHONEHOOKSWITCHMODE_MICSPEAKER = 8;
		public const uint32 PHONEHOOKSWITCHMODE_UNKNOWN = 16;
		public const uint32 PHONEINITIALIZEEXOPTION_USEHIDDENWINDOW = 1;
		public const uint32 PHONEINITIALIZEEXOPTION_USEEVENT = 2;
		public const uint32 PHONEINITIALIZEEXOPTION_USECOMPLETIONPORT = 3;
		public const uint32 PHONELAMPMODE_DUMMY = 1;
		public const uint32 PHONELAMPMODE_OFF = 2;
		public const uint32 PHONELAMPMODE_STEADY = 4;
		public const uint32 PHONELAMPMODE_WINK = 8;
		public const uint32 PHONELAMPMODE_FLASH = 16;
		public const uint32 PHONELAMPMODE_FLUTTER = 32;
		public const uint32 PHONELAMPMODE_BROKENFLUTTER = 64;
		public const uint32 PHONELAMPMODE_UNKNOWN = 128;
		public const uint32 PHONEPRIVILEGE_MONITOR = 1;
		public const uint32 PHONEPRIVILEGE_OWNER = 2;
		public const uint32 PHONESTATE_OTHER = 1;
		public const uint32 PHONESTATE_CONNECTED = 2;
		public const uint32 PHONESTATE_DISCONNECTED = 4;
		public const uint32 PHONESTATE_OWNER = 8;
		public const uint32 PHONESTATE_MONITORS = 16;
		public const uint32 PHONESTATE_DISPLAY = 32;
		public const uint32 PHONESTATE_LAMP = 64;
		public const uint32 PHONESTATE_RINGMODE = 128;
		public const uint32 PHONESTATE_RINGVOLUME = 256;
		public const uint32 PHONESTATE_HANDSETHOOKSWITCH = 512;
		public const uint32 PHONESTATE_HANDSETVOLUME = 1024;
		public const uint32 PHONESTATE_HANDSETGAIN = 2048;
		public const uint32 PHONESTATE_SPEAKERHOOKSWITCH = 4096;
		public const uint32 PHONESTATE_SPEAKERVOLUME = 8192;
		public const uint32 PHONESTATE_SPEAKERGAIN = 16384;
		public const uint32 PHONESTATE_HEADSETHOOKSWITCH = 32768;
		public const uint32 PHONESTATE_HEADSETVOLUME = 65536;
		public const uint32 PHONESTATE_HEADSETGAIN = 131072;
		public const uint32 PHONESTATE_SUSPEND = 262144;
		public const uint32 PHONESTATE_RESUME = 524288;
		public const uint32 PHONESTATE_DEVSPECIFIC = 1048576;
		public const uint32 PHONESTATE_REINIT = 2097152;
		public const uint32 PHONESTATE_CAPSCHANGE = 4194304;
		public const uint32 PHONESTATE_REMOVED = 8388608;
		public const uint32 PHONESTATUSFLAGS_CONNECTED = 1;
		public const uint32 PHONESTATUSFLAGS_SUSPENDED = 2;
		public const uint32 STRINGFORMAT_ASCII = 1;
		public const uint32 STRINGFORMAT_DBCS = 2;
		public const uint32 STRINGFORMAT_UNICODE = 3;
		public const uint32 STRINGFORMAT_BINARY = 4;
		public const uint32 TAPI_REPLY = 1123;
		public const int32 TAPIERR_CONNECTED = 0;
		public const int32 TAPIERR_DROPPED = -1;
		public const int32 TAPIERR_NOREQUESTRECIPIENT = -2;
		public const int32 TAPIERR_REQUESTQUEUEFULL = -3;
		public const int32 TAPIERR_INVALDESTADDRESS = -4;
		public const int32 TAPIERR_INVALWINDOWHANDLE = -5;
		public const int32 TAPIERR_INVALDEVICECLASS = -6;
		public const int32 TAPIERR_INVALDEVICEID = -7;
		public const int32 TAPIERR_DEVICECLASSUNAVAIL = -8;
		public const int32 TAPIERR_DEVICEIDUNAVAIL = -9;
		public const int32 TAPIERR_DEVICEINUSE = -10;
		public const int32 TAPIERR_DESTBUSY = -11;
		public const int32 TAPIERR_DESTNOANSWER = -12;
		public const int32 TAPIERR_DESTUNAVAIL = -13;
		public const int32 TAPIERR_UNKNOWNWINHANDLE = -14;
		public const int32 TAPIERR_UNKNOWNREQUESTID = -15;
		public const int32 TAPIERR_REQUESTFAILED = -16;
		public const int32 TAPIERR_REQUESTCANCELLED = -17;
		public const int32 TAPIERR_INVALPOINTER = -18;
		public const int32 TAPIERR_NOTADMIN = -19;
		public const int32 TAPIERR_MMCWRITELOCKED = -20;
		public const int32 TAPIERR_PROVIDERALREADYINSTALLED = -21;
		public const int32 TAPIERR_SCP_ALREADY_EXISTS = -22;
		public const int32 TAPIERR_SCP_DOES_NOT_EXIST = -23;
		public const int32 TAPIMAXDESTADDRESSSIZE = 80;
		public const int32 TAPIMAXAPPNAMESIZE = 40;
		public const int32 TAPIMAXCALLEDPARTYSIZE = 40;
		public const int32 TAPIMAXCOMMENTSIZE = 80;
		public const int32 TAPIMAXDEVICECLASSSIZE = 40;
		public const int32 TAPIMAXDEVICEIDSIZE = 40;
		public const uint32 INTERFACEMASK = 16711680;
		public const uint32 DISPIDMASK = 65535;
		public const uint32 IDISPTAPI = 65536;
		public const uint32 IDISPTAPICALLCENTER = 131072;
		public const uint32 IDISPCALLINFO = 65536;
		public const uint32 IDISPBASICCALLCONTROL = 131072;
		public const uint32 IDISPLEGACYCALLMEDIACONTROL = 196608;
		public const uint32 IDISPAGGREGATEDMSPCALLOBJ = 262144;
		public const uint32 IDISPADDRESS = 65536;
		public const uint32 IDISPADDRESSCAPABILITIES = 131072;
		public const uint32 IDISPMEDIASUPPORT = 196608;
		public const uint32 IDISPADDRESSTRANSLATION = 262144;
		public const uint32 IDISPLEGACYADDRESSMEDIACONTROL = 327680;
		public const uint32 IDISPAGGREGATEDMSPADDRESSOBJ = 393216;
		public const uint32 IDISPPHONE = 65536;
		public const uint32 IDISPAPC = 131072;
		public const uint32 IDISPMULTITRACK = 65536;
		public const uint32 IDISPMEDIACONTROL = 131072;
		public const uint32 IDISPMEDIARECORD = 196608;
		public const uint32 IDISPMEDIAPLAYBACK = 262144;
		public const uint32 IDISPFILETRACK = 65536;
		public const uint32 TAPIMEDIATYPE_AUDIO = 8;
		public const uint32 TAPIMEDIATYPE_VIDEO = 32768;
		public const uint32 TAPIMEDIATYPE_DATAMODEM = 16;
		public const uint32 TAPIMEDIATYPE_G3FAX = 32;
		public const uint32 TAPIMEDIATYPE_MULTITRACK = 65536;
		public const uint32 TSPI_MESSAGE_BASE = 500;
		public const uint32 LINETSPIOPTION_NONREENTRANT = 1;
		public const int32 TUISPIDLL_OBJECT_LINEID = 1;
		public const int32 TUISPIDLL_OBJECT_PHONEID = 2;
		public const int32 TUISPIDLL_OBJECT_PROVIDERID = 3;
		public const int32 TUISPIDLL_OBJECT_DIALOGINSTANCE = 4;
		public const uint32 PRIVATEOBJECT_NONE = 1;
		public const uint32 PRIVATEOBJECT_CALLID = 2;
		public const uint32 PRIVATEOBJECT_LINE = 3;
		public const uint32 PRIVATEOBJECT_CALL = 4;
		public const uint32 PRIVATEOBJECT_PHONE = 5;
		public const uint32 PRIVATEOBJECT_ADDRESS = 6;
		public const uint32 LINEQOSREQUESTTYPE_SERVICELEVEL = 1;
		public const uint32 LINEQOSSERVICELEVEL_NEEDED = 1;
		public const uint32 LINEQOSSERVICELEVEL_IFAVAILABLE = 2;
		public const uint32 LINEQOSSERVICELEVEL_BESTEFFORT = 3;
		public const uint32 LINEEQOSINFO_NOQOS = 1;
		public const uint32 LINEEQOSINFO_ADMISSIONFAILURE = 2;
		public const uint32 LINEEQOSINFO_POLICYFAILURE = 3;
		public const uint32 LINEEQOSINFO_GENERICERROR = 4;
		public const uint32 TSPI_PROC_BASE = 500;
		public const uint32 TSPI_LINEACCEPT = 500;
		public const uint32 TSPI_LINEADDTOCONFERENCE = 501;
		public const uint32 TSPI_LINEANSWER = 502;
		public const uint32 TSPI_LINEBLINDTRANSFER = 503;
		public const uint32 TSPI_LINECLOSE = 504;
		public const uint32 TSPI_LINECLOSECALL = 505;
		public const uint32 TSPI_LINECOMPLETECALL = 506;
		public const uint32 TSPI_LINECOMPLETETRANSFER = 507;
		public const uint32 TSPI_LINECONDITIONALMEDIADETECTION = 508;
		public const uint32 TSPI_LINECONFIGDIALOG = 509;
		public const uint32 TSPI_LINEDEVSPECIFIC = 510;
		public const uint32 TSPI_LINEDEVSPECIFICFEATURE = 511;
		public const uint32 TSPI_LINEDIAL = 512;
		public const uint32 TSPI_LINEDROP = 513;
		public const uint32 TSPI_LINEFORWARD = 514;
		public const uint32 TSPI_LINEGATHERDIGITS = 515;
		public const uint32 TSPI_LINEGENERATEDIGITS = 516;
		public const uint32 TSPI_LINEGENERATETONE = 517;
		public const uint32 TSPI_LINEGETADDRESSCAPS = 518;
		public const uint32 TSPI_LINEGETADDRESSID = 519;
		public const uint32 TSPI_LINEGETADDRESSSTATUS = 520;
		public const uint32 TSPI_LINEGETCALLADDRESSID = 521;
		public const uint32 TSPI_LINEGETCALLINFO = 522;
		public const uint32 TSPI_LINEGETCALLSTATUS = 523;
		public const uint32 TSPI_LINEGETDEVCAPS = 524;
		public const uint32 TSPI_LINEGETDEVCONFIG = 525;
		public const uint32 TSPI_LINEGETEXTENSIONID = 526;
		public const uint32 TSPI_LINEGETICON = 527;
		public const uint32 TSPI_LINEGETID = 528;
		public const uint32 TSPI_LINEGETLINEDEVSTATUS = 529;
		public const uint32 TSPI_LINEGETNUMADDRESSIDS = 530;
		public const uint32 TSPI_LINEHOLD = 531;
		public const uint32 TSPI_LINEMAKECALL = 532;
		public const uint32 TSPI_LINEMONITORDIGITS = 533;
		public const uint32 TSPI_LINEMONITORMEDIA = 534;
		public const uint32 TSPI_LINEMONITORTONES = 535;
		public const uint32 TSPI_LINENEGOTIATEEXTVERSION = 536;
		public const uint32 TSPI_LINENEGOTIATETSPIVERSION = 537;
		public const uint32 TSPI_LINEOPEN = 538;
		public const uint32 TSPI_LINEPARK = 539;
		public const uint32 TSPI_LINEPICKUP = 540;
		public const uint32 TSPI_LINEPREPAREADDTOCONFERENCE = 541;
		public const uint32 TSPI_LINEREDIRECT = 542;
		public const uint32 TSPI_LINEREMOVEFROMCONFERENCE = 543;
		public const uint32 TSPI_LINESECURECALL = 544;
		public const uint32 TSPI_LINESELECTEXTVERSION = 545;
		public const uint32 TSPI_LINESENDUSERUSERINFO = 546;
		public const uint32 TSPI_LINESETAPPSPECIFIC = 547;
		public const uint32 TSPI_LINESETCALLPARAMS = 548;
		public const uint32 TSPI_LINESETDEFAULTMEDIADETECTION = 549;
		public const uint32 TSPI_LINESETDEVCONFIG = 550;
		public const uint32 TSPI_LINESETMEDIACONTROL = 551;
		public const uint32 TSPI_LINESETMEDIAMODE = 552;
		public const uint32 TSPI_LINESETSTATUSMESSAGES = 553;
		public const uint32 TSPI_LINESETTERMINAL = 554;
		public const uint32 TSPI_LINESETUPCONFERENCE = 555;
		public const uint32 TSPI_LINESETUPTRANSFER = 556;
		public const uint32 TSPI_LINESWAPHOLD = 557;
		public const uint32 TSPI_LINEUNCOMPLETECALL = 558;
		public const uint32 TSPI_LINEUNHOLD = 559;
		public const uint32 TSPI_LINEUNPARK = 560;
		public const uint32 TSPI_PHONECLOSE = 561;
		public const uint32 TSPI_PHONECONFIGDIALOG = 562;
		public const uint32 TSPI_PHONEDEVSPECIFIC = 563;
		public const uint32 TSPI_PHONEGETBUTTONINFO = 564;
		public const uint32 TSPI_PHONEGETDATA = 565;
		public const uint32 TSPI_PHONEGETDEVCAPS = 566;
		public const uint32 TSPI_PHONEGETDISPLAY = 567;
		public const uint32 TSPI_PHONEGETEXTENSIONID = 568;
		public const uint32 TSPI_PHONEGETGAIN = 569;
		public const uint32 TSPI_PHONEGETHOOKSWITCH = 570;
		public const uint32 TSPI_PHONEGETICON = 571;
		public const uint32 TSPI_PHONEGETID = 572;
		public const uint32 TSPI_PHONEGETLAMP = 573;
		public const uint32 TSPI_PHONEGETRING = 574;
		public const uint32 TSPI_PHONEGETSTATUS = 575;
		public const uint32 TSPI_PHONEGETVOLUME = 576;
		public const uint32 TSPI_PHONENEGOTIATEEXTVERSION = 577;
		public const uint32 TSPI_PHONENEGOTIATETSPIVERSION = 578;
		public const uint32 TSPI_PHONEOPEN = 579;
		public const uint32 TSPI_PHONESELECTEXTVERSION = 580;
		public const uint32 TSPI_PHONESETBUTTONINFO = 581;
		public const uint32 TSPI_PHONESETDATA = 582;
		public const uint32 TSPI_PHONESETDISPLAY = 583;
		public const uint32 TSPI_PHONESETGAIN = 584;
		public const uint32 TSPI_PHONESETHOOKSWITCH = 585;
		public const uint32 TSPI_PHONESETLAMP = 586;
		public const uint32 TSPI_PHONESETRING = 587;
		public const uint32 TSPI_PHONESETSTATUSMESSAGES = 588;
		public const uint32 TSPI_PHONESETVOLUME = 589;
		public const uint32 TSPI_PROVIDERCONFIG = 590;
		public const uint32 TSPI_PROVIDERINIT = 591;
		public const uint32 TSPI_PROVIDERINSTALL = 592;
		public const uint32 TSPI_PROVIDERREMOVE = 593;
		public const uint32 TSPI_PROVIDERSHUTDOWN = 594;
		public const uint32 TSPI_PROVIDERENUMDEVICES = 595;
		public const uint32 TSPI_LINEDROPONCLOSE = 596;
		public const uint32 TSPI_LINEDROPNOOWNER = 597;
		public const uint32 TSPI_PROVIDERCREATELINEDEVICE = 598;
		public const uint32 TSPI_PROVIDERCREATEPHONEDEVICE = 599;
		public const uint32 TSPI_LINESETCURRENTLOCATION = 600;
		public const uint32 TSPI_LINECONFIGDIALOGEDIT = 601;
		public const uint32 TSPI_LINERELEASEUSERUSERINFO = 602;
		public const uint32 TSPI_LINEGETCALLID = 603;
		public const uint32 TSPI_LINEGETCALLHUBTRACKING = 604;
		public const uint32 TSPI_LINESETCALLHUBTRACKING = 605;
		public const uint32 TSPI_LINERECEIVEMSPDATA = 606;
		public const uint32 TSPI_LINEMSPIDENTIFY = 607;
		public const uint32 TSPI_LINECREATEMSPINSTANCE = 608;
		public const uint32 TSPI_LINECLOSEMSPINSTANCE = 609;
		public const uint32 IDISPDIROBJECT = 65536;
		public const uint32 IDISPDIROBJCONFERENCE = 131072;
		public const uint32 IDISPDIROBJUSER = 196608;
		public const uint32 IDISPDIRECTORY = 65536;
		public const uint32 IDISPILSCONFIG = 131072;
		public const uint32 RENDBIND_AUTHENTICATE = 1;
		public const uint32 RENDBIND_DEFAULTDOMAINNAME = 2;
		public const uint32 RENDBIND_DEFAULTUSERNAME = 4;
		public const uint32 RENDBIND_DEFAULTPASSWORD = 8;
		public const uint32 RENDBIND_DEFAULTCREDENTIALS = 14;
		public const uint32 STRM_INITIAL = 0;
		public const uint32 STRM_TERMINALSELECTED = 1;
		public const uint32 STRM_CONFIGURED = 2;
		public const uint32 STRM_RUNNING = 4;
		public const uint32 STRM_PAUSED = 8;
		public const uint32 STRM_STOPPED = 16;
		public const HRESULT TAPI_E_NOTENOUGHMEMORY = -2147221503;
		public const HRESULT TAPI_E_NOITEMS = -2147221502;
		public const HRESULT TAPI_E_NOTSUPPORTED = -2147221501;
		public const HRESULT TAPI_E_INVALIDMEDIATYPE = -2147221500;
		public const HRESULT TAPI_E_OPERATIONFAILED = -2147221499;
		public const HRESULT TAPI_E_ALLOCATED = -2147221498;
		public const HRESULT TAPI_E_CALLUNAVAIL = -2147221497;
		public const HRESULT TAPI_E_COMPLETIONOVERRUN = -2147221496;
		public const HRESULT TAPI_E_CONFERENCEFULL = -2147221495;
		public const HRESULT TAPI_E_DIALMODIFIERNOTSUPPORTED = -2147221494;
		public const HRESULT TAPI_E_INUSE = -2147221493;
		public const HRESULT TAPI_E_INVALADDRESS = -2147221492;
		public const HRESULT TAPI_E_INVALADDRESSSTATE = -2147221491;
		public const HRESULT TAPI_E_INVALCALLPARAMS = -2147221490;
		public const HRESULT TAPI_E_INVALCALLPRIVILEGE = -2147221489;
		public const HRESULT TAPI_E_INVALCALLSTATE = -2147221488;
		public const HRESULT TAPI_E_INVALCARD = -2147221487;
		public const HRESULT TAPI_E_INVALCOMPLETIONID = -2147221486;
		public const HRESULT TAPI_E_INVALCOUNTRYCODE = -2147221485;
		public const HRESULT TAPI_E_INVALDEVICECLASS = -2147221484;
		public const HRESULT TAPI_E_INVALDIALPARAMS = -2147221483;
		public const HRESULT TAPI_E_INVALDIGITS = -2147221482;
		public const HRESULT TAPI_E_INVALGROUPID = -2147221481;
		public const HRESULT TAPI_E_INVALLOCATION = -2147221480;
		public const HRESULT TAPI_E_INVALMESSAGEID = -2147221479;
		public const HRESULT TAPI_E_INVALPARKID = -2147221478;
		public const HRESULT TAPI_E_INVALRATE = -2147221477;
		public const HRESULT TAPI_E_INVALTIMEOUT = -2147221476;
		public const HRESULT TAPI_E_INVALTONE = -2147221475;
		public const HRESULT TAPI_E_INVALLIST = -2147221474;
		public const HRESULT TAPI_E_INVALMODE = -2147221473;
		public const HRESULT TAPI_E_NOCONFERENCE = -2147221472;
		public const HRESULT TAPI_E_NODEVICE = -2147221471;
		public const HRESULT TAPI_E_NOREQUEST = -2147221470;
		public const HRESULT TAPI_E_NOTOWNER = -2147221469;
		public const HRESULT TAPI_E_NOTREGISTERED = -2147221468;
		public const HRESULT TAPI_E_REQUESTOVERRUN = -2147221467;
		public const HRESULT TAPI_E_TARGETNOTFOUND = -2147221466;
		public const HRESULT TAPI_E_TARGETSELF = -2147221465;
		public const HRESULT TAPI_E_USERUSERINFOTOOBIG = -2147221464;
		public const HRESULT TAPI_E_REINIT = -2147221463;
		public const HRESULT TAPI_E_ADDRESSBLOCKED = -2147221462;
		public const HRESULT TAPI_E_BILLINGREJECTED = -2147221461;
		public const HRESULT TAPI_E_INVALFEATURE = -2147221460;
		public const HRESULT TAPI_E_INVALBUTTONLAMPID = -2147221459;
		public const HRESULT TAPI_E_INVALBUTTONSTATE = -2147221458;
		public const HRESULT TAPI_E_INVALDATAID = -2147221457;
		public const HRESULT TAPI_E_INVALHOOKSWITCHDEV = -2147221456;
		public const HRESULT TAPI_E_DROPPED = -2147221455;
		public const HRESULT TAPI_E_NOREQUESTRECIPIENT = -2147221454;
		public const HRESULT TAPI_E_REQUESTQUEUEFULL = -2147221453;
		public const HRESULT TAPI_E_DESTBUSY = -2147221452;
		public const HRESULT TAPI_E_DESTNOANSWER = -2147221451;
		public const HRESULT TAPI_E_DESTUNAVAIL = -2147221450;
		public const HRESULT TAPI_E_REQUESTFAILED = -2147221449;
		public const HRESULT TAPI_E_REQUESTCANCELLED = -2147221448;
		public const HRESULT TAPI_E_INVALPRIVILEGE = -2147221447;
		public const HRESULT TAPI_E_INVALIDDIRECTION = -2147221446;
		public const HRESULT TAPI_E_INVALIDTERMINAL = -2147221445;
		public const HRESULT TAPI_E_INVALIDTERMINALCLASS = -2147221444;
		public const HRESULT TAPI_E_NODRIVER = -2147221443;
		public const HRESULT TAPI_E_MAXSTREAMS = -2147221442;
		public const HRESULT TAPI_E_NOTERMINALSELECTED = -2147221441;
		public const HRESULT TAPI_E_TERMINALINUSE = -2147221440;
		public const HRESULT TAPI_E_NOTSTOPPED = -2147221439;
		public const HRESULT TAPI_E_MAXTERMINALS = -2147221438;
		public const HRESULT TAPI_E_INVALIDSTREAM = -2147221437;
		public const HRESULT TAPI_E_TIMEOUT = -2147221436;
		public const HRESULT TAPI_E_CALLCENTER_GROUP_REMOVED = -2147221435;
		public const HRESULT TAPI_E_CALLCENTER_QUEUE_REMOVED = -2147221434;
		public const HRESULT TAPI_E_CALLCENTER_NO_AGENT_ID = -2147221433;
		public const HRESULT TAPI_E_CALLCENTER_INVALAGENTID = -2147221432;
		public const HRESULT TAPI_E_CALLCENTER_INVALAGENTGROUP = -2147221431;
		public const HRESULT TAPI_E_CALLCENTER_INVALPASSWORD = -2147221430;
		public const HRESULT TAPI_E_CALLCENTER_INVALAGENTSTATE = -2147221429;
		public const HRESULT TAPI_E_CALLCENTER_INVALAGENTACTIVITY = -2147221428;
		public const HRESULT TAPI_E_REGISTRY_SETTING_CORRUPT = -2147221427;
		public const HRESULT TAPI_E_TERMINAL_PEER = -2147221426;
		public const HRESULT TAPI_E_PEER_NOT_SET = -2147221425;
		public const HRESULT TAPI_E_NOEVENT = -2147221424;
		public const HRESULT TAPI_E_INVALADDRESSTYPE = -2147221423;
		public const HRESULT TAPI_E_RESOURCEUNAVAIL = -2147221422;
		public const HRESULT TAPI_E_PHONENOTOPEN = -2147221421;
		public const HRESULT TAPI_E_CALLNOTSELECTED = -2147221420;
		public const HRESULT TAPI_E_WRONGEVENT = -2147221419;
		public const HRESULT TAPI_E_NOFORMAT = -2147221418;
		public const HRESULT TAPI_E_INVALIDSTREAMSTATE = -2147221417;
		public const HRESULT TAPI_E_WRONG_STATE = -2147221416;
		public const HRESULT TAPI_E_NOT_INITIALIZED = -2147221415;
		public const HRESULT TAPI_E_SERVICE_NOT_RUNNING = -2147221414;
		public const int32 atypNull = 0;
		public const int32 atypFile = 1;
		public const int32 atypOle = 2;
		public const int32 atypPicture = 3;
		public const int32 atypMax = 4;
		
		// --- Enums ---
		
		public enum TAPI_TONEMODE : int32
		{
			RINGBACK = 2,
			BUSY = 4,
			BEEP = 8,
			BILLING = 16,
		}
		public enum TAPI_GATHERTERM : int32
		{
			BUFFERFULL = 1,
			TERMDIGIT = 2,
			FIRSTTIMEOUT = 4,
			INTERTIMEOUT = 8,
			CANCEL = 16,
		}
		[AllowDuplicates]
		public enum ADDRESS_EVENT : int32
		{
			STATE = 0,
			CAPSCHANGE = 1,
			RINGING = 2,
			CONFIGCHANGE = 3,
			FORWARD = 4,
			NEWTERMINAL = 5,
			REMOVETERMINAL = 6,
			MSGWAITON = 7,
			MSGWAITOFF = 8,
			LASTITEM = 8,
		}
		public enum ADDRESS_STATE : int32
		{
			INSERVICE = 0,
			OUTOFSERVICE = 1,
		}
		[AllowDuplicates]
		public enum CALL_STATE : int32
		{
			IDLE = 0,
			INPROGRESS = 1,
			CONNECTED = 2,
			DISCONNECTED = 3,
			OFFERING = 4,
			HOLD = 5,
			QUEUED = 6,
			LASTITEM = 6,
		}
		public enum CALL_STATE_EVENT_CAUSE : int32
		{
			NONE = 0,
			DISCONNECT_NORMAL = 1,
			DISCONNECT_BUSY = 2,
			DISCONNECT_BADADDRESS = 3,
			DISCONNECT_NOANSWER = 4,
			DISCONNECT_CANCELLED = 5,
			DISCONNECT_REJECTED = 6,
			DISCONNECT_FAILED = 7,
			DISCONNECT_BLOCKED = 8,
		}
		[AllowDuplicates]
		public enum CALL_MEDIA_EVENT : int32
		{
			NEW_STREAM = 0,
			STREAM_FAIL = 1,
			TERMINAL_FAIL = 2,
			STREAM_NOT_USED = 3,
			STREAM_ACTIVE = 4,
			STREAM_INACTIVE = 5,
			LASTITEM = 5,
		}
		public enum CALL_MEDIA_EVENT_CAUSE : int32
		{
			UNKNOWN = 0,
			BAD_DEVICE = 1,
			CONNECT_FAIL = 2,
			LOCAL_REQUEST = 3,
			REMOTE_REQUEST = 4,
			MEDIA_TIMEOUT = 5,
			MEDIA_RECOVERED = 6,
			QUALITY_OF_SERVICE = 7,
		}
		public enum DISCONNECT_CODE : int32
		{
			NORMAL = 0,
			NOANSWER = 1,
			REJECTED = 2,
		}
		public enum TERMINAL_STATE : int32
		{
			INUSE = 0,
			NOTINUSE = 1,
		}
		public enum TERMINAL_DIRECTION : int32
		{
			CAPTURE = 0,
			RENDER = 1,
			BIDIRECTIONAL = 2,
			MULTITRACK_MIXED = 3,
			NONE = 4,
		}
		public enum TERMINAL_TYPE : int32
		{
			STATIC = 0,
			DYNAMIC = 1,
		}
		public enum CALL_PRIVILEGE : int32
		{
			OWNER = 0,
			MONITOR = 1,
		}
		public enum TAPI_EVENT : int32
		{
			TAPIOBJECT = 1,
			ADDRESS = 2,
			CALLNOTIFICATION = 4,
			CALLSTATE = 8,
			CALLMEDIA = 16,
			CALLHUB = 32,
			CALLINFOCHANGE = 64,
			PRIVATE = 128,
			REQUEST = 256,
			AGENT = 512,
			AGENTSESSION = 1024,
			QOSEVENT = 2048,
			AGENTHANDLER = 4096,
			ACDGROUP = 8192,
			QUEUE = 16384,
			DIGITEVENT = 32768,
			GENERATEEVENT = 65536,
			ASRTERMINAL = 131072,
			TTSTERMINAL = 262144,
			FILETERMINAL = 524288,
			TONETERMINAL = 1048576,
			PHONEEVENT = 2097152,
			TONEEVENT = 4194304,
			GATHERDIGITS = 8388608,
			ADDRESSDEVSPECIFIC = 16777216,
			PHONEDEVSPECIFIC = 33554432,
		}
		[AllowDuplicates]
		public enum CALL_NOTIFICATION_EVENT : int32
		{
			OWNER = 0,
			MONITOR = 1,
			LASTITEM = 1,
		}
		[AllowDuplicates]
		public enum CALLHUB_EVENT : int32
		{
			CALLJOIN = 0,
			CALLLEAVE = 1,
			CALLHUBNEW = 2,
			CALLHUBIDLE = 3,
			LASTITEM = 3,
		}
		public enum CALLHUB_STATE : int32
		{
			ACTIVE = 0,
			IDLE = 1,
		}
		public enum TAPIOBJECT_EVENT : int32
		{
			ADDRESSCREATE = 0,
			ADDRESSREMOVE = 1,
			REINIT = 2,
			TRANSLATECHANGE = 3,
			ADDRESSCLOSE = 4,
			PHONECREATE = 5,
			PHONEREMOVE = 6,
		}
		public enum TAPI_OBJECT_TYPE : int32
		{
			NONE = 0,
			TAPI = 1,
			ADDRESS = 2,
			TERMINAL = 3,
			CALL = 4,
			CALLHUB = 5,
			PHONE = 6,
		}
		public enum QOS_SERVICE_LEVEL : int32
		{
			NEEDED = 1,
			IF_AVAILABLE = 2,
			BEST_EFFORT = 3,
		}
		[AllowDuplicates]
		public enum QOS_EVENT : int32
		{
			NOQOS = 1,
			ADMISSIONFAILURE = 2,
			POLICYFAILURE = 3,
			GENERICERROR = 4,
			LASTITEM = 4,
		}
		[AllowDuplicates]
		public enum CALLINFOCHANGE_CAUSE : int32
		{
			OTHER = 0,
			DEVSPECIFIC = 1,
			BEARERMODE = 2,
			RATE = 3,
			APPSPECIFIC = 4,
			CALLID = 5,
			RELATEDCALLID = 6,
			ORIGIN = 7,
			REASON = 8,
			COMPLETIONID = 9,
			NUMOWNERINCR = 10,
			NUMOWNERDECR = 11,
			NUMMONITORS = 12,
			TRUNK = 13,
			CALLERID = 14,
			CALLEDID = 15,
			CONNECTEDID = 16,
			REDIRECTIONID = 17,
			REDIRECTINGID = 18,
			USERUSERINFO = 19,
			HIGHLEVELCOMP = 20,
			LOWLEVELCOMP = 21,
			CHARGINGINFO = 22,
			TREATMENT = 23,
			CALLDATA = 24,
			PRIVILEGE = 25,
			MEDIATYPE = 26,
			LASTITEM = 26,
		}
		public enum CALLINFO_LONG : int32
		{
			MEDIATYPESAVAILABLE = 0,
			BEARERMODE = 1,
			CALLERIDADDRESSTYPE = 2,
			CALLEDIDADDRESSTYPE = 3,
			CONNECTEDIDADDRESSTYPE = 4,
			REDIRECTIONIDADDRESSTYPE = 5,
			REDIRECTINGIDADDRESSTYPE = 6,
			ORIGIN = 7,
			REASON = 8,
			APPSPECIFIC = 9,
			CALLPARAMSFLAGS = 10,
			CALLTREATMENT = 11,
			MINRATE = 12,
			MAXRATE = 13,
			COUNTRYCODE = 14,
			CALLID = 15,
			RELATEDCALLID = 16,
			COMPLETIONID = 17,
			NUMBEROFOWNERS = 18,
			NUMBEROFMONITORS = 19,
			TRUNK = 20,
			RATE = 21,
			GENERATEDIGITDURATION = 22,
			MONITORDIGITMODES = 23,
			MONITORMEDIAMODES = 24,
		}
		public enum CALLINFO_STRING : int32
		{
			CALLERIDNAME = 0,
			CALLERIDNUMBER = 1,
			CALLEDIDNAME = 2,
			CALLEDIDNUMBER = 3,
			CONNECTEDIDNAME = 4,
			CONNECTEDIDNUMBER = 5,
			REDIRECTIONIDNAME = 6,
			REDIRECTIONIDNUMBER = 7,
			REDIRECTINGIDNAME = 8,
			REDIRECTINGIDNUMBER = 9,
			CALLEDPARTYFRIENDLYNAME = 10,
			COMMENT = 11,
			DISPLAYABLEADDRESS = 12,
			CALLINGPARTYID = 13,
		}
		public enum CALLINFO_BUFFER : int32
		{
			USERUSERINFO = 0,
			DEVSPECIFICBUFFER = 1,
			CALLDATABUFFER = 2,
			CHARGINGINFOBUFFER = 3,
			HIGHLEVELCOMPATIBILITYBUFFER = 4,
			LOWLEVELCOMPATIBILITYBUFFER = 5,
		}
		public enum ADDRESS_CAPABILITY : int32
		{
			ADDRESSTYPES = 0,
			BEARERMODES = 1,
			MAXACTIVECALLS = 2,
			MAXONHOLDCALLS = 3,
			MAXONHOLDPENDINGCALLS = 4,
			MAXNUMCONFERENCE = 5,
			MAXNUMTRANSCONF = 6,
			MONITORDIGITSUPPORT = 7,
			GENERATEDIGITSUPPORT = 8,
			GENERATETONEMODES = 9,
			GENERATETONEMAXNUMFREQ = 10,
			MONITORTONEMAXNUMFREQ = 11,
			MONITORTONEMAXNUMENTRIES = 12,
			DEVCAPFLAGS = 13,
			ANSWERMODES = 14,
			LINEFEATURES = 15,
			SETTABLEDEVSTATUS = 16,
			PARKSUPPORT = 17,
			CALLERIDSUPPORT = 18,
			CALLEDIDSUPPORT = 19,
			CONNECTEDIDSUPPORT = 20,
			REDIRECTIONIDSUPPORT = 21,
			REDIRECTINGIDSUPPORT = 22,
			ADDRESSCAPFLAGS = 23,
			CALLFEATURES1 = 24,
			CALLFEATURES2 = 25,
			REMOVEFROMCONFCAPS = 26,
			REMOVEFROMCONFSTATE = 27,
			TRANSFERMODES = 28,
			ADDRESSFEATURES = 29,
			PREDICTIVEAUTOTRANSFERSTATES = 30,
			MAXCALLDATASIZE = 31,
			LINEID = 32,
			ADDRESSID = 33,
			FORWARDMODES = 34,
			MAXFORWARDENTRIES = 35,
			MAXSPECIFICENTRIES = 36,
			MINFWDNUMRINGS = 37,
			MAXFWDNUMRINGS = 38,
			MAXCALLCOMPLETIONS = 39,
			CALLCOMPLETIONCONDITIONS = 40,
			CALLCOMPLETIONMODES = 41,
			PERMANENTDEVICEID = 42,
			GATHERDIGITSMINTIMEOUT = 43,
			GATHERDIGITSMAXTIMEOUT = 44,
			GENERATEDIGITMINDURATION = 45,
			GENERATEDIGITMAXDURATION = 46,
			GENERATEDIGITDEFAULTDURATION = 47,
		}
		public enum ADDRESS_CAPABILITY_STRING : int32
		{
			PROTOCOL = 0,
			ADDRESSDEVICESPECIFIC = 1,
			LINEDEVICESPECIFIC = 2,
			PROVIDERSPECIFIC = 3,
			SWITCHSPECIFIC = 4,
			PERMANENTDEVICEGUID = 5,
		}
		public enum FULLDUPLEX_SUPPORT : int32
		{
			SUPPORTED = 0,
			NOTSUPPORTED = 1,
			UNKNOWN = 2,
		}
		public enum FINISH_MODE : int32
		{
			ASTRANSFER = 0,
			ASCONFERENCE = 1,
		}
		public enum PHONE_PRIVILEGE : int32
		{
			OWNER = 0,
			MONITOR = 1,
		}
		public enum PHONE_HOOK_SWITCH_DEVICE : int32
		{
			HANDSET = 1,
			SPEAKERPHONE = 2,
			HEADSET = 4,
		}
		public enum PHONE_HOOK_SWITCH_STATE : int32
		{
			ONHOOK = 1,
			OFFHOOK_MIC_ONLY = 2,
			OFFHOOK_SPEAKER_ONLY = 4,
			OFFHOOK = 8,
		}
		public enum PHONE_LAMP_MODE : int32
		{
			DUMMY = 1,
			OFF = 2,
			STEADY = 4,
			WINK = 8,
			FLASH = 16,
			FLUTTER = 32,
			BROKENFLUTTER = 64,
			UNKNOWN = 128,
		}
		public enum PHONECAPS_LONG : int32
		{
			HOOKSWITCHES = 0,
			HANDSETHOOKSWITCHMODES = 1,
			HEADSETHOOKSWITCHMODES = 2,
			SPEAKERPHONEHOOKSWITCHMODES = 3,
			DISPLAYNUMROWS = 4,
			DISPLAYNUMCOLUMNS = 5,
			NUMRINGMODES = 6,
			NUMBUTTONLAMPS = 7,
			GENERICPHONE = 8,
		}
		public enum PHONECAPS_STRING : int32
		{
			PHONENAME = 0,
			PHONEINFO = 1,
			PROVIDERINFO = 2,
		}
		public enum PHONECAPS_BUFFER : int32
		{
			PCB_DEVSPECIFICBUFFER = 0,
		}
		public enum PHONE_BUTTON_STATE : int32
		{
			UP = 1,
			DOWN = 2,
			UNKNOWN = 4,
			UNAVAIL = 8,
		}
		public enum PHONE_BUTTON_MODE : int32
		{
			DUMMY = 0,
			CALL = 1,
			FEATURE = 2,
			KEYPAD = 3,
			LOCAL = 4,
			DISPLAY = 5,
		}
		public enum PHONE_BUTTON_FUNCTION : int32
		{
			UNKNOWN = 0,
			CONFERENCE = 1,
			TRANSFER = 2,
			DROP = 3,
			HOLD = 4,
			RECALL = 5,
			DISCONNECT = 6,
			CONNECT = 7,
			MSGWAITON = 8,
			MSGWAITOFF = 9,
			SELECTRING = 10,
			ABBREVDIAL = 11,
			FORWARD = 12,
			PICKUP = 13,
			RINGAGAIN = 14,
			PARK = 15,
			REJECT = 16,
			REDIRECT = 17,
			MUTE = 18,
			VOLUMEUP = 19,
			VOLUMEDOWN = 20,
			SPEAKERON = 21,
			SPEAKEROFF = 22,
			FLASH = 23,
			DATAON = 24,
			DATAOFF = 25,
			DONOTDISTURB = 26,
			INTERCOM = 27,
			BRIDGEDAPP = 28,
			BUSY = 29,
			CALLAPP = 30,
			DATETIME = 31,
			DIRECTORY = 32,
			COVER = 33,
			CALLID = 34,
			LASTNUM = 35,
			NIGHTSRV = 36,
			SENDCALLS = 37,
			MSGINDICATOR = 38,
			REPDIAL = 39,
			SETREPDIAL = 40,
			SYSTEMSPEED = 41,
			STATIONSPEED = 42,
			CAMPON = 43,
			SAVEREPEAT = 44,
			QUEUECALL = 45,
			NONE = 46,
			SEND = 47,
		}
		public enum PHONE_TONE : int32
		{
			KEYPADZERO = 0,
			KEYPADONE = 1,
			KEYPADTWO = 2,
			KEYPADTHREE = 3,
			KEYPADFOUR = 4,
			KEYPADFIVE = 5,
			KEYPADSIX = 6,
			KEYPADSEVEN = 7,
			KEYPADEIGHT = 8,
			KEYPADNINE = 9,
			KEYPADSTAR = 10,
			KEYPADPOUND = 11,
			KEYPADA = 12,
			KEYPADB = 13,
			KEYPADC = 14,
			KEYPADD = 15,
			NORMALDIALTONE = 16,
			EXTERNALDIALTONE = 17,
			BUSY = 18,
			RINGBACK = 19,
			ERRORTONE = 20,
			SILENCE = 21,
		}
		[AllowDuplicates]
		public enum PHONE_EVENT : int32
		{
			DISPLAY = 0,
			LAMPMODE = 1,
			RINGMODE = 2,
			RINGVOLUME = 3,
			HOOKSWITCH = 4,
			CAPSCHANGE = 5,
			BUTTON = 6,
			CLOSE = 7,
			NUMBERGATHERED = 8,
			DIALING = 9,
			ANSWER = 10,
			DISCONNECT = 11,
			LASTITEM = 11,
		}
		[AllowDuplicates]
		public enum TERMINAL_MEDIA_STATE : int32
		{
			IDLE = 0,
			ACTIVE = 1,
			PAUSED = 2,
			LASTITEM = 2,
		}
		public enum FT_STATE_EVENT_CAUSE : int32
		{
			NORMAL = 0,
			END_OF_FILE = 1,
			READ_ERROR = 2,
			WRITE_ERROR = 3,
		}
		public enum AGENT_EVENT : int32
		{
			NOT_READY = 0,
			READY = 1,
			BUSY_ACD = 2,
			BUSY_INCOMING = 3,
			BUSY_OUTGOING = 4,
			UNKNOWN = 5,
		}
		public enum AGENT_STATE : int32
		{
			NOT_READY = 0,
			READY = 1,
			BUSY_ACD = 2,
			BUSY_INCOMING = 3,
			BUSY_OUTGOING = 4,
			UNKNOWN = 5,
		}
		public enum AGENT_SESSION_EVENT : int32
		{
			NEW_SESSION = 0,
			NOT_READY = 1,
			READY = 2,
			BUSY = 3,
			WRAPUP = 4,
			END = 5,
		}
		public enum AGENT_SESSION_STATE : int32
		{
			NOT_READY = 0,
			READY = 1,
			BUSY_ON_CALL = 2,
			BUSY_WRAPUP = 3,
			SESSION_ENDED = 4,
		}
		public enum AGENTHANDLER_EVENT : int32
		{
			NEW_AGENTHANDLER = 0,
			AGENTHANDLER_REMOVED = 1,
		}
		public enum ACDGROUP_EVENT : int32
		{
			NEW_GROUP = 0,
			GROUP_REMOVED = 1,
		}
		public enum ACDQUEUE_EVENT : int32
		{
			NEW_QUEUE = 0,
			QUEUE_REMOVED = 1,
		}
		public enum MSP_ADDRESS_EVENT : int32
		{
			AVAILABLE = 0,
			UNAVAILABLE = 1,
		}
		public enum MSP_CALL_EVENT : int32
		{
			NEW_STREAM = 0,
			STREAM_FAIL = 1,
			TERMINAL_FAIL = 2,
			STREAM_NOT_USED = 3,
			STREAM_ACTIVE = 4,
			STREAM_INACTIVE = 5,
		}
		public enum MSP_CALL_EVENT_CAUSE : int32
		{
			UNKNOWN = 0,
			BAD_DEVICE = 1,
			CONNECT_FAIL = 2,
			LOCAL_REQUEST = 3,
			REMOTE_REQUEST = 4,
			MEDIA_TIMEOUT = 5,
			MEDIA_RECOVERED = 6,
			QUALITY_OF_SERVICE = 7,
		}
		public enum MSP_EVENT : int32
		{
			ADDRESS_EVENT = 0,
			CALL_EVENT = 1,
			TSP_DATA = 2,
			PRIVATE_EVENT = 3,
			ASR_TERMINAL_EVENT = 4,
			TTS_TERMINAL_EVENT = 5,
			FILE_TERMINAL_EVENT = 6,
			TONE_TERMINAL_EVENT = 7,
		}
		public enum DIRECTORY_TYPE : int32
		{
			NTDS = 1,
			ILS = 2,
		}
		public enum DIRECTORY_OBJECT_TYPE : int32
		{
			CONFERENCE = 1,
			USER = 2,
		}
		public enum RND_ADVERTISING_SCOPE : int32
		{
			LOCAL = 1,
			SITE = 2,
			REGION = 3,
			WORLD = 4,
		}
		
		// --- Function Pointers ---
		
		public function void LINECALLBACK(uint32 hDevice, uint32 dwMessage, uint dwInstance, uint dwParam1, uint dwParam2, uint dwParam3);
		public function void PHONECALLBACK(uint32 hDevice, uint32 dwMessage, uint dwInstance, uint dwParam1, uint dwParam2, uint dwParam3);
		public function void ASYNC_COMPLETION(uint32 dwRequestID, int32 lResult);
		public function void LINEEVENT(out HTAPILINE__ htLine, out HTAPICALL__ htCall, uint32 dwMsg, uint dwParam1, uint dwParam2, uint dwParam3);
		public function void PHONEEVENT(out HTAPIPHONE__ htPhone, uint32 dwMsg, uint dwParam1, uint dwParam2, uint dwParam3);
		public function int32 TUISPIDLLCALLBACK(uint dwObjectID, uint32 dwObjectType, void* lpParams, uint32 dwSize);
		public function HRESULT LPOPENTNEFSTREAM(void* lpvSupport, ref IStream lpStream, ref int8 lpszStreamName, uint32 ulFlags, ref IMessage lpMessage, uint16 wKeyVal, out ITnef* lppTNEF);
		public function HRESULT LPOPENTNEFSTREAMEX(void* lpvSupport, ref IStream lpStream, ref int8 lpszStreamName, uint32 ulFlags, ref IMessage lpMessage, uint16 wKeyVal, ref IAddrBook lpAdressBook, out ITnef* lppTNEF);
		public function HRESULT LPGETTNEFSTREAMCODEPAGE(ref IStream lpStream, out uint32 lpulCodepage, out uint32 lpulSubCodepage);
		
		// --- Structs ---
		
		[CRepr, Packed(1)]
		public struct LINEADDRESSCAPS
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwLineDeviceID;
			public uint32 dwAddressSize;
			public uint32 dwAddressOffset;
			public uint32 dwDevSpecificSize;
			public uint32 dwDevSpecificOffset;
			public uint32 dwAddressSharing;
			public uint32 dwAddressStates;
			public uint32 dwCallInfoStates;
			public uint32 dwCallerIDFlags;
			public uint32 dwCalledIDFlags;
			public uint32 dwConnectedIDFlags;
			public uint32 dwRedirectionIDFlags;
			public uint32 dwRedirectingIDFlags;
			public uint32 dwCallStates;
			public uint32 dwDialToneModes;
			public uint32 dwBusyModes;
			public uint32 dwSpecialInfo;
			public uint32 dwDisconnectModes;
			public uint32 dwMaxNumActiveCalls;
			public uint32 dwMaxNumOnHoldCalls;
			public uint32 dwMaxNumOnHoldPendingCalls;
			public uint32 dwMaxNumConference;
			public uint32 dwMaxNumTransConf;
			public uint32 dwAddrCapFlags;
			public uint32 dwCallFeatures;
			public uint32 dwRemoveFromConfCaps;
			public uint32 dwRemoveFromConfState;
			public uint32 dwTransferModes;
			public uint32 dwParkModes;
			public uint32 dwForwardModes;
			public uint32 dwMaxForwardEntries;
			public uint32 dwMaxSpecificEntries;
			public uint32 dwMinFwdNumRings;
			public uint32 dwMaxFwdNumRings;
			public uint32 dwMaxCallCompletions;
			public uint32 dwCallCompletionConds;
			public uint32 dwCallCompletionModes;
			public uint32 dwNumCompletionMessages;
			public uint32 dwCompletionMsgTextEntrySize;
			public uint32 dwCompletionMsgTextSize;
			public uint32 dwCompletionMsgTextOffset;
			public uint32 dwAddressFeatures;
			public uint32 dwPredictiveAutoTransferStates;
			public uint32 dwNumCallTreatments;
			public uint32 dwCallTreatmentListSize;
			public uint32 dwCallTreatmentListOffset;
			public uint32 dwDeviceClassesSize;
			public uint32 dwDeviceClassesOffset;
			public uint32 dwMaxCallDataSize;
			public uint32 dwCallFeatures2;
			public uint32 dwMaxNoAnswerTimeout;
			public uint32 dwConnectedModes;
			public uint32 dwOfferingModes;
			public uint32 dwAvailableMediaModes;
		}
		[CRepr, Packed(1)]
		public struct LINEADDRESSSTATUS
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwNumInUse;
			public uint32 dwNumActiveCalls;
			public uint32 dwNumOnHoldCalls;
			public uint32 dwNumOnHoldPendCalls;
			public uint32 dwAddressFeatures;
			public uint32 dwNumRingsNoAnswer;
			public uint32 dwForwardNumEntries;
			public uint32 dwForwardSize;
			public uint32 dwForwardOffset;
			public uint32 dwTerminalModesSize;
			public uint32 dwTerminalModesOffset;
			public uint32 dwDevSpecificSize;
			public uint32 dwDevSpecificOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEAGENTACTIVITYENTRY
		{
			public uint32 dwID;
			public uint32 dwNameSize;
			public uint32 dwNameOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEAGENTACTIVITYLIST
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwNumEntries;
			public uint32 dwListSize;
			public uint32 dwListOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEAGENTCAPS
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwAgentHandlerInfoSize;
			public uint32 dwAgentHandlerInfoOffset;
			public uint32 dwCapsVersion;
			public uint32 dwFeatures;
			public uint32 dwStates;
			public uint32 dwNextStates;
			public uint32 dwMaxNumGroupEntries;
			public uint32 dwAgentStatusMessages;
			public uint32 dwNumAgentExtensionIDs;
			public uint32 dwAgentExtensionIDListSize;
			public uint32 dwAgentExtensionIDListOffset;
			public Guid ProxyGUID;
		}
		[CRepr, Packed(1)]
		public struct LINEAGENTGROUPENTRY
		{
			public _GroupID_e__Struct GroupID;
			public uint32 dwNameSize;
			public uint32 dwNameOffset;
			
			[CRepr, Packed(1)]
			public struct _GroupID_e__Struct
			{
				public uint32 dwGroupID1;
				public uint32 dwGroupID2;
				public uint32 dwGroupID3;
				public uint32 dwGroupID4;
			}
		}
		[CRepr, Packed(1)]
		public struct LINEAGENTGROUPLIST
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwNumEntries;
			public uint32 dwListSize;
			public uint32 dwListOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEAGENTSTATUS
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwNumEntries;
			public uint32 dwGroupListSize;
			public uint32 dwGroupListOffset;
			public uint32 dwState;
			public uint32 dwNextState;
			public uint32 dwActivityID;
			public uint32 dwActivitySize;
			public uint32 dwActivityOffset;
			public uint32 dwAgentFeatures;
			public uint32 dwValidStates;
			public uint32 dwValidNextStates;
		}
		[CRepr, Packed(1)]
		public struct LINEAPPINFO
		{
			public uint32 dwMachineNameSize;
			public uint32 dwMachineNameOffset;
			public uint32 dwUserNameSize;
			public uint32 dwUserNameOffset;
			public uint32 dwModuleFilenameSize;
			public uint32 dwModuleFilenameOffset;
			public uint32 dwFriendlyNameSize;
			public uint32 dwFriendlyNameOffset;
			public uint32 dwMediaModes;
			public uint32 dwAddressID;
		}
		[CRepr, Packed(1)]
		public struct LINEAGENTENTRY
		{
			public uint32 hAgent;
			public uint32 dwNameSize;
			public uint32 dwNameOffset;
			public uint32 dwIDSize;
			public uint32 dwIDOffset;
			public uint32 dwPINSize;
			public uint32 dwPINOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEAGENTLIST
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwNumEntries;
			public uint32 dwListSize;
			public uint32 dwListOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEAGENTINFO
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwAgentState;
			public uint32 dwNextAgentState;
			public uint32 dwMeasurementPeriod;
			public CY cyOverallCallRate;
			public uint32 dwNumberOfACDCalls;
			public uint32 dwNumberOfIncomingCalls;
			public uint32 dwNumberOfOutgoingCalls;
			public uint32 dwTotalACDTalkTime;
			public uint32 dwTotalACDCallTime;
			public uint32 dwTotalACDWrapUpTime;
		}
		[CRepr, Packed(1)]
		public struct LINEAGENTSESSIONENTRY
		{
			public uint32 hAgentSession;
			public uint32 hAgent;
			public Guid GroupID;
			public uint32 dwWorkingAddressID;
		}
		[CRepr, Packed(1)]
		public struct LINEAGENTSESSIONLIST
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwNumEntries;
			public uint32 dwListSize;
			public uint32 dwListOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEAGENTSESSIONINFO
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwAgentSessionState;
			public uint32 dwNextAgentSessionState;
			public double dateSessionStartTime;
			public uint32 dwSessionDuration;
			public uint32 dwNumberOfCalls;
			public uint32 dwTotalTalkTime;
			public uint32 dwAverageTalkTime;
			public uint32 dwTotalCallTime;
			public uint32 dwAverageCallTime;
			public uint32 dwTotalWrapUpTime;
			public uint32 dwAverageWrapUpTime;
			public CY cyACDCallRate;
			public uint32 dwLongestTimeToAnswer;
			public uint32 dwAverageTimeToAnswer;
		}
		[CRepr, Packed(1)]
		public struct LINEQUEUEENTRY
		{
			public uint32 dwQueueID;
			public uint32 dwNameSize;
			public uint32 dwNameOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEQUEUELIST
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwNumEntries;
			public uint32 dwListSize;
			public uint32 dwListOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEQUEUEINFO
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwMeasurementPeriod;
			public uint32 dwTotalCallsQueued;
			public uint32 dwCurrentCallsQueued;
			public uint32 dwTotalCallsAbandoned;
			public uint32 dwTotalCallsFlowedIn;
			public uint32 dwTotalCallsFlowedOut;
			public uint32 dwLongestEverWaitTime;
			public uint32 dwCurrentLongestWaitTime;
			public uint32 dwAverageWaitTime;
			public uint32 dwFinalDisposition;
		}
		[CRepr, Packed(1)]
		public struct LINEPROXYREQUESTLIST
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwNumEntries;
			public uint32 dwListSize;
			public uint32 dwListOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEDIALPARAMS
		{
			public uint32 dwDialPause;
			public uint32 dwDialSpeed;
			public uint32 dwDigitDuration;
			public uint32 dwWaitForDialtone;
		}
		[CRepr, Packed(1)]
		public struct LINECALLINFO
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 hLine;
			public uint32 dwLineDeviceID;
			public uint32 dwAddressID;
			public uint32 dwBearerMode;
			public uint32 dwRate;
			public uint32 dwMediaMode;
			public uint32 dwAppSpecific;
			public uint32 dwCallID;
			public uint32 dwRelatedCallID;
			public uint32 dwCallParamFlags;
			public uint32 dwCallStates;
			public uint32 dwMonitorDigitModes;
			public uint32 dwMonitorMediaModes;
			public LINEDIALPARAMS DialParams;
			public uint32 dwOrigin;
			public uint32 dwReason;
			public uint32 dwCompletionID;
			public uint32 dwNumOwners;
			public uint32 dwNumMonitors;
			public uint32 dwCountryCode;
			public uint32 dwTrunk;
			public uint32 dwCallerIDFlags;
			public uint32 dwCallerIDSize;
			public uint32 dwCallerIDOffset;
			public uint32 dwCallerIDNameSize;
			public uint32 dwCallerIDNameOffset;
			public uint32 dwCalledIDFlags;
			public uint32 dwCalledIDSize;
			public uint32 dwCalledIDOffset;
			public uint32 dwCalledIDNameSize;
			public uint32 dwCalledIDNameOffset;
			public uint32 dwConnectedIDFlags;
			public uint32 dwConnectedIDSize;
			public uint32 dwConnectedIDOffset;
			public uint32 dwConnectedIDNameSize;
			public uint32 dwConnectedIDNameOffset;
			public uint32 dwRedirectionIDFlags;
			public uint32 dwRedirectionIDSize;
			public uint32 dwRedirectionIDOffset;
			public uint32 dwRedirectionIDNameSize;
			public uint32 dwRedirectionIDNameOffset;
			public uint32 dwRedirectingIDFlags;
			public uint32 dwRedirectingIDSize;
			public uint32 dwRedirectingIDOffset;
			public uint32 dwRedirectingIDNameSize;
			public uint32 dwRedirectingIDNameOffset;
			public uint32 dwAppNameSize;
			public uint32 dwAppNameOffset;
			public uint32 dwDisplayableAddressSize;
			public uint32 dwDisplayableAddressOffset;
			public uint32 dwCalledPartySize;
			public uint32 dwCalledPartyOffset;
			public uint32 dwCommentSize;
			public uint32 dwCommentOffset;
			public uint32 dwDisplaySize;
			public uint32 dwDisplayOffset;
			public uint32 dwUserUserInfoSize;
			public uint32 dwUserUserInfoOffset;
			public uint32 dwHighLevelCompSize;
			public uint32 dwHighLevelCompOffset;
			public uint32 dwLowLevelCompSize;
			public uint32 dwLowLevelCompOffset;
			public uint32 dwChargingInfoSize;
			public uint32 dwChargingInfoOffset;
			public uint32 dwTerminalModesSize;
			public uint32 dwTerminalModesOffset;
			public uint32 dwDevSpecificSize;
			public uint32 dwDevSpecificOffset;
			public uint32 dwCallTreatment;
			public uint32 dwCallDataSize;
			public uint32 dwCallDataOffset;
			public uint32 dwSendingFlowspecSize;
			public uint32 dwSendingFlowspecOffset;
			public uint32 dwReceivingFlowspecSize;
			public uint32 dwReceivingFlowspecOffset;
		}
		[CRepr, Packed(1)]
		public struct LINECALLLIST
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwCallsNumEntries;
			public uint32 dwCallsSize;
			public uint32 dwCallsOffset;
		}
		[CRepr, Packed(1)]
		public struct LINECALLPARAMS
		{
			public uint32 dwTotalSize;
			public uint32 dwBearerMode;
			public uint32 dwMinRate;
			public uint32 dwMaxRate;
			public uint32 dwMediaMode;
			public uint32 dwCallParamFlags;
			public uint32 dwAddressMode;
			public uint32 dwAddressID;
			public LINEDIALPARAMS DialParams;
			public uint32 dwOrigAddressSize;
			public uint32 dwOrigAddressOffset;
			public uint32 dwDisplayableAddressSize;
			public uint32 dwDisplayableAddressOffset;
			public uint32 dwCalledPartySize;
			public uint32 dwCalledPartyOffset;
			public uint32 dwCommentSize;
			public uint32 dwCommentOffset;
			public uint32 dwUserUserInfoSize;
			public uint32 dwUserUserInfoOffset;
			public uint32 dwHighLevelCompSize;
			public uint32 dwHighLevelCompOffset;
			public uint32 dwLowLevelCompSize;
			public uint32 dwLowLevelCompOffset;
			public uint32 dwDevSpecificSize;
			public uint32 dwDevSpecificOffset;
			public uint32 dwPredictiveAutoTransferStates;
			public uint32 dwTargetAddressSize;
			public uint32 dwTargetAddressOffset;
			public uint32 dwSendingFlowspecSize;
			public uint32 dwSendingFlowspecOffset;
			public uint32 dwReceivingFlowspecSize;
			public uint32 dwReceivingFlowspecOffset;
			public uint32 dwDeviceClassSize;
			public uint32 dwDeviceClassOffset;
			public uint32 dwDeviceConfigSize;
			public uint32 dwDeviceConfigOffset;
			public uint32 dwCallDataSize;
			public uint32 dwCallDataOffset;
			public uint32 dwNoAnswerTimeout;
			public uint32 dwCallingPartyIDSize;
			public uint32 dwCallingPartyIDOffset;
		}
		[CRepr, Packed(1)]
		public struct LINECALLSTATUS
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwCallState;
			public uint32 dwCallStateMode;
			public uint32 dwCallPrivilege;
			public uint32 dwCallFeatures;
			public uint32 dwDevSpecificSize;
			public uint32 dwDevSpecificOffset;
			public uint32 dwCallFeatures2;
			public SYSTEMTIME tStateEntryTime;
		}
		[CRepr, Packed(1)]
		public struct LINECALLTREATMENTENTRY
		{
			public uint32 dwCallTreatmentID;
			public uint32 dwCallTreatmentNameSize;
			public uint32 dwCallTreatmentNameOffset;
		}
		[CRepr, Packed(1)]
		public struct LINECARDENTRY
		{
			public uint32 dwPermanentCardID;
			public uint32 dwCardNameSize;
			public uint32 dwCardNameOffset;
			public uint32 dwCardNumberDigits;
			public uint32 dwSameAreaRuleSize;
			public uint32 dwSameAreaRuleOffset;
			public uint32 dwLongDistanceRuleSize;
			public uint32 dwLongDistanceRuleOffset;
			public uint32 dwInternationalRuleSize;
			public uint32 dwInternationalRuleOffset;
			public uint32 dwOptions;
		}
		[CRepr, Packed(1)]
		public struct LINECOUNTRYENTRY
		{
			public uint32 dwCountryID;
			public uint32 dwCountryCode;
			public uint32 dwNextCountryID;
			public uint32 dwCountryNameSize;
			public uint32 dwCountryNameOffset;
			public uint32 dwSameAreaRuleSize;
			public uint32 dwSameAreaRuleOffset;
			public uint32 dwLongDistanceRuleSize;
			public uint32 dwLongDistanceRuleOffset;
			public uint32 dwInternationalRuleSize;
			public uint32 dwInternationalRuleOffset;
		}
		[CRepr, Packed(1)]
		public struct LINECOUNTRYLIST
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwNumCountries;
			public uint32 dwCountryListSize;
			public uint32 dwCountryListOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEDEVCAPS
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwProviderInfoSize;
			public uint32 dwProviderInfoOffset;
			public uint32 dwSwitchInfoSize;
			public uint32 dwSwitchInfoOffset;
			public uint32 dwPermanentLineID;
			public uint32 dwLineNameSize;
			public uint32 dwLineNameOffset;
			public uint32 dwStringFormat;
			public uint32 dwAddressModes;
			public uint32 dwNumAddresses;
			public uint32 dwBearerModes;
			public uint32 dwMaxRate;
			public uint32 dwMediaModes;
			public uint32 dwGenerateToneModes;
			public uint32 dwGenerateToneMaxNumFreq;
			public uint32 dwGenerateDigitModes;
			public uint32 dwMonitorToneMaxNumFreq;
			public uint32 dwMonitorToneMaxNumEntries;
			public uint32 dwMonitorDigitModes;
			public uint32 dwGatherDigitsMinTimeout;
			public uint32 dwGatherDigitsMaxTimeout;
			public uint32 dwMedCtlDigitMaxListSize;
			public uint32 dwMedCtlMediaMaxListSize;
			public uint32 dwMedCtlToneMaxListSize;
			public uint32 dwMedCtlCallStateMaxListSize;
			public uint32 dwDevCapFlags;
			public uint32 dwMaxNumActiveCalls;
			public uint32 dwAnswerMode;
			public uint32 dwRingModes;
			public uint32 dwLineStates;
			public uint32 dwUUIAcceptSize;
			public uint32 dwUUIAnswerSize;
			public uint32 dwUUIMakeCallSize;
			public uint32 dwUUIDropSize;
			public uint32 dwUUISendUserUserInfoSize;
			public uint32 dwUUICallInfoSize;
			public LINEDIALPARAMS MinDialParams;
			public LINEDIALPARAMS MaxDialParams;
			public LINEDIALPARAMS DefaultDialParams;
			public uint32 dwNumTerminals;
			public uint32 dwTerminalCapsSize;
			public uint32 dwTerminalCapsOffset;
			public uint32 dwTerminalTextEntrySize;
			public uint32 dwTerminalTextSize;
			public uint32 dwTerminalTextOffset;
			public uint32 dwDevSpecificSize;
			public uint32 dwDevSpecificOffset;
			public uint32 dwLineFeatures;
			public uint32 dwSettableDevStatus;
			public uint32 dwDeviceClassesSize;
			public uint32 dwDeviceClassesOffset;
			public Guid PermanentLineGuid;
		}
		[CRepr, Packed(1)]
		public struct LINEDEVSTATUS
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwNumOpens;
			public uint32 dwOpenMediaModes;
			public uint32 dwNumActiveCalls;
			public uint32 dwNumOnHoldCalls;
			public uint32 dwNumOnHoldPendCalls;
			public uint32 dwLineFeatures;
			public uint32 dwNumCallCompletions;
			public uint32 dwRingMode;
			public uint32 dwSignalLevel;
			public uint32 dwBatteryLevel;
			public uint32 dwRoamMode;
			public uint32 dwDevStatusFlags;
			public uint32 dwTerminalModesSize;
			public uint32 dwTerminalModesOffset;
			public uint32 dwDevSpecificSize;
			public uint32 dwDevSpecificOffset;
			public uint32 dwAvailableMediaModes;
			public uint32 dwAppInfoSize;
			public uint32 dwAppInfoOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEEXTENSIONID
		{
			public uint32 dwExtensionID0;
			public uint32 dwExtensionID1;
			public uint32 dwExtensionID2;
			public uint32 dwExtensionID3;
		}
		[CRepr, Packed(1)]
		public struct LINEFORWARD
		{
			public uint32 dwForwardMode;
			public uint32 dwCallerAddressSize;
			public uint32 dwCallerAddressOffset;
			public uint32 dwDestCountryCode;
			public uint32 dwDestAddressSize;
			public uint32 dwDestAddressOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEFORWARDLIST
		{
			public uint32 dwTotalSize;
			public uint32 dwNumEntries;
			public LINEFORWARD[0] ForwardList;
		}
		[CRepr, Packed(1)]
		public struct LINEGENERATETONE
		{
			public uint32 dwFrequency;
			public uint32 dwCadenceOn;
			public uint32 dwCadenceOff;
			public uint32 dwVolume;
		}
		[CRepr, Packed(1)]
		public struct LINEINITIALIZEEXPARAMS
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwOptions;
			public _Handles_e__Union Handles;
			public uint32 dwCompletionKey;
			
			[CRepr, Union, Packed(1)]
			public struct _Handles_e__Union
			{
				public HANDLE hEvent;
				public HANDLE hCompletionPort;
			}
		}
		[CRepr, Packed(1)]
		public struct LINELOCATIONENTRY
		{
			public uint32 dwPermanentLocationID;
			public uint32 dwLocationNameSize;
			public uint32 dwLocationNameOffset;
			public uint32 dwCountryCode;
			public uint32 dwCityCodeSize;
			public uint32 dwCityCodeOffset;
			public uint32 dwPreferredCardID;
			public uint32 dwLocalAccessCodeSize;
			public uint32 dwLocalAccessCodeOffset;
			public uint32 dwLongDistanceAccessCodeSize;
			public uint32 dwLongDistanceAccessCodeOffset;
			public uint32 dwTollPrefixListSize;
			public uint32 dwTollPrefixListOffset;
			public uint32 dwCountryID;
			public uint32 dwOptions;
			public uint32 dwCancelCallWaitingSize;
			public uint32 dwCancelCallWaitingOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEMEDIACONTROLCALLSTATE
		{
			public uint32 dwCallStates;
			public uint32 dwMediaControl;
		}
		[CRepr, Packed(1)]
		public struct LINEMEDIACONTROLDIGIT
		{
			public uint32 dwDigit;
			public uint32 dwDigitModes;
			public uint32 dwMediaControl;
		}
		[CRepr, Packed(1)]
		public struct LINEMEDIACONTROLMEDIA
		{
			public uint32 dwMediaModes;
			public uint32 dwDuration;
			public uint32 dwMediaControl;
		}
		[CRepr, Packed(1)]
		public struct LINEMEDIACONTROLTONE
		{
			public uint32 dwAppSpecific;
			public uint32 dwDuration;
			public uint32 dwFrequency1;
			public uint32 dwFrequency2;
			public uint32 dwFrequency3;
			public uint32 dwMediaControl;
		}
		[CRepr, Packed(1)]
		public struct LINEMESSAGE
		{
			public uint32 hDevice;
			public uint32 dwMessageID;
			public uint dwCallbackInstance;
			public uint dwParam1;
			public uint dwParam2;
			public uint dwParam3;
		}
		[CRepr, Packed(1)]
		public struct LINEMONITORTONE
		{
			public uint32 dwAppSpecific;
			public uint32 dwDuration;
			public uint32 dwFrequency1;
			public uint32 dwFrequency2;
			public uint32 dwFrequency3;
		}
		[CRepr, Packed(1)]
		public struct LINEPROVIDERENTRY
		{
			public uint32 dwPermanentProviderID;
			public uint32 dwProviderFilenameSize;
			public uint32 dwProviderFilenameOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEPROVIDERLIST
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwNumProviders;
			public uint32 dwProviderListSize;
			public uint32 dwProviderListOffset;
		}
		[CRepr, Packed(1)]
		public struct LINEPROXYREQUEST
		{
			public uint32 dwSize;
			public uint32 dwClientMachineNameSize;
			public uint32 dwClientMachineNameOffset;
			public uint32 dwClientUserNameSize;
			public uint32 dwClientUserNameOffset;
			public uint32 dwClientAppAPIVersion;
			public uint32 dwRequestType;
			public _Anonymous_e__Union Anonymous;
			
			
			[CRepr, Union]
			public struct _Anonymous_e__Union
			{
				public _SetAgentGroup_e__Struct SetAgentGroup;
				public _SetAgentState_e__Struct SetAgentState;
				public _SetAgentActivity_e__Struct SetAgentActivity;
				public _GetAgentCaps_e__Struct GetAgentCaps;
				public _GetAgentStatus_e__Struct GetAgentStatus;
				public _AgentSpecific_e__Struct AgentSpecific;
				public _GetAgentActivityList_e__Struct GetAgentActivityList;
				public _GetAgentGroupList_e__Struct GetAgentGroupList;
				public _CreateAgent_e__Struct CreateAgent;
				public _SetAgentStateEx_e__Struct SetAgentStateEx;
				public _SetAgentMeasurementPeriod_e__Struct SetAgentMeasurementPeriod;
				public _GetAgentInfo_e__Struct GetAgentInfo;
				public _CreateAgentSession_e__Struct CreateAgentSession;
				public _GetAgentSessionList_e__Struct GetAgentSessionList;
				public _GetAgentSessionInfo_e__Struct GetAgentSessionInfo;
				public _SetAgentSessionState_e__Struct SetAgentSessionState;
				public _GetQueueList_e__Struct GetQueueList;
				public _SetQueueMeasurementPeriod_e__Struct SetQueueMeasurementPeriod;
				public _GetQueueInfo_e__Struct GetQueueInfo;
				public _GetGroupList_e__Struct GetGroupList;
				
				[CRepr, Packed(1)]
				public struct _GetQueueInfo_e__Struct
				{
					public uint32 dwQueueID;
					public LINEQUEUEINFO QueueInfo;
				}
				[CRepr, Packed(1)]
				public struct _GetQueueList_e__Struct
				{
					public Guid GroupID;
					public LINEQUEUELIST QueueList;
				}
				[CRepr, Packed(1)]
				public struct _GetAgentSessionInfo_e__Struct
				{
					public uint32 hAgentSession;
					public LINEAGENTSESSIONINFO SessionInfo;
				}
				[CRepr, Packed(1)]
				public struct _CreateAgentSession_e__Struct
				{
					public uint32 hAgentSession;
					public uint32 dwAgentPINSize;
					public uint32 dwAgentPINOffset;
					public uint32 hAgent;
					public Guid GroupID;
					public uint32 dwWorkingAddressID;
				}
				[CRepr, Packed(1)]
				public struct _SetAgentMeasurementPeriod_e__Struct
				{
					public uint32 hAgent;
					public uint32 dwMeasurementPeriod;
				}
				[CRepr, Packed(1)]
				public struct _CreateAgent_e__Struct
				{
					public uint32 hAgent;
					public uint32 dwAgentIDSize;
					public uint32 dwAgentIDOffset;
					public uint32 dwAgentPINSize;
					public uint32 dwAgentPINOffset;
				}
				[CRepr, Packed(1)]
				public struct _GetAgentActivityList_e__Struct
				{
					public uint32 dwAddressID;
					public LINEAGENTACTIVITYLIST ActivityList;
				}
				[CRepr, Packed(1)]
				public struct _GetAgentStatus_e__Struct
				{
					public uint32 dwAddressID;
					public LINEAGENTSTATUS AgentStatus;
				}
				[CRepr, Packed(1)]
				public struct _SetAgentActivity_e__Struct
				{
					public uint32 dwAddressID;
					public uint32 dwActivityID;
				}
				[CRepr, Packed(1)]
				public struct _SetAgentGroup_e__Struct
				{
					public uint32 dwAddressID;
					public LINEAGENTGROUPLIST GroupList;
				}
				[CRepr, Packed(1)]
				public struct _SetQueueMeasurementPeriod_e__Struct
				{
					public uint32 dwQueueID;
					public uint32 dwMeasurementPeriod;
				}
				[CRepr, Packed(1)]
				public struct _GetAgentSessionList_e__Struct
				{
					public uint32 hAgent;
					public LINEAGENTSESSIONLIST SessionList;
				}
				[CRepr, Packed(1)]
				public struct _SetAgentStateEx_e__Struct
				{
					public uint32 hAgent;
					public uint32 dwAgentState;
					public uint32 dwNextAgentState;
				}
				[CRepr, Packed(1)]
				public struct _AgentSpecific_e__Struct
				{
					public uint32 dwAddressID;
					public uint32 dwAgentExtensionIDIndex;
					public uint32 dwSize;
					public uint8[0] Params;
				}
				[CRepr, Packed(1)]
				public struct _SetAgentState_e__Struct
				{
					public uint32 dwAddressID;
					public uint32 dwAgentState;
					public uint32 dwNextAgentState;
				}
				[CRepr, Packed(1)]
				public struct _SetAgentSessionState_e__Struct
				{
					public uint32 hAgentSession;
					public uint32 dwAgentSessionState;
					public uint32 dwNextAgentSessionState;
				}
				[CRepr, Packed(1)]
				public struct _GetAgentGroupList_e__Struct
				{
					public uint32 dwAddressID;
					public LINEAGENTGROUPLIST GroupList;
				}
				[CRepr]
				public struct _GetGroupList_e__Struct
				{
					public LINEAGENTGROUPLIST GroupList;
				}
				[CRepr, Packed(1)]
				public struct _GetAgentCaps_e__Struct
				{
					public uint32 dwAddressID;
					public LINEAGENTCAPS AgentCaps;
				}
				[CRepr, Packed(1)]
				public struct _GetAgentInfo_e__Struct
				{
					public uint32 hAgent;
					public LINEAGENTINFO AgentInfo;
				}
			}
		}
		[CRepr]
		public struct LINEREQMAKECALL
		{
			public CHAR[80] szDestAddress;
			public CHAR[40] szAppName;
			public CHAR[40] szCalledParty;
			public CHAR[80] szComment;
		}
		[CRepr, Packed(1)]
		public struct linereqmakecallW_tag
		{
			public char16[80] szDestAddress;
			public char16[40] szAppName;
			public char16[40] szCalledParty;
			public char16[80] szComment;
		}
		[CRepr, Packed(1)]
		public struct LINEREQMEDIACALL
		{
			public HWND hWnd;
			public WPARAM wRequestID;
			public CHAR[40] szDeviceClass;
			public uint8[40] ucDeviceID;
			public uint32 dwSize;
			public uint32 dwSecure;
			public CHAR[80] szDestAddress;
			public CHAR[40] szAppName;
			public CHAR[40] szCalledParty;
			public CHAR[80] szComment;
		}
		[CRepr, Packed(1)]
		public struct linereqmediacallW_tag
		{
			public HWND hWnd;
			public WPARAM wRequestID;
			public char16[40] szDeviceClass;
			public uint8[40] ucDeviceID;
			public uint32 dwSize;
			public uint32 dwSecure;
			public char16[80] szDestAddress;
			public char16[40] szAppName;
			public char16[40] szCalledParty;
			public char16[80] szComment;
		}
		[CRepr, Packed(1)]
		public struct LINETERMCAPS
		{
			public uint32 dwTermDev;
			public uint32 dwTermModes;
			public uint32 dwTermSharing;
		}
		[CRepr, Packed(1)]
		public struct LINETRANSLATECAPS
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwNumLocations;
			public uint32 dwLocationListSize;
			public uint32 dwLocationListOffset;
			public uint32 dwCurrentLocationID;
			public uint32 dwNumCards;
			public uint32 dwCardListSize;
			public uint32 dwCardListOffset;
			public uint32 dwCurrentPreferredCardID;
		}
		[CRepr, Packed(1)]
		public struct LINETRANSLATEOUTPUT
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwDialableStringSize;
			public uint32 dwDialableStringOffset;
			public uint32 dwDisplayableStringSize;
			public uint32 dwDisplayableStringOffset;
			public uint32 dwCurrentCountry;
			public uint32 dwDestCountry;
			public uint32 dwTranslateResults;
		}
		[CRepr, Packed(1)]
		public struct PHONEBUTTONINFO
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwButtonMode;
			public uint32 dwButtonFunction;
			public uint32 dwButtonTextSize;
			public uint32 dwButtonTextOffset;
			public uint32 dwDevSpecificSize;
			public uint32 dwDevSpecificOffset;
			public uint32 dwButtonState;
		}
		[CRepr, Packed(1)]
		public struct PHONECAPS
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwProviderInfoSize;
			public uint32 dwProviderInfoOffset;
			public uint32 dwPhoneInfoSize;
			public uint32 dwPhoneInfoOffset;
			public uint32 dwPermanentPhoneID;
			public uint32 dwPhoneNameSize;
			public uint32 dwPhoneNameOffset;
			public uint32 dwStringFormat;
			public uint32 dwPhoneStates;
			public uint32 dwHookSwitchDevs;
			public uint32 dwHandsetHookSwitchModes;
			public uint32 dwSpeakerHookSwitchModes;
			public uint32 dwHeadsetHookSwitchModes;
			public uint32 dwVolumeFlags;
			public uint32 dwGainFlags;
			public uint32 dwDisplayNumRows;
			public uint32 dwDisplayNumColumns;
			public uint32 dwNumRingModes;
			public uint32 dwNumButtonLamps;
			public uint32 dwButtonModesSize;
			public uint32 dwButtonModesOffset;
			public uint32 dwButtonFunctionsSize;
			public uint32 dwButtonFunctionsOffset;
			public uint32 dwLampModesSize;
			public uint32 dwLampModesOffset;
			public uint32 dwNumSetData;
			public uint32 dwSetDataSize;
			public uint32 dwSetDataOffset;
			public uint32 dwNumGetData;
			public uint32 dwGetDataSize;
			public uint32 dwGetDataOffset;
			public uint32 dwDevSpecificSize;
			public uint32 dwDevSpecificOffset;
			public uint32 dwDeviceClassesSize;
			public uint32 dwDeviceClassesOffset;
			public uint32 dwPhoneFeatures;
			public uint32 dwSettableHandsetHookSwitchModes;
			public uint32 dwSettableSpeakerHookSwitchModes;
			public uint32 dwSettableHeadsetHookSwitchModes;
			public uint32 dwMonitoredHandsetHookSwitchModes;
			public uint32 dwMonitoredSpeakerHookSwitchModes;
			public uint32 dwMonitoredHeadsetHookSwitchModes;
			public Guid PermanentPhoneGuid;
		}
		[CRepr, Packed(1)]
		public struct PHONEEXTENSIONID
		{
			public uint32 dwExtensionID0;
			public uint32 dwExtensionID1;
			public uint32 dwExtensionID2;
			public uint32 dwExtensionID3;
		}
		[CRepr, Packed(1)]
		public struct PHONEINITIALIZEEXPARAMS
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwOptions;
			public _Handles_e__Union Handles;
			public uint32 dwCompletionKey;
			
			[CRepr, Union, Packed(1)]
			public struct _Handles_e__Union
			{
				public HANDLE hEvent;
				public HANDLE hCompletionPort;
			}
		}
		[CRepr, Packed(1)]
		public struct PHONEMESSAGE
		{
			public uint32 hDevice;
			public uint32 dwMessageID;
			public uint dwCallbackInstance;
			public uint dwParam1;
			public uint dwParam2;
			public uint dwParam3;
		}
		[CRepr, Packed(1)]
		public struct PHONESTATUS
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwStatusFlags;
			public uint32 dwNumOwners;
			public uint32 dwNumMonitors;
			public uint32 dwRingMode;
			public uint32 dwRingVolume;
			public uint32 dwHandsetHookSwitchMode;
			public uint32 dwHandsetVolume;
			public uint32 dwHandsetGain;
			public uint32 dwSpeakerHookSwitchMode;
			public uint32 dwSpeakerVolume;
			public uint32 dwSpeakerGain;
			public uint32 dwHeadsetHookSwitchMode;
			public uint32 dwHeadsetVolume;
			public uint32 dwHeadsetGain;
			public uint32 dwDisplaySize;
			public uint32 dwDisplayOffset;
			public uint32 dwLampModesSize;
			public uint32 dwLampModesOffset;
			public uint32 dwOwnerNameSize;
			public uint32 dwOwnerNameOffset;
			public uint32 dwDevSpecificSize;
			public uint32 dwDevSpecificOffset;
			public uint32 dwPhoneFeatures;
		}
		[CRepr, Packed(1)]
		public struct VARSTRING
		{
			public uint32 dwTotalSize;
			public uint32 dwNeededSize;
			public uint32 dwUsedSize;
			public uint32 dwStringFormat;
			public uint32 dwStringSize;
			public uint32 dwStringOffset;
		}
		[CRepr]
		public struct HDRVCALL__
		{
			public int32 unused;
		}
		[CRepr]
		public struct HDRVLINE__
		{
			public int32 unused;
		}
		[CRepr]
		public struct HDRVPHONE__
		{
			public int32 unused;
		}
		[CRepr]
		public struct HDRVMSPLINE__
		{
			public int32 unused;
		}
		[CRepr]
		public struct HDRVDIALOGINSTANCE__
		{
			public int32 unused;
		}
		[CRepr]
		public struct HTAPICALL__
		{
			public int32 unused;
		}
		[CRepr]
		public struct HTAPILINE__
		{
			public int32 unused;
		}
		[CRepr]
		public struct HTAPIPHONE__
		{
			public int32 unused;
		}
		[CRepr]
		public struct HPROVIDER__
		{
			public int32 unused;
		}
		[CRepr]
		public struct TUISPICREATEDIALOGINSTANCEPARAMS
		{
			public uint32 dwRequestID;
			public HDRVDIALOGINSTANCE__* hdDlgInst;
			public uint32 htDlgInst;
			public PWSTR lpszUIDLLName;
			public void* lpParams;
			public uint32 dwSize;
		}
		[CRepr]
		public struct TAPI_CUSTOMTONE
		{
			public uint32 dwFrequency;
			public uint32 dwCadenceOn;
			public uint32 dwCadenceOff;
			public uint32 dwVolume;
		}
		[CRepr]
		public struct TAPI_DETECTTONE
		{
			public uint32 dwAppSpecific;
			public uint32 dwDuration;
			public uint32 dwFrequency1;
			public uint32 dwFrequency2;
			public uint32 dwFrequency3;
		}
		[CRepr]
		public struct MSP_EVENT_INFO
		{
			public uint32 dwSize;
			public MSP_EVENT Event;
			public int32* hCall;
			public _Anonymous_e__Union Anonymous;
			
			
			[CRepr, Union]
			public struct _Anonymous_e__Union
			{
				public _MSP_ADDRESS_EVENT_INFO_e__Struct MSP_ADDRESS_EVENT_INFO;
				public _MSP_CALL_EVENT_INFO_e__Struct MSP_CALL_EVENT_INFO;
				public _MSP_TSP_DATA_e__Struct MSP_TSP_DATA;
				public _MSP_PRIVATE_EVENT_INFO_e__Struct MSP_PRIVATE_EVENT_INFO;
				public _MSP_FILE_TERMINAL_EVENT_INFO_e__Struct MSP_FILE_TERMINAL_EVENT_INFO;
				public _MSP_ASR_TERMINAL_EVENT_INFO_e__Struct MSP_ASR_TERMINAL_EVENT_INFO;
				public _MSP_TTS_TERMINAL_EVENT_INFO_e__Struct MSP_TTS_TERMINAL_EVENT_INFO;
				public _MSP_TONE_TERMINAL_EVENT_INFO_e__Struct MSP_TONE_TERMINAL_EVENT_INFO;
				
				[CRepr]
				public struct _MSP_TONE_TERMINAL_EVENT_INFO_e__Struct
				{
					public ITTerminal* pToneTerminal;
					public HRESULT hrErrorCode;
				}
				[CRepr]
				public struct _MSP_ASR_TERMINAL_EVENT_INFO_e__Struct
				{
					public ITTerminal* pASRTerminal;
					public HRESULT hrErrorCode;
				}
				[CRepr]
				public struct _MSP_PRIVATE_EVENT_INFO_e__Struct
				{
					public IDispatch* pEvent;
					public int32 lEventCode;
				}
				[CRepr]
				public struct _MSP_CALL_EVENT_INFO_e__Struct
				{
					public MSP_CALL_EVENT Type;
					public MSP_CALL_EVENT_CAUSE Cause;
					public ITStream* pStream;
					public ITTerminal* pTerminal;
					public HRESULT hrError;
				}
				[CRepr]
				public struct _MSP_FILE_TERMINAL_EVENT_INFO_e__Struct
				{
					public ITTerminal* pParentFileTerminal;
					public ITFileTrack* pFileTrack;
					public TERMINAL_MEDIA_STATE TerminalMediaState;
					public FT_STATE_EVENT_CAUSE ftecEventCause;
					public HRESULT hrErrorCode;
				}
				[CRepr]
				public struct _MSP_ADDRESS_EVENT_INFO_e__Struct
				{
					public MSP_ADDRESS_EVENT Type;
					public ITTerminal* pTerminal;
				}
				[CRepr]
				public struct _MSP_TSP_DATA_e__Struct
				{
					public uint32 dwBufferSize;
					public uint8[0] pBuffer;
				}
				[CRepr]
				public struct _MSP_TTS_TERMINAL_EVENT_INFO_e__Struct
				{
					public ITTerminal* pTTSTerminal;
					public HRESULT hrErrorCode;
				}
			}
		}
		[CRepr]
		public struct STnefProblem
		{
			public uint32 ulComponent;
			public uint32 ulAttribute;
			public uint32 ulPropTag;
			public int32 scode;
		}
		[CRepr]
		public struct STnefProblemArray
		{
			public uint32 cProblem;
			public STnefProblem[0] aProblem;
		}
		[CRepr, Packed(1)]
		public struct _renddata
		{
			public uint16 atyp;
			public uint32 ulPosition;
			public uint16 dxWidth;
			public uint16 dyHeight;
			public uint32 dwFlags;
		}
		[CRepr, Packed(1)]
		public struct _dtr
		{
			public uint16 wYear;
			public uint16 wMonth;
			public uint16 wDay;
			public uint16 wHour;
			public uint16 wMinute;
			public uint16 wSecond;
			public uint16 wDayOfWeek;
		}
		[CRepr]
		public struct _trp
		{
			public uint16 trpid;
			public uint16 cbgrtrp;
			public uint16 cch;
			public uint16 cbRgb;
		}
		[CRepr]
		public struct _ADDR_ALIAS
		{
			public CHAR[41] rgchName;
			public CHAR[11] rgchEName;
			public CHAR[12] rgchSrvr;
			public uint32 dibDetail;
			public uint16 type;
		}
		[CRepr]
		public struct NSID
		{
			public uint32 dwSize;
			public uint8[16] uchType;
			public uint32 xtype;
			public int32 lTime;
			public _address_e__Union address;
			
			[CRepr, Union]
			public struct _address_e__Union
			{
				public _ADDR_ALIAS alias;
				public CHAR[0] rgchInterNet;
			}
		}
		
		// --- COM Class IDs ---
		
		public const Guid CLSID_TAPI = .(0x21d6d48e, 0xa88b, 0x11d0, 0x83, 0xdd, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
		public const Guid CLSID_DispatchMapper = .(0xe9225296, 0xc759, 0x11d1, 0xa0, 0x2b, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
		public const Guid CLSID_RequestMakeCall = .(0xac48ffe0, 0xf8c4, 0x11d1, 0xa0, 0x30, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
		public const Guid CLSID_Rendezvous = .(0xf1029e5b, 0xcb5b, 0x11d0, 0x8d, 0x59, 0x00, 0xc0, 0x4f, 0xd9, 0x1a, 0xc0);
		public const Guid CLSID_McastAddressAllocation = .(0xdf0daef2, 0xa289, 0x11d1, 0x86, 0x97, 0x00, 0x60, 0x08, 0xb0, 0xe5, 0xd2);
		
		// --- COM Interfaces ---
		
		[CRepr]
		public struct ITTAPI : IDispatch
		{
			public const new Guid IID = .(0xb1efc382, 0x9355, 0x11d0, 0x83, 0x5c, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Initialize() mut => VT.Initialize(ref this);
			public HRESULT Shutdown() mut => VT.Shutdown(ref this);
			public HRESULT get_Addresses(out VARIANT pVariant) mut => VT.get_Addresses(ref this, out pVariant);
			public HRESULT EnumerateAddresses(out IEnumAddress* ppEnumAddress) mut => VT.EnumerateAddresses(ref this, out ppEnumAddress);
			public HRESULT RegisterCallNotifications(ref ITAddress pAddress, int16 fMonitor, int16 fOwner, int32 lMediaTypes, int32 lCallbackInstance, out int32 plRegister) mut => VT.RegisterCallNotifications(ref this, ref pAddress, fMonitor, fOwner, lMediaTypes, lCallbackInstance, out plRegister);
			public HRESULT UnregisterNotifications(int32 lRegister) mut => VT.UnregisterNotifications(ref this, lRegister);
			public HRESULT get_CallHubs(out VARIANT pVariant) mut => VT.get_CallHubs(ref this, out pVariant);
			public HRESULT EnumerateCallHubs(out IEnumCallHub* ppEnumCallHub) mut => VT.EnumerateCallHubs(ref this, out ppEnumCallHub);
			public HRESULT SetCallHubTracking(VARIANT pAddresses, int16 bTracking) mut => VT.SetCallHubTracking(ref this, pAddresses, bTracking);
			public HRESULT EnumeratePrivateTAPIObjects(out IEnumUnknown* ppEnumUnknown) mut => VT.EnumeratePrivateTAPIObjects(ref this, out ppEnumUnknown);
			public HRESULT get_PrivateTAPIObjects(out VARIANT pVariant) mut => VT.get_PrivateTAPIObjects(ref this, out pVariant);
			public HRESULT RegisterRequestRecipient(int32 lRegistrationInstance, int32 lRequestMode, int16 fEnable) mut => VT.RegisterRequestRecipient(ref this, lRegistrationInstance, lRequestMode, fEnable);
			public HRESULT SetAssistedTelephonyPriority(BSTR pAppFilename, int16 fPriority) mut => VT.SetAssistedTelephonyPriority(ref this, pAppFilename, fPriority);
			public HRESULT SetApplicationPriority(BSTR pAppFilename, int32 lMediaType, int16 fPriority) mut => VT.SetApplicationPriority(ref this, pAppFilename, lMediaType, fPriority);
			public HRESULT put_EventFilter(int32 lFilterMask) mut => VT.put_EventFilter(ref this, lFilterMask);
			public HRESULT get_EventFilter(out int32 plFilterMask) mut => VT.get_EventFilter(ref this, out plFilterMask);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self) Initialize;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self) Shutdown;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, out VARIANT pVariant) get_Addresses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, out IEnumAddress* ppEnumAddress) EnumerateAddresses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, ref ITAddress pAddress, int16 fMonitor, int16 fOwner, int32 lMediaTypes, int32 lCallbackInstance, out int32 plRegister) RegisterCallNotifications;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, int32 lRegister) UnregisterNotifications;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, out VARIANT pVariant) get_CallHubs;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, out IEnumCallHub* ppEnumCallHub) EnumerateCallHubs;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, VARIANT pAddresses, int16 bTracking) SetCallHubTracking;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, out IEnumUnknown* ppEnumUnknown) EnumeratePrivateTAPIObjects;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, out VARIANT pVariant) get_PrivateTAPIObjects;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, int32 lRegistrationInstance, int32 lRequestMode, int16 fEnable) RegisterRequestRecipient;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, BSTR pAppFilename, int16 fPriority) SetAssistedTelephonyPriority;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, BSTR pAppFilename, int32 lMediaType, int16 fPriority) SetApplicationPriority;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, int32 lFilterMask) put_EventFilter;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI self, out int32 plFilterMask) get_EventFilter;
			}
		}
		[CRepr]
		public struct ITTAPI2 : ITTAPI
		{
			public const new Guid IID = .(0x54fbdc8c, 0xd90f, 0x4dad, 0x96, 0x95, 0xb3, 0x73, 0x09, 0x7f, 0x09, 0x4b);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Phones(out VARIANT pPhones) mut => VT.get_Phones(ref this, out pPhones);
			public HRESULT EnumeratePhones(out IEnumPhone* ppEnumPhone) mut => VT.EnumeratePhones(ref this, out ppEnumPhone);
			public HRESULT CreateEmptyCollectionObject(out ITCollection2* ppCollection) mut => VT.CreateEmptyCollectionObject(ref this, out ppCollection);

			[CRepr]
			public struct VTable : ITTAPI.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI2 self, out VARIANT pPhones) get_Phones;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI2 self, out IEnumPhone* ppEnumPhone) EnumeratePhones;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPI2 self, out ITCollection2* ppCollection) CreateEmptyCollectionObject;
			}
		}
		[CRepr]
		public struct ITMediaSupport : IDispatch
		{
			public const new Guid IID = .(0xb1efc384, 0x9355, 0x11d0, 0x83, 0x5c, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_MediaTypes(out int32 plMediaTypes) mut => VT.get_MediaTypes(ref this, out plMediaTypes);
			public HRESULT QueryMediaType(int32 lMediaType, out int16 pfSupport) mut => VT.QueryMediaType(ref this, lMediaType, out pfSupport);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMediaSupport self, out int32 plMediaTypes) get_MediaTypes;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMediaSupport self, int32 lMediaType, out int16 pfSupport) QueryMediaType;
			}
		}
		[CRepr]
		public struct ITPluggableTerminalClassInfo : IDispatch
		{
			public const new Guid IID = .(0x41757f4a, 0xcf09, 0x4b34, 0xbc, 0x96, 0x0a, 0x79, 0xd2, 0x39, 0x00, 0x76);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Name(out BSTR pName) mut => VT.get_Name(ref this, out pName);
			public HRESULT get_Company(out BSTR pCompany) mut => VT.get_Company(ref this, out pCompany);
			public HRESULT get_Version(out BSTR pVersion) mut => VT.get_Version(ref this, out pVersion);
			public HRESULT get_TerminalClass(out BSTR pTerminalClass) mut => VT.get_TerminalClass(ref this, out pTerminalClass);
			public HRESULT get_CLSID(out BSTR pCLSID) mut => VT.get_CLSID(ref this, out pCLSID);
			public HRESULT get_Direction(out TERMINAL_DIRECTION pDirection) mut => VT.get_Direction(ref this, out pDirection);
			public HRESULT get_MediaTypes(out int32 pMediaTypes) mut => VT.get_MediaTypes(ref this, out pMediaTypes);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPluggableTerminalClassInfo self, out BSTR pName) get_Name;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPluggableTerminalClassInfo self, out BSTR pCompany) get_Company;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPluggableTerminalClassInfo self, out BSTR pVersion) get_Version;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPluggableTerminalClassInfo self, out BSTR pTerminalClass) get_TerminalClass;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPluggableTerminalClassInfo self, out BSTR pCLSID) get_CLSID;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPluggableTerminalClassInfo self, out TERMINAL_DIRECTION pDirection) get_Direction;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPluggableTerminalClassInfo self, out int32 pMediaTypes) get_MediaTypes;
			}
		}
		[CRepr]
		public struct ITPluggableTerminalSuperclassInfo : IDispatch
		{
			public const new Guid IID = .(0x6d54e42c, 0x4625, 0x4359, 0xa6, 0xf7, 0x63, 0x19, 0x99, 0x10, 0x7e, 0x05);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Name(out BSTR pName) mut => VT.get_Name(ref this, out pName);
			public HRESULT get_CLSID(out BSTR pCLSID) mut => VT.get_CLSID(ref this, out pCLSID);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPluggableTerminalSuperclassInfo self, out BSTR pName) get_Name;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPluggableTerminalSuperclassInfo self, out BSTR pCLSID) get_CLSID;
			}
		}
		[CRepr]
		public struct ITTerminalSupport : IDispatch
		{
			public const new Guid IID = .(0xb1efc385, 0x9355, 0x11d0, 0x83, 0x5c, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_StaticTerminals(out VARIANT pVariant) mut => VT.get_StaticTerminals(ref this, out pVariant);
			public HRESULT EnumerateStaticTerminals(out IEnumTerminal* ppTerminalEnumerator) mut => VT.EnumerateStaticTerminals(ref this, out ppTerminalEnumerator);
			public HRESULT get_DynamicTerminalClasses(out VARIANT pVariant) mut => VT.get_DynamicTerminalClasses(ref this, out pVariant);
			public HRESULT EnumerateDynamicTerminalClasses(out IEnumTerminalClass* ppTerminalClassEnumerator) mut => VT.EnumerateDynamicTerminalClasses(ref this, out ppTerminalClassEnumerator);
			public HRESULT CreateTerminal(BSTR pTerminalClass, int32 lMediaType, TERMINAL_DIRECTION Direction, out ITTerminal* ppTerminal) mut => VT.CreateTerminal(ref this, pTerminalClass, lMediaType, Direction, out ppTerminal);
			public HRESULT GetDefaultStaticTerminal(int32 lMediaType, TERMINAL_DIRECTION Direction, out ITTerminal* ppTerminal) mut => VT.GetDefaultStaticTerminal(ref this, lMediaType, Direction, out ppTerminal);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminalSupport self, out VARIANT pVariant) get_StaticTerminals;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminalSupport self, out IEnumTerminal* ppTerminalEnumerator) EnumerateStaticTerminals;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminalSupport self, out VARIANT pVariant) get_DynamicTerminalClasses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminalSupport self, out IEnumTerminalClass* ppTerminalClassEnumerator) EnumerateDynamicTerminalClasses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminalSupport self, BSTR pTerminalClass, int32 lMediaType, TERMINAL_DIRECTION Direction, out ITTerminal* ppTerminal) CreateTerminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminalSupport self, int32 lMediaType, TERMINAL_DIRECTION Direction, out ITTerminal* ppTerminal) GetDefaultStaticTerminal;
			}
		}
		[CRepr]
		public struct ITTerminalSupport2 : ITTerminalSupport
		{
			public const new Guid IID = .(0xf3eb39bc, 0x1b1f, 0x4e99, 0xa0, 0xc0, 0x56, 0x30, 0x5c, 0x4d, 0xd5, 0x91);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_PluggableSuperclasses(out VARIANT pVariant) mut => VT.get_PluggableSuperclasses(ref this, out pVariant);
			public HRESULT EnumeratePluggableSuperclasses(out IEnumPluggableSuperclassInfo* ppSuperclassEnumerator) mut => VT.EnumeratePluggableSuperclasses(ref this, out ppSuperclassEnumerator);
			public HRESULT get_PluggableTerminalClasses(BSTR bstrTerminalSuperclass, int32 lMediaType, out VARIANT pVariant) mut => VT.get_PluggableTerminalClasses(ref this, bstrTerminalSuperclass, lMediaType, out pVariant);
			public HRESULT EnumeratePluggableTerminalClasses(Guid iidTerminalSuperclass, int32 lMediaType, out IEnumPluggableTerminalClassInfo* ppClassEnumerator) mut => VT.EnumeratePluggableTerminalClasses(ref this, iidTerminalSuperclass, lMediaType, out ppClassEnumerator);

			[CRepr]
			public struct VTable : ITTerminalSupport.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminalSupport2 self, out VARIANT pVariant) get_PluggableSuperclasses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminalSupport2 self, out IEnumPluggableSuperclassInfo* ppSuperclassEnumerator) EnumeratePluggableSuperclasses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminalSupport2 self, BSTR bstrTerminalSuperclass, int32 lMediaType, out VARIANT pVariant) get_PluggableTerminalClasses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminalSupport2 self, Guid iidTerminalSuperclass, int32 lMediaType, out IEnumPluggableTerminalClassInfo* ppClassEnumerator) EnumeratePluggableTerminalClasses;
			}
		}
		[CRepr]
		public struct ITAddress : IDispatch
		{
			public const new Guid IID = .(0xb1efc386, 0x9355, 0x11d0, 0x83, 0x5c, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_State(out ADDRESS_STATE pAddressState) mut => VT.get_State(ref this, out pAddressState);
			public HRESULT get_AddressName(out BSTR ppName) mut => VT.get_AddressName(ref this, out ppName);
			public HRESULT get_ServiceProviderName(out BSTR ppName) mut => VT.get_ServiceProviderName(ref this, out ppName);
			public HRESULT get_TAPIObject(out ITTAPI* ppTapiObject) mut => VT.get_TAPIObject(ref this, out ppTapiObject);
			public HRESULT CreateCall(BSTR pDestAddress, int32 lAddressType, int32 lMediaTypes, out ITBasicCallControl* ppCall) mut => VT.CreateCall(ref this, pDestAddress, lAddressType, lMediaTypes, out ppCall);
			public HRESULT get_Calls(out VARIANT pVariant) mut => VT.get_Calls(ref this, out pVariant);
			public HRESULT EnumerateCalls(out IEnumCall* ppCallEnum) mut => VT.EnumerateCalls(ref this, out ppCallEnum);
			public HRESULT get_DialableAddress(out BSTR pDialableAddress) mut => VT.get_DialableAddress(ref this, out pDialableAddress);
			public HRESULT CreateForwardInfoObject(out ITForwardInformation* ppForwardInfo) mut => VT.CreateForwardInfoObject(ref this, out ppForwardInfo);
			public HRESULT Forward(ref ITForwardInformation pForwardInfo, ref ITBasicCallControl pCall) mut => VT.Forward(ref this, ref pForwardInfo, ref pCall);
			public HRESULT get_CurrentForwardInfo(out ITForwardInformation* ppForwardInfo) mut => VT.get_CurrentForwardInfo(ref this, out ppForwardInfo);
			public HRESULT put_MessageWaiting(int16 fMessageWaiting) mut => VT.put_MessageWaiting(ref this, fMessageWaiting);
			public HRESULT get_MessageWaiting(out int16 pfMessageWaiting) mut => VT.get_MessageWaiting(ref this, out pfMessageWaiting);
			public HRESULT put_DoNotDisturb(int16 fDoNotDisturb) mut => VT.put_DoNotDisturb(ref this, fDoNotDisturb);
			public HRESULT get_DoNotDisturb(out int16 pfDoNotDisturb) mut => VT.get_DoNotDisturb(ref this, out pfDoNotDisturb);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, out ADDRESS_STATE pAddressState) get_State;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, out BSTR ppName) get_AddressName;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, out BSTR ppName) get_ServiceProviderName;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, out ITTAPI* ppTapiObject) get_TAPIObject;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, BSTR pDestAddress, int32 lAddressType, int32 lMediaTypes, out ITBasicCallControl* ppCall) CreateCall;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, out VARIANT pVariant) get_Calls;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, out IEnumCall* ppCallEnum) EnumerateCalls;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, out BSTR pDialableAddress) get_DialableAddress;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, out ITForwardInformation* ppForwardInfo) CreateForwardInfoObject;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, ref ITForwardInformation pForwardInfo, ref ITBasicCallControl pCall) Forward;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, out ITForwardInformation* ppForwardInfo) get_CurrentForwardInfo;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, int16 fMessageWaiting) put_MessageWaiting;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, out int16 pfMessageWaiting) get_MessageWaiting;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, int16 fDoNotDisturb) put_DoNotDisturb;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress self, out int16 pfDoNotDisturb) get_DoNotDisturb;
			}
		}
		[CRepr]
		public struct ITAddress2 : ITAddress
		{
			public const new Guid IID = .(0xb0ae5d9b, 0xbe51, 0x46c9, 0xb0, 0xf7, 0xdf, 0xa8, 0xa2, 0x2a, 0x8b, 0xc4);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Phones(out VARIANT pPhones) mut => VT.get_Phones(ref this, out pPhones);
			public HRESULT EnumeratePhones(out IEnumPhone* ppEnumPhone) mut => VT.EnumeratePhones(ref this, out ppEnumPhone);
			public HRESULT GetPhoneFromTerminal(ref ITTerminal pTerminal, out ITPhone* ppPhone) mut => VT.GetPhoneFromTerminal(ref this, ref pTerminal, out ppPhone);
			public HRESULT get_PreferredPhones(out VARIANT pPhones) mut => VT.get_PreferredPhones(ref this, out pPhones);
			public HRESULT EnumeratePreferredPhones(out IEnumPhone* ppEnumPhone) mut => VT.EnumeratePreferredPhones(ref this, out ppEnumPhone);
			public HRESULT get_EventFilter(TAPI_EVENT TapiEvent, int32 lSubEvent, out int16 pEnable) mut => VT.get_EventFilter(ref this, TapiEvent, lSubEvent, out pEnable);
			public HRESULT put_EventFilter(TAPI_EVENT TapiEvent, int32 lSubEvent, int16 bEnable) mut => VT.put_EventFilter(ref this, TapiEvent, lSubEvent, bEnable);
			public HRESULT DeviceSpecific(ref ITCallInfo pCall, ref uint8 pParams, uint32 dwSize) mut => VT.DeviceSpecific(ref this, ref pCall, ref pParams, dwSize);
			public HRESULT DeviceSpecificVariant(ref ITCallInfo pCall, VARIANT varDevSpecificByteArray) mut => VT.DeviceSpecificVariant(ref this, ref pCall, varDevSpecificByteArray);
			public HRESULT NegotiateExtVersion(int32 lLowVersion, int32 lHighVersion, out int32 plExtVersion) mut => VT.NegotiateExtVersion(ref this, lLowVersion, lHighVersion, out plExtVersion);

			[CRepr]
			public struct VTable : ITAddress.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress2 self, out VARIANT pPhones) get_Phones;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress2 self, out IEnumPhone* ppEnumPhone) EnumeratePhones;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress2 self, ref ITTerminal pTerminal, out ITPhone* ppPhone) GetPhoneFromTerminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress2 self, out VARIANT pPhones) get_PreferredPhones;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress2 self, out IEnumPhone* ppEnumPhone) EnumeratePreferredPhones;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress2 self, TAPI_EVENT TapiEvent, int32 lSubEvent, out int16 pEnable) get_EventFilter;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress2 self, TAPI_EVENT TapiEvent, int32 lSubEvent, int16 bEnable) put_EventFilter;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress2 self, ref ITCallInfo pCall, ref uint8 pParams, uint32 dwSize) DeviceSpecific;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress2 self, ref ITCallInfo pCall, VARIANT varDevSpecificByteArray) DeviceSpecificVariant;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddress2 self, int32 lLowVersion, int32 lHighVersion, out int32 plExtVersion) NegotiateExtVersion;
			}
		}
		[CRepr]
		public struct ITAddressCapabilities : IDispatch
		{
			public const new Guid IID = .(0x8df232f5, 0x821b, 0x11d1, 0xbb, 0x5c, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_AddressCapability(ADDRESS_CAPABILITY AddressCap, out int32 plCapability) mut => VT.get_AddressCapability(ref this, AddressCap, out plCapability);
			public HRESULT get_AddressCapabilityString(ADDRESS_CAPABILITY_STRING AddressCapString, out BSTR ppCapabilityString) mut => VT.get_AddressCapabilityString(ref this, AddressCapString, out ppCapabilityString);
			public HRESULT get_CallTreatments(out VARIANT pVariant) mut => VT.get_CallTreatments(ref this, out pVariant);
			public HRESULT EnumerateCallTreatments(out IEnumBstr* ppEnumCallTreatment) mut => VT.EnumerateCallTreatments(ref this, out ppEnumCallTreatment);
			public HRESULT get_CompletionMessages(out VARIANT pVariant) mut => VT.get_CompletionMessages(ref this, out pVariant);
			public HRESULT EnumerateCompletionMessages(out IEnumBstr* ppEnumCompletionMessage) mut => VT.EnumerateCompletionMessages(ref this, out ppEnumCompletionMessage);
			public HRESULT get_DeviceClasses(out VARIANT pVariant) mut => VT.get_DeviceClasses(ref this, out pVariant);
			public HRESULT EnumerateDeviceClasses(out IEnumBstr* ppEnumDeviceClass) mut => VT.EnumerateDeviceClasses(ref this, out ppEnumDeviceClass);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressCapabilities self, ADDRESS_CAPABILITY AddressCap, out int32 plCapability) get_AddressCapability;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressCapabilities self, ADDRESS_CAPABILITY_STRING AddressCapString, out BSTR ppCapabilityString) get_AddressCapabilityString;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressCapabilities self, out VARIANT pVariant) get_CallTreatments;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressCapabilities self, out IEnumBstr* ppEnumCallTreatment) EnumerateCallTreatments;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressCapabilities self, out VARIANT pVariant) get_CompletionMessages;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressCapabilities self, out IEnumBstr* ppEnumCompletionMessage) EnumerateCompletionMessages;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressCapabilities self, out VARIANT pVariant) get_DeviceClasses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressCapabilities self, out IEnumBstr* ppEnumDeviceClass) EnumerateDeviceClasses;
			}
		}
		[CRepr]
		public struct ITPhone : IDispatch
		{
			public const new Guid IID = .(0x09d48db4, 0x10cc, 0x4388, 0x9d, 0xe7, 0xa8, 0x46, 0x56, 0x18, 0x97, 0x5a);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Open(PHONE_PRIVILEGE Privilege) mut => VT.Open(ref this, Privilege);
			public HRESULT Close() mut => VT.Close(ref this);
			public HRESULT get_Addresses(out VARIANT pAddresses) mut => VT.get_Addresses(ref this, out pAddresses);
			public HRESULT EnumerateAddresses(out IEnumAddress* ppEnumAddress) mut => VT.EnumerateAddresses(ref this, out ppEnumAddress);
			public HRESULT get_PhoneCapsLong(PHONECAPS_LONG pclCap, out int32 plCapability) mut => VT.get_PhoneCapsLong(ref this, pclCap, out plCapability);
			public HRESULT get_PhoneCapsString(PHONECAPS_STRING pcsCap, out BSTR ppCapability) mut => VT.get_PhoneCapsString(ref this, pcsCap, out ppCapability);
			public HRESULT get_Terminals(ref ITAddress pAddress, out VARIANT pTerminals) mut => VT.get_Terminals(ref this, ref pAddress, out pTerminals);
			public HRESULT EnumerateTerminals(ref ITAddress pAddress, out IEnumTerminal* ppEnumTerminal) mut => VT.EnumerateTerminals(ref this, ref pAddress, out ppEnumTerminal);
			public HRESULT get_ButtonMode(int32 lButtonID, out PHONE_BUTTON_MODE pButtonMode) mut => VT.get_ButtonMode(ref this, lButtonID, out pButtonMode);
			public HRESULT put_ButtonMode(int32 lButtonID, PHONE_BUTTON_MODE ButtonMode) mut => VT.put_ButtonMode(ref this, lButtonID, ButtonMode);
			public HRESULT get_ButtonFunction(int32 lButtonID, out PHONE_BUTTON_FUNCTION pButtonFunction) mut => VT.get_ButtonFunction(ref this, lButtonID, out pButtonFunction);
			public HRESULT put_ButtonFunction(int32 lButtonID, PHONE_BUTTON_FUNCTION ButtonFunction) mut => VT.put_ButtonFunction(ref this, lButtonID, ButtonFunction);
			public HRESULT get_ButtonText(int32 lButtonID, out BSTR ppButtonText) mut => VT.get_ButtonText(ref this, lButtonID, out ppButtonText);
			public HRESULT put_ButtonText(int32 lButtonID, BSTR bstrButtonText) mut => VT.put_ButtonText(ref this, lButtonID, bstrButtonText);
			public HRESULT get_ButtonState(int32 lButtonID, out PHONE_BUTTON_STATE pButtonState) mut => VT.get_ButtonState(ref this, lButtonID, out pButtonState);
			public HRESULT get_HookSwitchState(PHONE_HOOK_SWITCH_DEVICE HookSwitchDevice, out PHONE_HOOK_SWITCH_STATE pHookSwitchState) mut => VT.get_HookSwitchState(ref this, HookSwitchDevice, out pHookSwitchState);
			public HRESULT put_HookSwitchState(PHONE_HOOK_SWITCH_DEVICE HookSwitchDevice, PHONE_HOOK_SWITCH_STATE HookSwitchState) mut => VT.put_HookSwitchState(ref this, HookSwitchDevice, HookSwitchState);
			public HRESULT put_RingMode(int32 lRingMode) mut => VT.put_RingMode(ref this, lRingMode);
			public HRESULT get_RingMode(out int32 plRingMode) mut => VT.get_RingMode(ref this, out plRingMode);
			public HRESULT put_RingVolume(int32 lRingVolume) mut => VT.put_RingVolume(ref this, lRingVolume);
			public HRESULT get_RingVolume(out int32 plRingVolume) mut => VT.get_RingVolume(ref this, out plRingVolume);
			public HRESULT get_Privilege(out PHONE_PRIVILEGE pPrivilege) mut => VT.get_Privilege(ref this, out pPrivilege);
			public HRESULT GetPhoneCapsBuffer(PHONECAPS_BUFFER pcbCaps, out uint32 pdwSize, out uint8* ppPhoneCapsBuffer) mut => VT.GetPhoneCapsBuffer(ref this, pcbCaps, out pdwSize, out ppPhoneCapsBuffer);
			public HRESULT get_PhoneCapsBuffer(PHONECAPS_BUFFER pcbCaps, out VARIANT pVarBuffer) mut => VT.get_PhoneCapsBuffer(ref this, pcbCaps, out pVarBuffer);
			public HRESULT get_LampMode(int32 lLampID, out PHONE_LAMP_MODE pLampMode) mut => VT.get_LampMode(ref this, lLampID, out pLampMode);
			public HRESULT put_LampMode(int32 lLampID, PHONE_LAMP_MODE LampMode) mut => VT.put_LampMode(ref this, lLampID, LampMode);
			public HRESULT get_Display(out BSTR pbstrDisplay) mut => VT.get_Display(ref this, out pbstrDisplay);
			public HRESULT SetDisplay(int32 lRow, int32 lColumn, BSTR bstrDisplay) mut => VT.SetDisplay(ref this, lRow, lColumn, bstrDisplay);
			public HRESULT get_PreferredAddresses(out VARIANT pAddresses) mut => VT.get_PreferredAddresses(ref this, out pAddresses);
			public HRESULT EnumeratePreferredAddresses(out IEnumAddress* ppEnumAddress) mut => VT.EnumeratePreferredAddresses(ref this, out ppEnumAddress);
			public HRESULT DeviceSpecific(ref uint8 pParams, uint32 dwSize) mut => VT.DeviceSpecific(ref this, ref pParams, dwSize);
			public HRESULT DeviceSpecificVariant(VARIANT varDevSpecificByteArray) mut => VT.DeviceSpecificVariant(ref this, varDevSpecificByteArray);
			public HRESULT NegotiateExtVersion(int32 lLowVersion, int32 lHighVersion, out int32 plExtVersion) mut => VT.NegotiateExtVersion(ref this, lLowVersion, lHighVersion, out plExtVersion);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, PHONE_PRIVILEGE Privilege) Open;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self) Close;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, out VARIANT pAddresses) get_Addresses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, out IEnumAddress* ppEnumAddress) EnumerateAddresses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, PHONECAPS_LONG pclCap, out int32 plCapability) get_PhoneCapsLong;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, PHONECAPS_STRING pcsCap, out BSTR ppCapability) get_PhoneCapsString;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, ref ITAddress pAddress, out VARIANT pTerminals) get_Terminals;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, ref ITAddress pAddress, out IEnumTerminal* ppEnumTerminal) EnumerateTerminals;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, int32 lButtonID, out PHONE_BUTTON_MODE pButtonMode) get_ButtonMode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, int32 lButtonID, PHONE_BUTTON_MODE ButtonMode) put_ButtonMode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, int32 lButtonID, out PHONE_BUTTON_FUNCTION pButtonFunction) get_ButtonFunction;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, int32 lButtonID, PHONE_BUTTON_FUNCTION ButtonFunction) put_ButtonFunction;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, int32 lButtonID, out BSTR ppButtonText) get_ButtonText;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, int32 lButtonID, BSTR bstrButtonText) put_ButtonText;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, int32 lButtonID, out PHONE_BUTTON_STATE pButtonState) get_ButtonState;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, PHONE_HOOK_SWITCH_DEVICE HookSwitchDevice, out PHONE_HOOK_SWITCH_STATE pHookSwitchState) get_HookSwitchState;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, PHONE_HOOK_SWITCH_DEVICE HookSwitchDevice, PHONE_HOOK_SWITCH_STATE HookSwitchState) put_HookSwitchState;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, int32 lRingMode) put_RingMode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, out int32 plRingMode) get_RingMode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, int32 lRingVolume) put_RingVolume;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, out int32 plRingVolume) get_RingVolume;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, out PHONE_PRIVILEGE pPrivilege) get_Privilege;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, PHONECAPS_BUFFER pcbCaps, out uint32 pdwSize, out uint8* ppPhoneCapsBuffer) GetPhoneCapsBuffer;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, PHONECAPS_BUFFER pcbCaps, out VARIANT pVarBuffer) get_PhoneCapsBuffer;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, int32 lLampID, out PHONE_LAMP_MODE pLampMode) get_LampMode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, int32 lLampID, PHONE_LAMP_MODE LampMode) put_LampMode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, out BSTR pbstrDisplay) get_Display;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, int32 lRow, int32 lColumn, BSTR bstrDisplay) SetDisplay;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, out VARIANT pAddresses) get_PreferredAddresses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, out IEnumAddress* ppEnumAddress) EnumeratePreferredAddresses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, ref uint8 pParams, uint32 dwSize) DeviceSpecific;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, VARIANT varDevSpecificByteArray) DeviceSpecificVariant;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhone self, int32 lLowVersion, int32 lHighVersion, out int32 plExtVersion) NegotiateExtVersion;
			}
		}
		[CRepr]
		public struct ITAutomatedPhoneControl : IDispatch
		{
			public const new Guid IID = .(0x1ee1af0e, 0x6159, 0x4a61, 0xb7, 0x9b, 0x6a, 0x4b, 0xa3, 0xfc, 0x9d, 0xfc);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT StartTone(PHONE_TONE Tone, int32 lDuration) mut => VT.StartTone(ref this, Tone, lDuration);
			public HRESULT StopTone() mut => VT.StopTone(ref this);
			public HRESULT get_Tone(out PHONE_TONE pTone) mut => VT.get_Tone(ref this, out pTone);
			public HRESULT StartRinger(int32 lRingMode, int32 lDuration) mut => VT.StartRinger(ref this, lRingMode, lDuration);
			public HRESULT StopRinger() mut => VT.StopRinger(ref this);
			public HRESULT get_Ringer(out int16 pfRinging) mut => VT.get_Ringer(ref this, out pfRinging);
			public HRESULT put_PhoneHandlingEnabled(int16 fEnabled) mut => VT.put_PhoneHandlingEnabled(ref this, fEnabled);
			public HRESULT get_PhoneHandlingEnabled(out int16 pfEnabled) mut => VT.get_PhoneHandlingEnabled(ref this, out pfEnabled);
			public HRESULT put_AutoEndOfNumberTimeout(int32 lTimeout) mut => VT.put_AutoEndOfNumberTimeout(ref this, lTimeout);
			public HRESULT get_AutoEndOfNumberTimeout(out int32 plTimeout) mut => VT.get_AutoEndOfNumberTimeout(ref this, out plTimeout);
			public HRESULT put_AutoDialtone(int16 fEnabled) mut => VT.put_AutoDialtone(ref this, fEnabled);
			public HRESULT get_AutoDialtone(out int16 pfEnabled) mut => VT.get_AutoDialtone(ref this, out pfEnabled);
			public HRESULT put_AutoStopTonesOnOnHook(int16 fEnabled) mut => VT.put_AutoStopTonesOnOnHook(ref this, fEnabled);
			public HRESULT get_AutoStopTonesOnOnHook(out int16 pfEnabled) mut => VT.get_AutoStopTonesOnOnHook(ref this, out pfEnabled);
			public HRESULT put_AutoStopRingOnOffHook(int16 fEnabled) mut => VT.put_AutoStopRingOnOffHook(ref this, fEnabled);
			public HRESULT get_AutoStopRingOnOffHook(out int16 pfEnabled) mut => VT.get_AutoStopRingOnOffHook(ref this, out pfEnabled);
			public HRESULT put_AutoKeypadTones(int16 fEnabled) mut => VT.put_AutoKeypadTones(ref this, fEnabled);
			public HRESULT get_AutoKeypadTones(out int16 pfEnabled) mut => VT.get_AutoKeypadTones(ref this, out pfEnabled);
			public HRESULT put_AutoKeypadTonesMinimumDuration(int32 lDuration) mut => VT.put_AutoKeypadTonesMinimumDuration(ref this, lDuration);
			public HRESULT get_AutoKeypadTonesMinimumDuration(out int32 plDuration) mut => VT.get_AutoKeypadTonesMinimumDuration(ref this, out plDuration);
			public HRESULT put_AutoVolumeControl(int16 fEnabled) mut => VT.put_AutoVolumeControl(ref this, fEnabled);
			public HRESULT get_AutoVolumeControl(out int16 fEnabled) mut => VT.get_AutoVolumeControl(ref this, out fEnabled);
			public HRESULT put_AutoVolumeControlStep(int32 lStepSize) mut => VT.put_AutoVolumeControlStep(ref this, lStepSize);
			public HRESULT get_AutoVolumeControlStep(out int32 plStepSize) mut => VT.get_AutoVolumeControlStep(ref this, out plStepSize);
			public HRESULT put_AutoVolumeControlRepeatDelay(int32 lDelay) mut => VT.put_AutoVolumeControlRepeatDelay(ref this, lDelay);
			public HRESULT get_AutoVolumeControlRepeatDelay(out int32 plDelay) mut => VT.get_AutoVolumeControlRepeatDelay(ref this, out plDelay);
			public HRESULT put_AutoVolumeControlRepeatPeriod(int32 lPeriod) mut => VT.put_AutoVolumeControlRepeatPeriod(ref this, lPeriod);
			public HRESULT get_AutoVolumeControlRepeatPeriod(out int32 plPeriod) mut => VT.get_AutoVolumeControlRepeatPeriod(ref this, out plPeriod);
			public HRESULT SelectCall(ref ITCallInfo pCall, int16 fSelectDefaultTerminals) mut => VT.SelectCall(ref this, ref pCall, fSelectDefaultTerminals);
			public HRESULT UnselectCall(ref ITCallInfo pCall) mut => VT.UnselectCall(ref this, ref pCall);
			public HRESULT EnumerateSelectedCalls(out IEnumCall* ppCallEnum) mut => VT.EnumerateSelectedCalls(ref this, out ppCallEnum);
			public HRESULT get_SelectedCalls(out VARIANT pVariant) mut => VT.get_SelectedCalls(ref this, out pVariant);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, PHONE_TONE Tone, int32 lDuration) StartTone;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self) StopTone;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out PHONE_TONE pTone) get_Tone;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, int32 lRingMode, int32 lDuration) StartRinger;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self) StopRinger;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out int16 pfRinging) get_Ringer;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, int16 fEnabled) put_PhoneHandlingEnabled;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out int16 pfEnabled) get_PhoneHandlingEnabled;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, int32 lTimeout) put_AutoEndOfNumberTimeout;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out int32 plTimeout) get_AutoEndOfNumberTimeout;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, int16 fEnabled) put_AutoDialtone;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out int16 pfEnabled) get_AutoDialtone;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, int16 fEnabled) put_AutoStopTonesOnOnHook;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out int16 pfEnabled) get_AutoStopTonesOnOnHook;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, int16 fEnabled) put_AutoStopRingOnOffHook;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out int16 pfEnabled) get_AutoStopRingOnOffHook;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, int16 fEnabled) put_AutoKeypadTones;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out int16 pfEnabled) get_AutoKeypadTones;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, int32 lDuration) put_AutoKeypadTonesMinimumDuration;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out int32 plDuration) get_AutoKeypadTonesMinimumDuration;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, int16 fEnabled) put_AutoVolumeControl;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out int16 fEnabled) get_AutoVolumeControl;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, int32 lStepSize) put_AutoVolumeControlStep;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out int32 plStepSize) get_AutoVolumeControlStep;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, int32 lDelay) put_AutoVolumeControlRepeatDelay;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out int32 plDelay) get_AutoVolumeControlRepeatDelay;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, int32 lPeriod) put_AutoVolumeControlRepeatPeriod;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out int32 plPeriod) get_AutoVolumeControlRepeatPeriod;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, ref ITCallInfo pCall, int16 fSelectDefaultTerminals) SelectCall;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, ref ITCallInfo pCall) UnselectCall;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out IEnumCall* ppCallEnum) EnumerateSelectedCalls;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAutomatedPhoneControl self, out VARIANT pVariant) get_SelectedCalls;
			}
		}
		[CRepr]
		public struct ITBasicCallControl : IDispatch
		{
			public const new Guid IID = .(0xb1efc389, 0x9355, 0x11d0, 0x83, 0x5c, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Connect(int16 fSync) mut => VT.Connect(ref this, fSync);
			public HRESULT Answer() mut => VT.Answer(ref this);
			public HRESULT Disconnect(DISCONNECT_CODE code) mut => VT.Disconnect(ref this, code);
			public HRESULT Hold(int16 fHold) mut => VT.Hold(ref this, fHold);
			public HRESULT HandoffDirect(BSTR pApplicationName) mut => VT.HandoffDirect(ref this, pApplicationName);
			public HRESULT HandoffIndirect(int32 lMediaType) mut => VT.HandoffIndirect(ref this, lMediaType);
			public HRESULT Conference(ref ITBasicCallControl pCall, int16 fSync) mut => VT.Conference(ref this, ref pCall, fSync);
			public HRESULT Transfer(ref ITBasicCallControl pCall, int16 fSync) mut => VT.Transfer(ref this, ref pCall, fSync);
			public HRESULT BlindTransfer(BSTR pDestAddress) mut => VT.BlindTransfer(ref this, pDestAddress);
			public HRESULT SwapHold(ref ITBasicCallControl pCall) mut => VT.SwapHold(ref this, ref pCall);
			public HRESULT ParkDirect(BSTR pParkAddress) mut => VT.ParkDirect(ref this, pParkAddress);
			public HRESULT ParkIndirect(out BSTR ppNonDirAddress) mut => VT.ParkIndirect(ref this, out ppNonDirAddress);
			public HRESULT Unpark() mut => VT.Unpark(ref this);
			public HRESULT SetQOS(int32 lMediaType, QOS_SERVICE_LEVEL ServiceLevel) mut => VT.SetQOS(ref this, lMediaType, ServiceLevel);
			public HRESULT Pickup(BSTR pGroupID) mut => VT.Pickup(ref this, pGroupID);
			public HRESULT Dial(BSTR pDestAddress) mut => VT.Dial(ref this, pDestAddress);
			public HRESULT Finish(FINISH_MODE finishMode) mut => VT.Finish(ref this, finishMode);
			public HRESULT RemoveFromConference() mut => VT.RemoveFromConference(ref this);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, int16 fSync) Connect;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self) Answer;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, DISCONNECT_CODE code) Disconnect;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, int16 fHold) Hold;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, BSTR pApplicationName) HandoffDirect;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, int32 lMediaType) HandoffIndirect;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, ref ITBasicCallControl pCall, int16 fSync) Conference;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, ref ITBasicCallControl pCall, int16 fSync) Transfer;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, BSTR pDestAddress) BlindTransfer;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, ref ITBasicCallControl pCall) SwapHold;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, BSTR pParkAddress) ParkDirect;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, out BSTR ppNonDirAddress) ParkIndirect;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self) Unpark;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, int32 lMediaType, QOS_SERVICE_LEVEL ServiceLevel) SetQOS;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, BSTR pGroupID) Pickup;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, BSTR pDestAddress) Dial;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self, FINISH_MODE finishMode) Finish;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl self) RemoveFromConference;
			}
		}
		[CRepr]
		public struct ITCallInfo : IDispatch
		{
			public const new Guid IID = .(0x350f85d1, 0x1227, 0x11d3, 0x83, 0xd4, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Address(out ITAddress* ppAddress) mut => VT.get_Address(ref this, out ppAddress);
			public HRESULT get_CallState(out CALL_STATE pCallState) mut => VT.get_CallState(ref this, out pCallState);
			public HRESULT get_Privilege(out CALL_PRIVILEGE pPrivilege) mut => VT.get_Privilege(ref this, out pPrivilege);
			public HRESULT get_CallHub(out ITCallHub* ppCallHub) mut => VT.get_CallHub(ref this, out ppCallHub);
			public HRESULT get_CallInfoLong(CALLINFO_LONG CallInfoLong, out int32 plCallInfoLongVal) mut => VT.get_CallInfoLong(ref this, CallInfoLong, out plCallInfoLongVal);
			public HRESULT put_CallInfoLong(CALLINFO_LONG CallInfoLong, int32 lCallInfoLongVal) mut => VT.put_CallInfoLong(ref this, CallInfoLong, lCallInfoLongVal);
			public HRESULT get_CallInfoString(CALLINFO_STRING CallInfoString, out BSTR ppCallInfoString) mut => VT.get_CallInfoString(ref this, CallInfoString, out ppCallInfoString);
			public HRESULT put_CallInfoString(CALLINFO_STRING CallInfoString, BSTR pCallInfoString) mut => VT.put_CallInfoString(ref this, CallInfoString, pCallInfoString);
			public HRESULT get_CallInfoBuffer(CALLINFO_BUFFER CallInfoBuffer, out VARIANT ppCallInfoBuffer) mut => VT.get_CallInfoBuffer(ref this, CallInfoBuffer, out ppCallInfoBuffer);
			public HRESULT put_CallInfoBuffer(CALLINFO_BUFFER CallInfoBuffer, VARIANT pCallInfoBuffer) mut => VT.put_CallInfoBuffer(ref this, CallInfoBuffer, pCallInfoBuffer);
			public HRESULT GetCallInfoBuffer(CALLINFO_BUFFER CallInfoBuffer, out uint32 pdwSize, uint8** ppCallInfoBuffer) mut => VT.GetCallInfoBuffer(ref this, CallInfoBuffer, out pdwSize, ppCallInfoBuffer);
			public HRESULT SetCallInfoBuffer(CALLINFO_BUFFER CallInfoBuffer, uint32 dwSize, uint8* pCallInfoBuffer) mut => VT.SetCallInfoBuffer(ref this, CallInfoBuffer, dwSize, pCallInfoBuffer);
			public HRESULT ReleaseUserUserInfo() mut => VT.ReleaseUserUserInfo(ref this);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo self, out ITAddress* ppAddress) get_Address;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo self, out CALL_STATE pCallState) get_CallState;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo self, out CALL_PRIVILEGE pPrivilege) get_Privilege;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo self, out ITCallHub* ppCallHub) get_CallHub;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo self, CALLINFO_LONG CallInfoLong, out int32 plCallInfoLongVal) get_CallInfoLong;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo self, CALLINFO_LONG CallInfoLong, int32 lCallInfoLongVal) put_CallInfoLong;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo self, CALLINFO_STRING CallInfoString, out BSTR ppCallInfoString) get_CallInfoString;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo self, CALLINFO_STRING CallInfoString, BSTR pCallInfoString) put_CallInfoString;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo self, CALLINFO_BUFFER CallInfoBuffer, out VARIANT ppCallInfoBuffer) get_CallInfoBuffer;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo self, CALLINFO_BUFFER CallInfoBuffer, VARIANT pCallInfoBuffer) put_CallInfoBuffer;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo self, CALLINFO_BUFFER CallInfoBuffer, out uint32 pdwSize, uint8** ppCallInfoBuffer) GetCallInfoBuffer;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo self, CALLINFO_BUFFER CallInfoBuffer, uint32 dwSize, uint8* pCallInfoBuffer) SetCallInfoBuffer;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo self) ReleaseUserUserInfo;
			}
		}
		[CRepr]
		public struct ITCallInfo2 : ITCallInfo
		{
			public const new Guid IID = .(0x94d70ca6, 0x7ab0, 0x4daa, 0x81, 0xca, 0xb8, 0xf8, 0x64, 0x3f, 0xae, 0xc1);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_EventFilter(TAPI_EVENT TapiEvent, int32 lSubEvent, out int16 pEnable) mut => VT.get_EventFilter(ref this, TapiEvent, lSubEvent, out pEnable);
			public HRESULT put_EventFilter(TAPI_EVENT TapiEvent, int32 lSubEvent, int16 bEnable) mut => VT.put_EventFilter(ref this, TapiEvent, lSubEvent, bEnable);

			[CRepr]
			public struct VTable : ITCallInfo.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo2 self, TAPI_EVENT TapiEvent, int32 lSubEvent, out int16 pEnable) get_EventFilter;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfo2 self, TAPI_EVENT TapiEvent, int32 lSubEvent, int16 bEnable) put_EventFilter;
			}
		}
		[CRepr]
		public struct ITTerminal : IDispatch
		{
			public const new Guid IID = .(0xb1efc38a, 0x9355, 0x11d0, 0x83, 0x5c, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Name(out BSTR ppName) mut => VT.get_Name(ref this, out ppName);
			public HRESULT get_State(out TERMINAL_STATE pTerminalState) mut => VT.get_State(ref this, out pTerminalState);
			public HRESULT get_TerminalType(out TERMINAL_TYPE pType) mut => VT.get_TerminalType(ref this, out pType);
			public HRESULT get_TerminalClass(out BSTR ppTerminalClass) mut => VT.get_TerminalClass(ref this, out ppTerminalClass);
			public HRESULT get_MediaType(out int32 plMediaType) mut => VT.get_MediaType(ref this, out plMediaType);
			public HRESULT get_Direction(out TERMINAL_DIRECTION pDirection) mut => VT.get_Direction(ref this, out pDirection);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminal self, out BSTR ppName) get_Name;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminal self, out TERMINAL_STATE pTerminalState) get_State;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminal self, out TERMINAL_TYPE pType) get_TerminalType;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminal self, out BSTR ppTerminalClass) get_TerminalClass;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminal self, out int32 plMediaType) get_MediaType;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTerminal self, out TERMINAL_DIRECTION pDirection) get_Direction;
			}
		}
		[CRepr]
		public struct ITMultiTrackTerminal : IDispatch
		{
			public const new Guid IID = .(0xfe040091, 0xade8, 0x4072, 0x95, 0xc9, 0xbf, 0x7d, 0xe8, 0xc5, 0x4b, 0x44);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_TrackTerminals(out VARIANT pVariant) mut => VT.get_TrackTerminals(ref this, out pVariant);
			public HRESULT EnumerateTrackTerminals(out IEnumTerminal* ppEnumTerminal) mut => VT.EnumerateTrackTerminals(ref this, out ppEnumTerminal);
			public HRESULT CreateTrackTerminal(int32 MediaType, TERMINAL_DIRECTION TerminalDirection, out ITTerminal* ppTerminal) mut => VT.CreateTrackTerminal(ref this, MediaType, TerminalDirection, out ppTerminal);
			public HRESULT get_MediaTypesInUse(out int32 plMediaTypesInUse) mut => VT.get_MediaTypesInUse(ref this, out plMediaTypesInUse);
			public HRESULT get_DirectionsInUse(out TERMINAL_DIRECTION plDirectionsInUsed) mut => VT.get_DirectionsInUse(ref this, out plDirectionsInUsed);
			public HRESULT RemoveTrackTerminal(ref ITTerminal pTrackTerminalToRemove) mut => VT.RemoveTrackTerminal(ref this, ref pTrackTerminalToRemove);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMultiTrackTerminal self, out VARIANT pVariant) get_TrackTerminals;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMultiTrackTerminal self, out IEnumTerminal* ppEnumTerminal) EnumerateTrackTerminals;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMultiTrackTerminal self, int32 MediaType, TERMINAL_DIRECTION TerminalDirection, out ITTerminal* ppTerminal) CreateTrackTerminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMultiTrackTerminal self, out int32 plMediaTypesInUse) get_MediaTypesInUse;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMultiTrackTerminal self, out TERMINAL_DIRECTION plDirectionsInUsed) get_DirectionsInUse;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMultiTrackTerminal self, ref ITTerminal pTrackTerminalToRemove) RemoveTrackTerminal;
			}
		}
		[CRepr]
		public struct ITFileTrack : IDispatch
		{
			public const new Guid IID = .(0x31ca6ea9, 0xc08a, 0x4bea, 0x88, 0x11, 0x8e, 0x9c, 0x1b, 0xa3, 0xea, 0x3a);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Format(out AM_MEDIA_TYPE* ppmt) mut => VT.get_Format(ref this, out ppmt);
			public HRESULT put_Format(in AM_MEDIA_TYPE pmt) mut => VT.put_Format(ref this, pmt);
			public HRESULT get_ControllingTerminal(out ITTerminal* ppControllingTerminal) mut => VT.get_ControllingTerminal(ref this, out ppControllingTerminal);
			public HRESULT get_AudioFormatForScripting(out ITScriptableAudioFormat* ppAudioFormat) mut => VT.get_AudioFormatForScripting(ref this, out ppAudioFormat);
			public HRESULT put_AudioFormatForScripting(ref ITScriptableAudioFormat pAudioFormat) mut => VT.put_AudioFormatForScripting(ref this, ref pAudioFormat);
			public HRESULT get_EmptyAudioFormatForScripting(out ITScriptableAudioFormat* ppAudioFormat) mut => VT.get_EmptyAudioFormatForScripting(ref this, out ppAudioFormat);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITFileTrack self, out AM_MEDIA_TYPE* ppmt) get_Format;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITFileTrack self, in AM_MEDIA_TYPE pmt) put_Format;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITFileTrack self, out ITTerminal* ppControllingTerminal) get_ControllingTerminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITFileTrack self, out ITScriptableAudioFormat* ppAudioFormat) get_AudioFormatForScripting;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITFileTrack self, ref ITScriptableAudioFormat pAudioFormat) put_AudioFormatForScripting;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITFileTrack self, out ITScriptableAudioFormat* ppAudioFormat) get_EmptyAudioFormatForScripting;
			}
		}
		[CRepr]
		public struct ITMediaPlayback : IDispatch
		{
			public const new Guid IID = .(0x627e8ae6, 0xae4c, 0x4a69, 0xbb, 0x63, 0x2a, 0xd6, 0x25, 0x40, 0x4b, 0x77);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT put_PlayList(VARIANT PlayListVariant) mut => VT.put_PlayList(ref this, PlayListVariant);
			public HRESULT get_PlayList(out VARIANT pPlayListVariant) mut => VT.get_PlayList(ref this, out pPlayListVariant);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMediaPlayback self, VARIANT PlayListVariant) put_PlayList;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMediaPlayback self, out VARIANT pPlayListVariant) get_PlayList;
			}
		}
		[CRepr]
		public struct ITMediaRecord : IDispatch
		{
			public const new Guid IID = .(0xf5dd4592, 0x5476, 0x4cc1, 0x9d, 0x4d, 0xfa, 0xd3, 0xee, 0xfe, 0x7d, 0xb2);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT put_FileName(BSTR bstrFileName) mut => VT.put_FileName(ref this, bstrFileName);
			public HRESULT get_FileName(out BSTR pbstrFileName) mut => VT.get_FileName(ref this, out pbstrFileName);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMediaRecord self, BSTR bstrFileName) put_FileName;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMediaRecord self, out BSTR pbstrFileName) get_FileName;
			}
		}
		[CRepr]
		public struct ITMediaControl : IDispatch
		{
			public const new Guid IID = .(0xc445dde8, 0x5199, 0x4bc7, 0x98, 0x07, 0x5f, 0xfb, 0x92, 0xe4, 0x2e, 0x09);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Start() mut => VT.Start(ref this);
			public HRESULT Stop() mut => VT.Stop(ref this);
			public HRESULT Pause() mut => VT.Pause(ref this);
			public HRESULT get_MediaState(out TERMINAL_MEDIA_STATE pTerminalMediaState) mut => VT.get_MediaState(ref this, out pTerminalMediaState);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMediaControl self) Start;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMediaControl self) Stop;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMediaControl self) Pause;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMediaControl self, out TERMINAL_MEDIA_STATE pTerminalMediaState) get_MediaState;
			}
		}
		[CRepr]
		public struct ITBasicAudioTerminal : IDispatch
		{
			public const new Guid IID = .(0xb1efc38d, 0x9355, 0x11d0, 0x83, 0x5c, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT put_Volume(int32 lVolume) mut => VT.put_Volume(ref this, lVolume);
			public HRESULT get_Volume(out int32 plVolume) mut => VT.get_Volume(ref this, out plVolume);
			public HRESULT put_Balance(int32 lBalance) mut => VT.put_Balance(ref this, lBalance);
			public HRESULT get_Balance(out int32 plBalance) mut => VT.get_Balance(ref this, out plBalance);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicAudioTerminal self, int32 lVolume) put_Volume;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicAudioTerminal self, out int32 plVolume) get_Volume;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicAudioTerminal self, int32 lBalance) put_Balance;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicAudioTerminal self, out int32 plBalance) get_Balance;
			}
		}
		[CRepr]
		public struct ITStaticAudioTerminal : IDispatch
		{
			public const new Guid IID = .(0xa86b7871, 0xd14c, 0x48e6, 0x92, 0x2e, 0xa8, 0xd1, 0x5f, 0x98, 0x48, 0x00);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_WaveId(out int32 plWaveId) mut => VT.get_WaveId(ref this, out plWaveId);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStaticAudioTerminal self, out int32 plWaveId) get_WaveId;
			}
		}
		[CRepr]
		public struct ITCallHub : IDispatch
		{
			public const new Guid IID = .(0xa3c1544e, 0x5b92, 0x11d1, 0x8f, 0x4e, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Clear() mut => VT.Clear(ref this);
			public HRESULT EnumerateCalls(out IEnumCall* ppEnumCall) mut => VT.EnumerateCalls(ref this, out ppEnumCall);
			public HRESULT get_Calls(out VARIANT pCalls) mut => VT.get_Calls(ref this, out pCalls);
			public HRESULT get_NumCalls(out int32 plCalls) mut => VT.get_NumCalls(ref this, out plCalls);
			public HRESULT get_State(out CALLHUB_STATE pState) mut => VT.get_State(ref this, out pState);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallHub self) Clear;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallHub self, out IEnumCall* ppEnumCall) EnumerateCalls;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallHub self, out VARIANT pCalls) get_Calls;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallHub self, out int32 plCalls) get_NumCalls;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallHub self, out CALLHUB_STATE pState) get_State;
			}
		}
		[CRepr]
		public struct ITLegacyAddressMediaControl : IUnknown
		{
			public const new Guid IID = .(0xab493640, 0x4c0b, 0x11d2, 0xa0, 0x46, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT GetID(BSTR pDeviceClass, out uint32 pdwSize, uint8** ppDeviceID) mut => VT.GetID(ref this, pDeviceClass, out pdwSize, ppDeviceID);
			public HRESULT GetDevConfig(BSTR pDeviceClass, out uint32 pdwSize, uint8** ppDeviceConfig) mut => VT.GetDevConfig(ref this, pDeviceClass, out pdwSize, ppDeviceConfig);
			public HRESULT SetDevConfig(BSTR pDeviceClass, uint32 dwSize, uint8* pDeviceConfig) mut => VT.SetDevConfig(ref this, pDeviceClass, dwSize, pDeviceConfig);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyAddressMediaControl self, BSTR pDeviceClass, out uint32 pdwSize, uint8** ppDeviceID) GetID;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyAddressMediaControl self, BSTR pDeviceClass, out uint32 pdwSize, uint8** ppDeviceConfig) GetDevConfig;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyAddressMediaControl self, BSTR pDeviceClass, uint32 dwSize, uint8* pDeviceConfig) SetDevConfig;
			}
		}
		[CRepr]
		public struct ITPrivateEvent : IDispatch
		{
			public const new Guid IID = .(0x0e269cd0, 0x10d4, 0x4121, 0x9c, 0x22, 0x9c, 0x85, 0xd6, 0x25, 0x65, 0x0d);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Address(out ITAddress* ppAddress) mut => VT.get_Address(ref this, out ppAddress);
			public HRESULT get_Call(out ITCallInfo* ppCallInfo) mut => VT.get_Call(ref this, out ppCallInfo);
			public HRESULT get_CallHub(out ITCallHub* ppCallHub) mut => VT.get_CallHub(ref this, out ppCallHub);
			public HRESULT get_EventCode(out int32 plEventCode) mut => VT.get_EventCode(ref this, out plEventCode);
			public HRESULT get_EventInterface(out IDispatch* pEventInterface) mut => VT.get_EventInterface(ref this, out pEventInterface);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPrivateEvent self, out ITAddress* ppAddress) get_Address;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPrivateEvent self, out ITCallInfo* ppCallInfo) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPrivateEvent self, out ITCallHub* ppCallHub) get_CallHub;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPrivateEvent self, out int32 plEventCode) get_EventCode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPrivateEvent self, out IDispatch* pEventInterface) get_EventInterface;
			}
		}
		[CRepr]
		public struct ITLegacyAddressMediaControl2 : ITLegacyAddressMediaControl
		{
			public const new Guid IID = .(0xb0ee512b, 0xa531, 0x409e, 0x9d, 0xd9, 0x40, 0x99, 0xfe, 0x86, 0xc7, 0x38);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT ConfigDialog(HWND hwndOwner, BSTR pDeviceClass) mut => VT.ConfigDialog(ref this, hwndOwner, pDeviceClass);
			public HRESULT ConfigDialogEdit(HWND hwndOwner, BSTR pDeviceClass, uint32 dwSizeIn, uint8* pDeviceConfigIn, out uint32 pdwSizeOut, uint8** ppDeviceConfigOut) mut => VT.ConfigDialogEdit(ref this, hwndOwner, pDeviceClass, dwSizeIn, pDeviceConfigIn, out pdwSizeOut, ppDeviceConfigOut);

			[CRepr]
			public struct VTable : ITLegacyAddressMediaControl.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyAddressMediaControl2 self, HWND hwndOwner, BSTR pDeviceClass) ConfigDialog;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyAddressMediaControl2 self, HWND hwndOwner, BSTR pDeviceClass, uint32 dwSizeIn, uint8* pDeviceConfigIn, out uint32 pdwSizeOut, uint8** ppDeviceConfigOut) ConfigDialogEdit;
			}
		}
		[CRepr]
		public struct ITLegacyCallMediaControl : IDispatch
		{
			public const new Guid IID = .(0xd624582f, 0xcc23, 0x4436, 0xb8, 0xa5, 0x47, 0xc6, 0x25, 0xc8, 0x04, 0x5d);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT DetectDigits(int32 DigitMode) mut => VT.DetectDigits(ref this, DigitMode);
			public HRESULT GenerateDigits(BSTR pDigits, int32 DigitMode) mut => VT.GenerateDigits(ref this, pDigits, DigitMode);
			public HRESULT GetID(BSTR pDeviceClass, out uint32 pdwSize, uint8** ppDeviceID) mut => VT.GetID(ref this, pDeviceClass, out pdwSize, ppDeviceID);
			public HRESULT SetMediaType(int32 lMediaType) mut => VT.SetMediaType(ref this, lMediaType);
			public HRESULT MonitorMedia(int32 lMediaType) mut => VT.MonitorMedia(ref this, lMediaType);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl self, int32 DigitMode) DetectDigits;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl self, BSTR pDigits, int32 DigitMode) GenerateDigits;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl self, BSTR pDeviceClass, out uint32 pdwSize, uint8** ppDeviceID) GetID;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl self, int32 lMediaType) SetMediaType;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl self, int32 lMediaType) MonitorMedia;
			}
		}
		[CRepr]
		public struct ITLegacyCallMediaControl2 : ITLegacyCallMediaControl
		{
			public const new Guid IID = .(0x57ca332d, 0x7bc2, 0x44f1, 0xa6, 0x0c, 0x93, 0x6f, 0xe8, 0xd7, 0xce, 0x73);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT GenerateDigits2(BSTR pDigits, int32 DigitMode, int32 lDuration) mut => VT.GenerateDigits2(ref this, pDigits, DigitMode, lDuration);
			public HRESULT GatherDigits(int32 DigitMode, int32 lNumDigits, BSTR pTerminationDigits, int32 lFirstDigitTimeout, int32 lInterDigitTimeout) mut => VT.GatherDigits(ref this, DigitMode, lNumDigits, pTerminationDigits, lFirstDigitTimeout, lInterDigitTimeout);
			public HRESULT DetectTones(ref TAPI_DETECTTONE pToneList, int32 lNumTones) mut => VT.DetectTones(ref this, ref pToneList, lNumTones);
			public HRESULT DetectTonesByCollection(ref ITCollection2 pDetectToneCollection) mut => VT.DetectTonesByCollection(ref this, ref pDetectToneCollection);
			public HRESULT GenerateTone(TAPI_TONEMODE ToneMode, int32 lDuration) mut => VT.GenerateTone(ref this, ToneMode, lDuration);
			public HRESULT GenerateCustomTones(ref TAPI_CUSTOMTONE pToneList, int32 lNumTones, int32 lDuration) mut => VT.GenerateCustomTones(ref this, ref pToneList, lNumTones, lDuration);
			public HRESULT GenerateCustomTonesByCollection(ref ITCollection2 pCustomToneCollection, int32 lDuration) mut => VT.GenerateCustomTonesByCollection(ref this, ref pCustomToneCollection, lDuration);
			public HRESULT CreateDetectToneObject(out ITDetectTone* ppDetectTone) mut => VT.CreateDetectToneObject(ref this, out ppDetectTone);
			public HRESULT CreateCustomToneObject(out ITCustomTone* ppCustomTone) mut => VT.CreateCustomToneObject(ref this, out ppCustomTone);
			public HRESULT GetIDAsVariant(BSTR bstrDeviceClass, out VARIANT pVarDeviceID) mut => VT.GetIDAsVariant(ref this, bstrDeviceClass, out pVarDeviceID);

			[CRepr]
			public struct VTable : ITLegacyCallMediaControl.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl2 self, BSTR pDigits, int32 DigitMode, int32 lDuration) GenerateDigits2;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl2 self, int32 DigitMode, int32 lNumDigits, BSTR pTerminationDigits, int32 lFirstDigitTimeout, int32 lInterDigitTimeout) GatherDigits;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl2 self, ref TAPI_DETECTTONE pToneList, int32 lNumTones) DetectTones;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl2 self, ref ITCollection2 pDetectToneCollection) DetectTonesByCollection;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl2 self, TAPI_TONEMODE ToneMode, int32 lDuration) GenerateTone;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl2 self, ref TAPI_CUSTOMTONE pToneList, int32 lNumTones, int32 lDuration) GenerateCustomTones;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl2 self, ref ITCollection2 pCustomToneCollection, int32 lDuration) GenerateCustomTonesByCollection;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl2 self, out ITDetectTone* ppDetectTone) CreateDetectToneObject;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl2 self, out ITCustomTone* ppCustomTone) CreateCustomToneObject;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyCallMediaControl2 self, BSTR bstrDeviceClass, out VARIANT pVarDeviceID) GetIDAsVariant;
			}
		}
		[CRepr]
		public struct ITDetectTone : IDispatch
		{
			public const new Guid IID = .(0x961f79bd, 0x3097, 0x49df, 0xa1, 0xd6, 0x90, 0x9b, 0x77, 0xe8, 0x9c, 0xa0);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_AppSpecific(out int32 plAppSpecific) mut => VT.get_AppSpecific(ref this, out plAppSpecific);
			public HRESULT put_AppSpecific(int32 lAppSpecific) mut => VT.put_AppSpecific(ref this, lAppSpecific);
			public HRESULT get_Duration(out int32 plDuration) mut => VT.get_Duration(ref this, out plDuration);
			public HRESULT put_Duration(int32 lDuration) mut => VT.put_Duration(ref this, lDuration);
			public HRESULT get_Frequency(int32 Index, out int32 plFrequency) mut => VT.get_Frequency(ref this, Index, out plFrequency);
			public HRESULT put_Frequency(int32 Index, int32 lFrequency) mut => VT.put_Frequency(ref this, Index, lFrequency);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDetectTone self, out int32 plAppSpecific) get_AppSpecific;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDetectTone self, int32 lAppSpecific) put_AppSpecific;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDetectTone self, out int32 plDuration) get_Duration;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDetectTone self, int32 lDuration) put_Duration;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDetectTone self, int32 Index, out int32 plFrequency) get_Frequency;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDetectTone self, int32 Index, int32 lFrequency) put_Frequency;
			}
		}
		[CRepr]
		public struct ITCustomTone : IDispatch
		{
			public const new Guid IID = .(0x357ad764, 0xb3c6, 0x4b2a, 0x8f, 0xa5, 0x07, 0x22, 0x82, 0x7a, 0x92, 0x54);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Frequency(out int32 plFrequency) mut => VT.get_Frequency(ref this, out plFrequency);
			public HRESULT put_Frequency(int32 lFrequency) mut => VT.put_Frequency(ref this, lFrequency);
			public HRESULT get_CadenceOn(out int32 plCadenceOn) mut => VT.get_CadenceOn(ref this, out plCadenceOn);
			public HRESULT put_CadenceOn(int32 CadenceOn) mut => VT.put_CadenceOn(ref this, CadenceOn);
			public HRESULT get_CadenceOff(out int32 plCadenceOff) mut => VT.get_CadenceOff(ref this, out plCadenceOff);
			public HRESULT put_CadenceOff(int32 lCadenceOff) mut => VT.put_CadenceOff(ref this, lCadenceOff);
			public HRESULT get_Volume(out int32 plVolume) mut => VT.get_Volume(ref this, out plVolume);
			public HRESULT put_Volume(int32 lVolume) mut => VT.put_Volume(ref this, lVolume);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCustomTone self, out int32 plFrequency) get_Frequency;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCustomTone self, int32 lFrequency) put_Frequency;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCustomTone self, out int32 plCadenceOn) get_CadenceOn;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCustomTone self, int32 CadenceOn) put_CadenceOn;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCustomTone self, out int32 plCadenceOff) get_CadenceOff;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCustomTone self, int32 lCadenceOff) put_CadenceOff;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCustomTone self, out int32 plVolume) get_Volume;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCustomTone self, int32 lVolume) put_Volume;
			}
		}
		[CRepr]
		public struct IEnumPhone : IUnknown
		{
			public const new Guid IID = .(0xf15b7669, 0x4780, 0x4595, 0x8c, 0x89, 0xfb, 0x36, 0x9c, 0x8c, 0xf7, 0xaa);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, ITPhone** ppElements, uint32* pceltFetched) mut => VT.Next(ref this, celt, ppElements, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumPhone* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumPhone self, uint32 celt, ITPhone** ppElements, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumPhone self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumPhone self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumPhone self, out IEnumPhone* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct IEnumTerminal : IUnknown
		{
			public const new Guid IID = .(0xae269cf4, 0x935e, 0x11d0, 0x83, 0x5c, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, out ITTerminal* ppElements, uint32* pceltFetched) mut => VT.Next(ref this, celt, out ppElements, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumTerminal* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumTerminal self, uint32 celt, out ITTerminal* ppElements, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumTerminal self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumTerminal self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumTerminal self, out IEnumTerminal* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct IEnumTerminalClass : IUnknown
		{
			public const new Guid IID = .(0xae269cf5, 0x935e, 0x11d0, 0x83, 0x5c, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, Guid* pElements, uint32* pceltFetched) mut => VT.Next(ref this, celt, pElements, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumTerminalClass* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumTerminalClass self, uint32 celt, Guid* pElements, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumTerminalClass self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumTerminalClass self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumTerminalClass self, out IEnumTerminalClass* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct IEnumCall : IUnknown
		{
			public const new Guid IID = .(0xae269cf6, 0x935e, 0x11d0, 0x83, 0x5c, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, out ITCallInfo* ppElements, uint32* pceltFetched) mut => VT.Next(ref this, celt, out ppElements, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumCall* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumCall self, uint32 celt, out ITCallInfo* ppElements, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumCall self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumCall self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumCall self, out IEnumCall* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct IEnumAddress : IUnknown
		{
			public const new Guid IID = .(0x1666fca1, 0x9363, 0x11d0, 0x83, 0x5c, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, ITAddress** ppElements, uint32* pceltFetched) mut => VT.Next(ref this, celt, ppElements, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumAddress* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAddress self, uint32 celt, ITAddress** ppElements, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAddress self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAddress self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAddress self, out IEnumAddress* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct IEnumCallHub : IUnknown
		{
			public const new Guid IID = .(0xa3c15450, 0x5b92, 0x11d1, 0x8f, 0x4e, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, ITCallHub** ppElements, uint32* pceltFetched) mut => VT.Next(ref this, celt, ppElements, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumCallHub* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumCallHub self, uint32 celt, ITCallHub** ppElements, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumCallHub self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumCallHub self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumCallHub self, out IEnumCallHub* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct IEnumBstr : IUnknown
		{
			public const new Guid IID = .(0x35372049, 0x0bc6, 0x11d2, 0xa0, 0x33, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, BSTR* ppStrings, uint32* pceltFetched) mut => VT.Next(ref this, celt, ppStrings, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumBstr* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumBstr self, uint32 celt, BSTR* ppStrings, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumBstr self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumBstr self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumBstr self, out IEnumBstr* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct IEnumPluggableTerminalClassInfo : IUnknown
		{
			public const new Guid IID = .(0x4567450c, 0xdbee, 0x4e3f, 0xaa, 0xf5, 0x37, 0xbf, 0x9e, 0xbf, 0x5e, 0x29);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, ITPluggableTerminalClassInfo** ppElements, uint32* pceltFetched) mut => VT.Next(ref this, celt, ppElements, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumPluggableTerminalClassInfo* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumPluggableTerminalClassInfo self, uint32 celt, ITPluggableTerminalClassInfo** ppElements, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumPluggableTerminalClassInfo self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumPluggableTerminalClassInfo self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumPluggableTerminalClassInfo self, out IEnumPluggableTerminalClassInfo* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct IEnumPluggableSuperclassInfo : IUnknown
		{
			public const new Guid IID = .(0xe9586a80, 0x89e6, 0x4cff, 0x93, 0x1d, 0x47, 0x8d, 0x57, 0x51, 0xf4, 0xc0);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, ITPluggableTerminalSuperclassInfo** ppElements, uint32* pceltFetched) mut => VT.Next(ref this, celt, ppElements, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumPluggableSuperclassInfo* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumPluggableSuperclassInfo self, uint32 celt, ITPluggableTerminalSuperclassInfo** ppElements, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumPluggableSuperclassInfo self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumPluggableSuperclassInfo self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumPluggableSuperclassInfo self, out IEnumPluggableSuperclassInfo* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct ITPhoneEvent : IDispatch
		{
			public const new Guid IID = .(0x8f942dd8, 0x64ed, 0x4aaf, 0xa7, 0x7d, 0xb2, 0x3d, 0xb0, 0x83, 0x7e, 0xad);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Phone(out ITPhone* ppPhone) mut => VT.get_Phone(ref this, out ppPhone);
			public HRESULT get_Event(out PHONE_EVENT pEvent) mut => VT.get_Event(ref this, out pEvent);
			public HRESULT get_ButtonState(out PHONE_BUTTON_STATE pState) mut => VT.get_ButtonState(ref this, out pState);
			public HRESULT get_HookSwitchState(out PHONE_HOOK_SWITCH_STATE pState) mut => VT.get_HookSwitchState(ref this, out pState);
			public HRESULT get_HookSwitchDevice(out PHONE_HOOK_SWITCH_DEVICE pDevice) mut => VT.get_HookSwitchDevice(ref this, out pDevice);
			public HRESULT get_RingMode(out int32 plRingMode) mut => VT.get_RingMode(ref this, out plRingMode);
			public HRESULT get_ButtonLampId(out int32 plButtonLampId) mut => VT.get_ButtonLampId(ref this, out plButtonLampId);
			public HRESULT get_NumberGathered(out BSTR ppNumber) mut => VT.get_NumberGathered(ref this, out ppNumber);
			public HRESULT get_Call(out ITCallInfo* ppCallInfo) mut => VT.get_Call(ref this, out ppCallInfo);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhoneEvent self, out ITPhone* ppPhone) get_Phone;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhoneEvent self, out PHONE_EVENT pEvent) get_Event;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhoneEvent self, out PHONE_BUTTON_STATE pState) get_ButtonState;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhoneEvent self, out PHONE_HOOK_SWITCH_STATE pState) get_HookSwitchState;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhoneEvent self, out PHONE_HOOK_SWITCH_DEVICE pDevice) get_HookSwitchDevice;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhoneEvent self, out int32 plRingMode) get_RingMode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhoneEvent self, out int32 plButtonLampId) get_ButtonLampId;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhoneEvent self, out BSTR ppNumber) get_NumberGathered;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhoneEvent self, out ITCallInfo* ppCallInfo) get_Call;
			}
		}
		[CRepr]
		public struct ITCallStateEvent : IDispatch
		{
			public const new Guid IID = .(0x62f47097, 0x95c9, 0x11d0, 0x83, 0x5d, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Call(out ITCallInfo* ppCallInfo) mut => VT.get_Call(ref this, out ppCallInfo);
			public HRESULT get_State(out CALL_STATE pCallState) mut => VT.get_State(ref this, out pCallState);
			public HRESULT get_Cause(out CALL_STATE_EVENT_CAUSE pCEC) mut => VT.get_Cause(ref this, out pCEC);
			public HRESULT get_CallbackInstance(out int32 plCallbackInstance) mut => VT.get_CallbackInstance(ref this, out plCallbackInstance);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallStateEvent self, out ITCallInfo* ppCallInfo) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallStateEvent self, out CALL_STATE pCallState) get_State;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallStateEvent self, out CALL_STATE_EVENT_CAUSE pCEC) get_Cause;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallStateEvent self, out int32 plCallbackInstance) get_CallbackInstance;
			}
		}
		[CRepr]
		public struct ITPhoneDeviceSpecificEvent : IDispatch
		{
			public const new Guid IID = .(0x63ffb2a6, 0x872b, 0x4cd3, 0xa5, 0x01, 0x32, 0x6e, 0x8f, 0xb4, 0x0a, 0xf7);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Phone(out ITPhone* ppPhone) mut => VT.get_Phone(ref this, out ppPhone);
			public HRESULT get_lParam1(out int32 pParam1) mut => VT.get_lParam1(ref this, out pParam1);
			public HRESULT get_lParam2(out int32 pParam2) mut => VT.get_lParam2(ref this, out pParam2);
			public HRESULT get_lParam3(out int32 pParam3) mut => VT.get_lParam3(ref this, out pParam3);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhoneDeviceSpecificEvent self, out ITPhone* ppPhone) get_Phone;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhoneDeviceSpecificEvent self, out int32 pParam1) get_lParam1;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhoneDeviceSpecificEvent self, out int32 pParam2) get_lParam2;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPhoneDeviceSpecificEvent self, out int32 pParam3) get_lParam3;
			}
		}
		[CRepr]
		public struct ITCallMediaEvent : IDispatch
		{
			public const new Guid IID = .(0xff36b87f, 0xec3a, 0x11d0, 0x8e, 0xe4, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Call(out ITCallInfo* ppCallInfo) mut => VT.get_Call(ref this, out ppCallInfo);
			public HRESULT get_Event(out CALL_MEDIA_EVENT pCallMediaEvent) mut => VT.get_Event(ref this, out pCallMediaEvent);
			public HRESULT get_Error(out HRESULT phrError) mut => VT.get_Error(ref this, out phrError);
			public HRESULT get_Terminal(out ITTerminal* ppTerminal) mut => VT.get_Terminal(ref this, out ppTerminal);
			public HRESULT get_Stream(out ITStream* ppStream) mut => VT.get_Stream(ref this, out ppStream);
			public HRESULT get_Cause(out CALL_MEDIA_EVENT_CAUSE pCause) mut => VT.get_Cause(ref this, out pCause);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallMediaEvent self, out ITCallInfo* ppCallInfo) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallMediaEvent self, out CALL_MEDIA_EVENT pCallMediaEvent) get_Event;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallMediaEvent self, out HRESULT phrError) get_Error;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallMediaEvent self, out ITTerminal* ppTerminal) get_Terminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallMediaEvent self, out ITStream* ppStream) get_Stream;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallMediaEvent self, out CALL_MEDIA_EVENT_CAUSE pCause) get_Cause;
			}
		}
		[CRepr]
		public struct ITDigitDetectionEvent : IDispatch
		{
			public const new Guid IID = .(0x80d3bfac, 0x57d9, 0x11d2, 0xa0, 0x4a, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Call(out ITCallInfo* ppCallInfo) mut => VT.get_Call(ref this, out ppCallInfo);
			public HRESULT get_Digit(out uint8 pucDigit) mut => VT.get_Digit(ref this, out pucDigit);
			public HRESULT get_DigitMode(out int32 pDigitMode) mut => VT.get_DigitMode(ref this, out pDigitMode);
			public HRESULT get_TickCount(out int32 plTickCount) mut => VT.get_TickCount(ref this, out plTickCount);
			public HRESULT get_CallbackInstance(out int32 plCallbackInstance) mut => VT.get_CallbackInstance(ref this, out plCallbackInstance);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitDetectionEvent self, out ITCallInfo* ppCallInfo) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitDetectionEvent self, out uint8 pucDigit) get_Digit;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitDetectionEvent self, out int32 pDigitMode) get_DigitMode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitDetectionEvent self, out int32 plTickCount) get_TickCount;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitDetectionEvent self, out int32 plCallbackInstance) get_CallbackInstance;
			}
		}
		[CRepr]
		public struct ITDigitGenerationEvent : IDispatch
		{
			public const new Guid IID = .(0x80d3bfad, 0x57d9, 0x11d2, 0xa0, 0x4a, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Call(out ITCallInfo* ppCallInfo) mut => VT.get_Call(ref this, out ppCallInfo);
			public HRESULT get_GenerationTermination(out int32 plGenerationTermination) mut => VT.get_GenerationTermination(ref this, out plGenerationTermination);
			public HRESULT get_TickCount(out int32 plTickCount) mut => VT.get_TickCount(ref this, out plTickCount);
			public HRESULT get_CallbackInstance(out int32 plCallbackInstance) mut => VT.get_CallbackInstance(ref this, out plCallbackInstance);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitGenerationEvent self, out ITCallInfo* ppCallInfo) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitGenerationEvent self, out int32 plGenerationTermination) get_GenerationTermination;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitGenerationEvent self, out int32 plTickCount) get_TickCount;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitGenerationEvent self, out int32 plCallbackInstance) get_CallbackInstance;
			}
		}
		[CRepr]
		public struct ITDigitsGatheredEvent : IDispatch
		{
			public const new Guid IID = .(0xe52ec4c1, 0xcba3, 0x441a, 0x9e, 0x6a, 0x93, 0xcb, 0x90, 0x9e, 0x97, 0x24);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Call(out ITCallInfo* ppCallInfo) mut => VT.get_Call(ref this, out ppCallInfo);
			public HRESULT get_Digits(out BSTR ppDigits) mut => VT.get_Digits(ref this, out ppDigits);
			public HRESULT get_GatherTermination(out TAPI_GATHERTERM pGatherTermination) mut => VT.get_GatherTermination(ref this, out pGatherTermination);
			public HRESULT get_TickCount(out int32 plTickCount) mut => VT.get_TickCount(ref this, out plTickCount);
			public HRESULT get_CallbackInstance(out int32 plCallbackInstance) mut => VT.get_CallbackInstance(ref this, out plCallbackInstance);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitsGatheredEvent self, out ITCallInfo* ppCallInfo) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitsGatheredEvent self, out BSTR ppDigits) get_Digits;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitsGatheredEvent self, out TAPI_GATHERTERM pGatherTermination) get_GatherTermination;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitsGatheredEvent self, out int32 plTickCount) get_TickCount;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDigitsGatheredEvent self, out int32 plCallbackInstance) get_CallbackInstance;
			}
		}
		[CRepr]
		public struct ITToneDetectionEvent : IDispatch
		{
			public const new Guid IID = .(0x407e0faf, 0xd047, 0x4753, 0xb0, 0xc6, 0x8e, 0x06, 0x03, 0x73, 0xfe, 0xcd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Call(out ITCallInfo* ppCallInfo) mut => VT.get_Call(ref this, out ppCallInfo);
			public HRESULT get_AppSpecific(out int32 plAppSpecific) mut => VT.get_AppSpecific(ref this, out plAppSpecific);
			public HRESULT get_TickCount(out int32 plTickCount) mut => VT.get_TickCount(ref this, out plTickCount);
			public HRESULT get_CallbackInstance(out int32 plCallbackInstance) mut => VT.get_CallbackInstance(ref this, out plCallbackInstance);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITToneDetectionEvent self, out ITCallInfo* ppCallInfo) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITToneDetectionEvent self, out int32 plAppSpecific) get_AppSpecific;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITToneDetectionEvent self, out int32 plTickCount) get_TickCount;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITToneDetectionEvent self, out int32 plCallbackInstance) get_CallbackInstance;
			}
		}
		[CRepr]
		public struct ITTAPIObjectEvent : IDispatch
		{
			public const new Guid IID = .(0xf4854d48, 0x937a, 0x11d1, 0xbb, 0x58, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_TAPIObject(out ITTAPI* ppTAPIObject) mut => VT.get_TAPIObject(ref this, out ppTAPIObject);
			public HRESULT get_Event(out TAPIOBJECT_EVENT pEvent) mut => VT.get_Event(ref this, out pEvent);
			public HRESULT get_Address(out ITAddress* ppAddress) mut => VT.get_Address(ref this, out ppAddress);
			public HRESULT get_CallbackInstance(out int32 plCallbackInstance) mut => VT.get_CallbackInstance(ref this, out plCallbackInstance);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPIObjectEvent self, out ITTAPI* ppTAPIObject) get_TAPIObject;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPIObjectEvent self, out TAPIOBJECT_EVENT pEvent) get_Event;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPIObjectEvent self, out ITAddress* ppAddress) get_Address;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPIObjectEvent self, out int32 plCallbackInstance) get_CallbackInstance;
			}
		}
		[CRepr]
		public struct ITTAPIObjectEvent2 : ITTAPIObjectEvent
		{
			public const new Guid IID = .(0x359dda6e, 0x68ce, 0x4383, 0xbf, 0x0b, 0x16, 0x91, 0x33, 0xc4, 0x1b, 0x46);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Phone(out ITPhone* ppPhone) mut => VT.get_Phone(ref this, out ppPhone);

			[CRepr]
			public struct VTable : ITTAPIObjectEvent.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPIObjectEvent2 self, out ITPhone* ppPhone) get_Phone;
			}
		}
		[CRepr]
		public struct ITTAPIEventNotification : IUnknown
		{
			public const new Guid IID = .(0xeddb9426, 0x3b91, 0x11d1, 0x8f, 0x30, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Event(TAPI_EVENT TapiEvent, ref IDispatch pEvent) mut => VT.Event(ref this, TapiEvent, ref pEvent);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPIEventNotification self, TAPI_EVENT TapiEvent, ref IDispatch pEvent) Event;
			}
		}
		[CRepr]
		public struct ITCallHubEvent : IDispatch
		{
			public const new Guid IID = .(0xa3c15451, 0x5b92, 0x11d1, 0x8f, 0x4e, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Event(out CALLHUB_EVENT pEvent) mut => VT.get_Event(ref this, out pEvent);
			public HRESULT get_CallHub(out ITCallHub* ppCallHub) mut => VT.get_CallHub(ref this, out ppCallHub);
			public HRESULT get_Call(out ITCallInfo* ppCall) mut => VT.get_Call(ref this, out ppCall);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallHubEvent self, out CALLHUB_EVENT pEvent) get_Event;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallHubEvent self, out ITCallHub* ppCallHub) get_CallHub;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallHubEvent self, out ITCallInfo* ppCall) get_Call;
			}
		}
		[CRepr]
		public struct ITAddressEvent : IDispatch
		{
			public const new Guid IID = .(0x831ce2d1, 0x83b5, 0x11d1, 0xbb, 0x5c, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Address(out ITAddress* ppAddress) mut => VT.get_Address(ref this, out ppAddress);
			public HRESULT get_Event(out ADDRESS_EVENT pEvent) mut => VT.get_Event(ref this, out pEvent);
			public HRESULT get_Terminal(out ITTerminal* ppTerminal) mut => VT.get_Terminal(ref this, out ppTerminal);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressEvent self, out ITAddress* ppAddress) get_Address;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressEvent self, out ADDRESS_EVENT pEvent) get_Event;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressEvent self, out ITTerminal* ppTerminal) get_Terminal;
			}
		}
		[CRepr]
		public struct ITAddressDeviceSpecificEvent : IDispatch
		{
			public const new Guid IID = .(0x3acb216b, 0x40bd, 0x487a, 0x86, 0x72, 0x5c, 0xe7, 0x7b, 0xd7, 0xe3, 0xa3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Address(out ITAddress* ppAddress) mut => VT.get_Address(ref this, out ppAddress);
			public HRESULT get_Call(out ITCallInfo* ppCall) mut => VT.get_Call(ref this, out ppCall);
			public HRESULT get_lParam1(out int32 pParam1) mut => VT.get_lParam1(ref this, out pParam1);
			public HRESULT get_lParam2(out int32 pParam2) mut => VT.get_lParam2(ref this, out pParam2);
			public HRESULT get_lParam3(out int32 pParam3) mut => VT.get_lParam3(ref this, out pParam3);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressDeviceSpecificEvent self, out ITAddress* ppAddress) get_Address;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressDeviceSpecificEvent self, out ITCallInfo* ppCall) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressDeviceSpecificEvent self, out int32 pParam1) get_lParam1;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressDeviceSpecificEvent self, out int32 pParam2) get_lParam2;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressDeviceSpecificEvent self, out int32 pParam3) get_lParam3;
			}
		}
		[CRepr]
		public struct ITFileTerminalEvent : IDispatch
		{
			public const new Guid IID = .(0xe4a7fbac, 0x8c17, 0x4427, 0x9f, 0x55, 0x9f, 0x58, 0x9a, 0xc8, 0xaf, 0x00);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Terminal(out ITTerminal* ppTerminal) mut => VT.get_Terminal(ref this, out ppTerminal);
			public HRESULT get_Track(out ITFileTrack* ppTrackTerminal) mut => VT.get_Track(ref this, out ppTrackTerminal);
			public HRESULT get_Call(out ITCallInfo* ppCall) mut => VT.get_Call(ref this, out ppCall);
			public HRESULT get_State(out TERMINAL_MEDIA_STATE pState) mut => VT.get_State(ref this, out pState);
			public HRESULT get_Cause(out FT_STATE_EVENT_CAUSE pCause) mut => VT.get_Cause(ref this, out pCause);
			public HRESULT get_Error(out HRESULT phrErrorCode) mut => VT.get_Error(ref this, out phrErrorCode);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITFileTerminalEvent self, out ITTerminal* ppTerminal) get_Terminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITFileTerminalEvent self, out ITFileTrack* ppTrackTerminal) get_Track;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITFileTerminalEvent self, out ITCallInfo* ppCall) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITFileTerminalEvent self, out TERMINAL_MEDIA_STATE pState) get_State;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITFileTerminalEvent self, out FT_STATE_EVENT_CAUSE pCause) get_Cause;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITFileTerminalEvent self, out HRESULT phrErrorCode) get_Error;
			}
		}
		[CRepr]
		public struct ITTTSTerminalEvent : IDispatch
		{
			public const new Guid IID = .(0xd964788f, 0x95a5, 0x461d, 0xab, 0x0c, 0xb9, 0x90, 0x0a, 0x6c, 0x27, 0x13);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Terminal(out ITTerminal* ppTerminal) mut => VT.get_Terminal(ref this, out ppTerminal);
			public HRESULT get_Call(out ITCallInfo* ppCall) mut => VT.get_Call(ref this, out ppCall);
			public HRESULT get_Error(out HRESULT phrErrorCode) mut => VT.get_Error(ref this, out phrErrorCode);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTTSTerminalEvent self, out ITTerminal* ppTerminal) get_Terminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTTSTerminalEvent self, out ITCallInfo* ppCall) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTTSTerminalEvent self, out HRESULT phrErrorCode) get_Error;
			}
		}
		[CRepr]
		public struct ITASRTerminalEvent : IDispatch
		{
			public const new Guid IID = .(0xee016a02, 0x4fa9, 0x467c, 0x93, 0x3f, 0x5a, 0x15, 0xb1, 0x23, 0x77, 0xd7);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Terminal(out ITTerminal* ppTerminal) mut => VT.get_Terminal(ref this, out ppTerminal);
			public HRESULT get_Call(out ITCallInfo* ppCall) mut => VT.get_Call(ref this, out ppCall);
			public HRESULT get_Error(out HRESULT phrErrorCode) mut => VT.get_Error(ref this, out phrErrorCode);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITASRTerminalEvent self, out ITTerminal* ppTerminal) get_Terminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITASRTerminalEvent self, out ITCallInfo* ppCall) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITASRTerminalEvent self, out HRESULT phrErrorCode) get_Error;
			}
		}
		[CRepr]
		public struct ITToneTerminalEvent : IDispatch
		{
			public const new Guid IID = .(0xe6f56009, 0x611f, 0x4945, 0xbb, 0xd2, 0x2d, 0x0c, 0xe5, 0x61, 0x20, 0x56);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Terminal(out ITTerminal* ppTerminal) mut => VT.get_Terminal(ref this, out ppTerminal);
			public HRESULT get_Call(out ITCallInfo* ppCall) mut => VT.get_Call(ref this, out ppCall);
			public HRESULT get_Error(out HRESULT phrErrorCode) mut => VT.get_Error(ref this, out phrErrorCode);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITToneTerminalEvent self, out ITTerminal* ppTerminal) get_Terminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITToneTerminalEvent self, out ITCallInfo* ppCall) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITToneTerminalEvent self, out HRESULT phrErrorCode) get_Error;
			}
		}
		[CRepr]
		public struct ITQOSEvent : IDispatch
		{
			public const new Guid IID = .(0xcfa3357c, 0xad77, 0x11d1, 0xbb, 0x68, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Call(out ITCallInfo* ppCall) mut => VT.get_Call(ref this, out ppCall);
			public HRESULT get_Event(out QOS_EVENT pQosEvent) mut => VT.get_Event(ref this, out pQosEvent);
			public HRESULT get_MediaType(out int32 plMediaType) mut => VT.get_MediaType(ref this, out plMediaType);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQOSEvent self, out ITCallInfo* ppCall) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQOSEvent self, out QOS_EVENT pQosEvent) get_Event;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQOSEvent self, out int32 plMediaType) get_MediaType;
			}
		}
		[CRepr]
		public struct ITCallInfoChangeEvent : IDispatch
		{
			public const new Guid IID = .(0x5d4b65f9, 0xe51c, 0x11d1, 0xa0, 0x2f, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Call(out ITCallInfo* ppCall) mut => VT.get_Call(ref this, out ppCall);
			public HRESULT get_Cause(out CALLINFOCHANGE_CAUSE pCIC) mut => VT.get_Cause(ref this, out pCIC);
			public HRESULT get_CallbackInstance(out int32 plCallbackInstance) mut => VT.get_CallbackInstance(ref this, out plCallbackInstance);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfoChangeEvent self, out ITCallInfo* ppCall) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfoChangeEvent self, out CALLINFOCHANGE_CAUSE pCIC) get_Cause;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallInfoChangeEvent self, out int32 plCallbackInstance) get_CallbackInstance;
			}
		}
		[CRepr]
		public struct ITRequest : IDispatch
		{
			public const new Guid IID = .(0xac48ffdf, 0xf8c4, 0x11d1, 0xa0, 0x30, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT MakeCall(BSTR pDestAddress, BSTR pAppName, BSTR pCalledParty, BSTR pComment) mut => VT.MakeCall(ref this, pDestAddress, pAppName, pCalledParty, pComment);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITRequest self, BSTR pDestAddress, BSTR pAppName, BSTR pCalledParty, BSTR pComment) MakeCall;
			}
		}
		[CRepr]
		public struct ITRequestEvent : IDispatch
		{
			public const new Guid IID = .(0xac48ffde, 0xf8c4, 0x11d1, 0xa0, 0x30, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_RegistrationInstance(out int32 plRegistrationInstance) mut => VT.get_RegistrationInstance(ref this, out plRegistrationInstance);
			public HRESULT get_RequestMode(out int32 plRequestMode) mut => VT.get_RequestMode(ref this, out plRequestMode);
			public HRESULT get_DestAddress(out BSTR ppDestAddress) mut => VT.get_DestAddress(ref this, out ppDestAddress);
			public HRESULT get_AppName(out BSTR ppAppName) mut => VT.get_AppName(ref this, out ppAppName);
			public HRESULT get_CalledParty(out BSTR ppCalledParty) mut => VT.get_CalledParty(ref this, out ppCalledParty);
			public HRESULT get_Comment(out BSTR ppComment) mut => VT.get_Comment(ref this, out ppComment);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITRequestEvent self, out int32 plRegistrationInstance) get_RegistrationInstance;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITRequestEvent self, out int32 plRequestMode) get_RequestMode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITRequestEvent self, out BSTR ppDestAddress) get_DestAddress;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITRequestEvent self, out BSTR ppAppName) get_AppName;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITRequestEvent self, out BSTR ppCalledParty) get_CalledParty;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITRequestEvent self, out BSTR ppComment) get_Comment;
			}
		}
		[CRepr]
		public struct ITCollection : IDispatch
		{
			public const new Guid IID = .(0x5ec5acf2, 0x9c02, 0x11d0, 0x83, 0x62, 0x00, 0xaa, 0x00, 0x3c, 0xca, 0xbd);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Count(out int32 lCount) mut => VT.get_Count(ref this, out lCount);
			public HRESULT get_Item(int32 Index, out VARIANT pVariant) mut => VT.get_Item(ref this, Index, out pVariant);
			public HRESULT get__NewEnum(out IUnknown* ppNewEnum) mut => VT.get__NewEnum(ref this, out ppNewEnum);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCollection self, out int32 lCount) get_Count;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCollection self, int32 Index, out VARIANT pVariant) get_Item;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCollection self, out IUnknown* ppNewEnum) get__NewEnum;
			}
		}
		[CRepr]
		public struct ITCollection2 : ITCollection
		{
			public const new Guid IID = .(0xe6dddda5, 0xa6d3, 0x48ff, 0x87, 0x37, 0xd3, 0x2f, 0xc4, 0xd9, 0x54, 0x77);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Add(int32 Index, ref VARIANT pVariant) mut => VT.Add(ref this, Index, ref pVariant);
			public HRESULT Remove(int32 Index) mut => VT.Remove(ref this, Index);

			[CRepr]
			public struct VTable : ITCollection.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCollection2 self, int32 Index, ref VARIANT pVariant) Add;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCollection2 self, int32 Index) Remove;
			}
		}
		[CRepr]
		public struct ITForwardInformation : IDispatch
		{
			public const new Guid IID = .(0x449f659e, 0x88a3, 0x11d1, 0xbb, 0x5d, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT put_NumRingsNoAnswer(int32 lNumRings) mut => VT.put_NumRingsNoAnswer(ref this, lNumRings);
			public HRESULT get_NumRingsNoAnswer(out int32 plNumRings) mut => VT.get_NumRingsNoAnswer(ref this, out plNumRings);
			public HRESULT SetForwardType(int32 ForwardType, BSTR pDestAddress, BSTR pCallerAddress) mut => VT.SetForwardType(ref this, ForwardType, pDestAddress, pCallerAddress);
			public HRESULT get_ForwardTypeDestination(int32 ForwardType, out BSTR ppDestAddress) mut => VT.get_ForwardTypeDestination(ref this, ForwardType, out ppDestAddress);
			public HRESULT get_ForwardTypeCaller(int32 Forwardtype, out BSTR ppCallerAddress) mut => VT.get_ForwardTypeCaller(ref this, Forwardtype, out ppCallerAddress);
			public HRESULT GetForwardType(int32 ForwardType, out BSTR ppDestinationAddress, out BSTR ppCallerAddress) mut => VT.GetForwardType(ref this, ForwardType, out ppDestinationAddress, out ppCallerAddress);
			public HRESULT Clear() mut => VT.Clear(ref this);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITForwardInformation self, int32 lNumRings) put_NumRingsNoAnswer;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITForwardInformation self, out int32 plNumRings) get_NumRingsNoAnswer;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITForwardInformation self, int32 ForwardType, BSTR pDestAddress, BSTR pCallerAddress) SetForwardType;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITForwardInformation self, int32 ForwardType, out BSTR ppDestAddress) get_ForwardTypeDestination;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITForwardInformation self, int32 Forwardtype, out BSTR ppCallerAddress) get_ForwardTypeCaller;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITForwardInformation self, int32 ForwardType, out BSTR ppDestinationAddress, out BSTR ppCallerAddress) GetForwardType;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITForwardInformation self) Clear;
			}
		}
		[CRepr]
		public struct ITForwardInformation2 : ITForwardInformation
		{
			public const new Guid IID = .(0x5229b4ed, 0xb260, 0x4382, 0x8e, 0x1a, 0x5d, 0xf3, 0xa8, 0xa4, 0xcc, 0xc0);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT SetForwardType2(int32 ForwardType, BSTR pDestAddress, int32 DestAddressType, BSTR pCallerAddress, int32 CallerAddressType) mut => VT.SetForwardType2(ref this, ForwardType, pDestAddress, DestAddressType, pCallerAddress, CallerAddressType);
			public HRESULT GetForwardType2(int32 ForwardType, out BSTR ppDestinationAddress, out int32 pDestAddressType, out BSTR ppCallerAddress, out int32 pCallerAddressType) mut => VT.GetForwardType2(ref this, ForwardType, out ppDestinationAddress, out pDestAddressType, out ppCallerAddress, out pCallerAddressType);
			public HRESULT get_ForwardTypeDestinationAddressType(int32 ForwardType, out int32 pDestAddressType) mut => VT.get_ForwardTypeDestinationAddressType(ref this, ForwardType, out pDestAddressType);
			public HRESULT get_ForwardTypeCallerAddressType(int32 Forwardtype, out int32 pCallerAddressType) mut => VT.get_ForwardTypeCallerAddressType(ref this, Forwardtype, out pCallerAddressType);

			[CRepr]
			public struct VTable : ITForwardInformation.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITForwardInformation2 self, int32 ForwardType, BSTR pDestAddress, int32 DestAddressType, BSTR pCallerAddress, int32 CallerAddressType) SetForwardType2;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITForwardInformation2 self, int32 ForwardType, out BSTR ppDestinationAddress, out int32 pDestAddressType, out BSTR ppCallerAddress, out int32 pCallerAddressType) GetForwardType2;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITForwardInformation2 self, int32 ForwardType, out int32 pDestAddressType) get_ForwardTypeDestinationAddressType;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITForwardInformation2 self, int32 Forwardtype, out int32 pCallerAddressType) get_ForwardTypeCallerAddressType;
			}
		}
		[CRepr]
		public struct ITAddressTranslation : IDispatch
		{
			public const new Guid IID = .(0x0c4d8f03, 0x8ddb, 0x11d1, 0xa0, 0x9e, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT TranslateAddress(BSTR pAddressToTranslate, int32 lCard, int32 lTranslateOptions, out ITAddressTranslationInfo* ppTranslated) mut => VT.TranslateAddress(ref this, pAddressToTranslate, lCard, lTranslateOptions, out ppTranslated);
			public HRESULT TranslateDialog(int hwndOwner, BSTR pAddressIn) mut => VT.TranslateDialog(ref this, hwndOwner, pAddressIn);
			public HRESULT EnumerateLocations(out IEnumLocation* ppEnumLocation) mut => VT.EnumerateLocations(ref this, out ppEnumLocation);
			public HRESULT get_Locations(out VARIANT pVariant) mut => VT.get_Locations(ref this, out pVariant);
			public HRESULT EnumerateCallingCards(out IEnumCallingCard* ppEnumCallingCard) mut => VT.EnumerateCallingCards(ref this, out ppEnumCallingCard);
			public HRESULT get_CallingCards(out VARIANT pVariant) mut => VT.get_CallingCards(ref this, out pVariant);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressTranslation self, BSTR pAddressToTranslate, int32 lCard, int32 lTranslateOptions, out ITAddressTranslationInfo* ppTranslated) TranslateAddress;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressTranslation self, int hwndOwner, BSTR pAddressIn) TranslateDialog;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressTranslation self, out IEnumLocation* ppEnumLocation) EnumerateLocations;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressTranslation self, out VARIANT pVariant) get_Locations;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressTranslation self, out IEnumCallingCard* ppEnumCallingCard) EnumerateCallingCards;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressTranslation self, out VARIANT pVariant) get_CallingCards;
			}
		}
		[CRepr]
		public struct ITAddressTranslationInfo : IDispatch
		{
			public const new Guid IID = .(0xafc15945, 0x8d40, 0x11d1, 0xa0, 0x9e, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_DialableString(out BSTR ppDialableString) mut => VT.get_DialableString(ref this, out ppDialableString);
			public HRESULT get_DisplayableString(out BSTR ppDisplayableString) mut => VT.get_DisplayableString(ref this, out ppDisplayableString);
			public HRESULT get_CurrentCountryCode(out int32 CountryCode) mut => VT.get_CurrentCountryCode(ref this, out CountryCode);
			public HRESULT get_DestinationCountryCode(out int32 CountryCode) mut => VT.get_DestinationCountryCode(ref this, out CountryCode);
			public HRESULT get_TranslationResults(out int32 plResults) mut => VT.get_TranslationResults(ref this, out plResults);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressTranslationInfo self, out BSTR ppDialableString) get_DialableString;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressTranslationInfo self, out BSTR ppDisplayableString) get_DisplayableString;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressTranslationInfo self, out int32 CountryCode) get_CurrentCountryCode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressTranslationInfo self, out int32 CountryCode) get_DestinationCountryCode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAddressTranslationInfo self, out int32 plResults) get_TranslationResults;
			}
		}
		[CRepr]
		public struct ITLocationInfo : IDispatch
		{
			public const new Guid IID = .(0x0c4d8eff, 0x8ddb, 0x11d1, 0xa0, 0x9e, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_PermanentLocationID(out int32 plLocationID) mut => VT.get_PermanentLocationID(ref this, out plLocationID);
			public HRESULT get_CountryCode(out int32 plCountryCode) mut => VT.get_CountryCode(ref this, out plCountryCode);
			public HRESULT get_CountryID(out int32 plCountryID) mut => VT.get_CountryID(ref this, out plCountryID);
			public HRESULT get_Options(out int32 plOptions) mut => VT.get_Options(ref this, out plOptions);
			public HRESULT get_PreferredCardID(out int32 plCardID) mut => VT.get_PreferredCardID(ref this, out plCardID);
			public HRESULT get_LocationName(out BSTR ppLocationName) mut => VT.get_LocationName(ref this, out ppLocationName);
			public HRESULT get_CityCode(out BSTR ppCode) mut => VT.get_CityCode(ref this, out ppCode);
			public HRESULT get_LocalAccessCode(out BSTR ppCode) mut => VT.get_LocalAccessCode(ref this, out ppCode);
			public HRESULT get_LongDistanceAccessCode(out BSTR ppCode) mut => VT.get_LongDistanceAccessCode(ref this, out ppCode);
			public HRESULT get_TollPrefixList(out BSTR ppTollList) mut => VT.get_TollPrefixList(ref this, out ppTollList);
			public HRESULT get_CancelCallWaitingCode(out BSTR ppCode) mut => VT.get_CancelCallWaitingCode(ref this, out ppCode);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLocationInfo self, out int32 plLocationID) get_PermanentLocationID;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLocationInfo self, out int32 plCountryCode) get_CountryCode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLocationInfo self, out int32 plCountryID) get_CountryID;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLocationInfo self, out int32 plOptions) get_Options;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLocationInfo self, out int32 plCardID) get_PreferredCardID;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLocationInfo self, out BSTR ppLocationName) get_LocationName;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLocationInfo self, out BSTR ppCode) get_CityCode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLocationInfo self, out BSTR ppCode) get_LocalAccessCode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLocationInfo self, out BSTR ppCode) get_LongDistanceAccessCode;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLocationInfo self, out BSTR ppTollList) get_TollPrefixList;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLocationInfo self, out BSTR ppCode) get_CancelCallWaitingCode;
			}
		}
		[CRepr]
		public struct IEnumLocation : IUnknown
		{
			public const new Guid IID = .(0x0c4d8f01, 0x8ddb, 0x11d1, 0xa0, 0x9e, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, out ITLocationInfo* ppElements, uint32* pceltFetched) mut => VT.Next(ref this, celt, out ppElements, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumLocation* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumLocation self, uint32 celt, out ITLocationInfo* ppElements, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumLocation self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumLocation self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumLocation self, out IEnumLocation* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct ITCallingCard : IDispatch
		{
			public const new Guid IID = .(0x0c4d8f00, 0x8ddb, 0x11d1, 0xa0, 0x9e, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_PermanentCardID(out int32 plCardID) mut => VT.get_PermanentCardID(ref this, out plCardID);
			public HRESULT get_NumberOfDigits(out int32 plDigits) mut => VT.get_NumberOfDigits(ref this, out plDigits);
			public HRESULT get_Options(out int32 plOptions) mut => VT.get_Options(ref this, out plOptions);
			public HRESULT get_CardName(out BSTR ppCardName) mut => VT.get_CardName(ref this, out ppCardName);
			public HRESULT get_SameAreaDialingRule(out BSTR ppRule) mut => VT.get_SameAreaDialingRule(ref this, out ppRule);
			public HRESULT get_LongDistanceDialingRule(out BSTR ppRule) mut => VT.get_LongDistanceDialingRule(ref this, out ppRule);
			public HRESULT get_InternationalDialingRule(out BSTR ppRule) mut => VT.get_InternationalDialingRule(ref this, out ppRule);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallingCard self, out int32 plCardID) get_PermanentCardID;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallingCard self, out int32 plDigits) get_NumberOfDigits;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallingCard self, out int32 plOptions) get_Options;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallingCard self, out BSTR ppCardName) get_CardName;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallingCard self, out BSTR ppRule) get_SameAreaDialingRule;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallingCard self, out BSTR ppRule) get_LongDistanceDialingRule;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallingCard self, out BSTR ppRule) get_InternationalDialingRule;
			}
		}
		[CRepr]
		public struct IEnumCallingCard : IUnknown
		{
			public const new Guid IID = .(0x0c4d8f02, 0x8ddb, 0x11d1, 0xa0, 0x9e, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, out ITCallingCard* ppElements, uint32* pceltFetched) mut => VT.Next(ref this, celt, out ppElements, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumCallingCard* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumCallingCard self, uint32 celt, out ITCallingCard* ppElements, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumCallingCard self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumCallingCard self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumCallingCard self, out IEnumCallingCard* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct ITCallNotificationEvent : IDispatch
		{
			public const new Guid IID = .(0x895801df, 0x3dd6, 0x11d1, 0x8f, 0x30, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Call(out ITCallInfo* ppCall) mut => VT.get_Call(ref this, out ppCall);
			public HRESULT get_Event(out CALL_NOTIFICATION_EVENT pCallNotificationEvent) mut => VT.get_Event(ref this, out pCallNotificationEvent);
			public HRESULT get_CallbackInstance(out int32 plCallbackInstance) mut => VT.get_CallbackInstance(ref this, out plCallbackInstance);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallNotificationEvent self, out ITCallInfo* ppCall) get_Call;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallNotificationEvent self, out CALL_NOTIFICATION_EVENT pCallNotificationEvent) get_Event;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITCallNotificationEvent self, out int32 plCallbackInstance) get_CallbackInstance;
			}
		}
		[CRepr]
		public struct ITDispatchMapper : IDispatch
		{
			public const new Guid IID = .(0xe9225295, 0xc759, 0x11d1, 0xa0, 0x2b, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT QueryDispatchInterface(BSTR pIID, ref IDispatch pInterfaceToMap, out IDispatch* ppReturnedInterface) mut => VT.QueryDispatchInterface(ref this, pIID, ref pInterfaceToMap, out ppReturnedInterface);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDispatchMapper self, BSTR pIID, ref IDispatch pInterfaceToMap, out IDispatch* ppReturnedInterface) QueryDispatchInterface;
			}
		}
		[CRepr]
		public struct ITStreamControl : IDispatch
		{
			public const new Guid IID = .(0xee3bd604, 0x3868, 0x11d2, 0xa0, 0x45, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT CreateStream(int32 lMediaType, TERMINAL_DIRECTION td, out ITStream* ppStream) mut => VT.CreateStream(ref this, lMediaType, td, out ppStream);
			public HRESULT RemoveStream(ref ITStream pStream) mut => VT.RemoveStream(ref this, ref pStream);
			public HRESULT EnumerateStreams(out IEnumStream* ppEnumStream) mut => VT.EnumerateStreams(ref this, out ppEnumStream);
			public HRESULT get_Streams(out VARIANT pVariant) mut => VT.get_Streams(ref this, out pVariant);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStreamControl self, int32 lMediaType, TERMINAL_DIRECTION td, out ITStream* ppStream) CreateStream;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStreamControl self, ref ITStream pStream) RemoveStream;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStreamControl self, out IEnumStream* ppEnumStream) EnumerateStreams;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStreamControl self, out VARIANT pVariant) get_Streams;
			}
		}
		[CRepr]
		public struct ITStream : IDispatch
		{
			public const new Guid IID = .(0xee3bd605, 0x3868, 0x11d2, 0xa0, 0x45, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_MediaType(out int32 plMediaType) mut => VT.get_MediaType(ref this, out plMediaType);
			public HRESULT get_Direction(out TERMINAL_DIRECTION pTD) mut => VT.get_Direction(ref this, out pTD);
			public HRESULT get_Name(out BSTR ppName) mut => VT.get_Name(ref this, out ppName);
			public HRESULT StartStream() mut => VT.StartStream(ref this);
			public HRESULT PauseStream() mut => VT.PauseStream(ref this);
			public HRESULT StopStream() mut => VT.StopStream(ref this);
			public HRESULT SelectTerminal(ref ITTerminal pTerminal) mut => VT.SelectTerminal(ref this, ref pTerminal);
			public HRESULT UnselectTerminal(ref ITTerminal pTerminal) mut => VT.UnselectTerminal(ref this, ref pTerminal);
			public HRESULT EnumerateTerminals(out IEnumTerminal* ppEnumTerminal) mut => VT.EnumerateTerminals(ref this, out ppEnumTerminal);
			public HRESULT get_Terminals(out VARIANT pTerminals) mut => VT.get_Terminals(ref this, out pTerminals);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStream self, out int32 plMediaType) get_MediaType;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStream self, out TERMINAL_DIRECTION pTD) get_Direction;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStream self, out BSTR ppName) get_Name;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStream self) StartStream;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStream self) PauseStream;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStream self) StopStream;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStream self, ref ITTerminal pTerminal) SelectTerminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStream self, ref ITTerminal pTerminal) UnselectTerminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStream self, out IEnumTerminal* ppEnumTerminal) EnumerateTerminals;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITStream self, out VARIANT pTerminals) get_Terminals;
			}
		}
		[CRepr]
		public struct IEnumStream : IUnknown
		{
			public const new Guid IID = .(0xee3bd606, 0x3868, 0x11d2, 0xa0, 0x45, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, out ITStream* ppElements, uint32* pceltFetched) mut => VT.Next(ref this, celt, out ppElements, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumStream* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumStream self, uint32 celt, out ITStream* ppElements, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumStream self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumStream self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumStream self, out IEnumStream* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct ITSubStreamControl : IDispatch
		{
			public const new Guid IID = .(0xee3bd607, 0x3868, 0x11d2, 0xa0, 0x45, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT CreateSubStream(out ITSubStream* ppSubStream) mut => VT.CreateSubStream(ref this, out ppSubStream);
			public HRESULT RemoveSubStream(ref ITSubStream pSubStream) mut => VT.RemoveSubStream(ref this, ref pSubStream);
			public HRESULT EnumerateSubStreams(out IEnumSubStream* ppEnumSubStream) mut => VT.EnumerateSubStreams(ref this, out ppEnumSubStream);
			public HRESULT get_SubStreams(out VARIANT pVariant) mut => VT.get_SubStreams(ref this, out pVariant);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITSubStreamControl self, out ITSubStream* ppSubStream) CreateSubStream;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITSubStreamControl self, ref ITSubStream pSubStream) RemoveSubStream;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITSubStreamControl self, out IEnumSubStream* ppEnumSubStream) EnumerateSubStreams;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITSubStreamControl self, out VARIANT pVariant) get_SubStreams;
			}
		}
		[CRepr]
		public struct ITSubStream : IDispatch
		{
			public const new Guid IID = .(0xee3bd608, 0x3868, 0x11d2, 0xa0, 0x45, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT StartSubStream() mut => VT.StartSubStream(ref this);
			public HRESULT PauseSubStream() mut => VT.PauseSubStream(ref this);
			public HRESULT StopSubStream() mut => VT.StopSubStream(ref this);
			public HRESULT SelectTerminal(ref ITTerminal pTerminal) mut => VT.SelectTerminal(ref this, ref pTerminal);
			public HRESULT UnselectTerminal(ref ITTerminal pTerminal) mut => VT.UnselectTerminal(ref this, ref pTerminal);
			public HRESULT EnumerateTerminals(out IEnumTerminal* ppEnumTerminal) mut => VT.EnumerateTerminals(ref this, out ppEnumTerminal);
			public HRESULT get_Terminals(out VARIANT pTerminals) mut => VT.get_Terminals(ref this, out pTerminals);
			public HRESULT get_Stream(out ITStream* ppITStream) mut => VT.get_Stream(ref this, out ppITStream);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITSubStream self) StartSubStream;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITSubStream self) PauseSubStream;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITSubStream self) StopSubStream;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITSubStream self, ref ITTerminal pTerminal) SelectTerminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITSubStream self, ref ITTerminal pTerminal) UnselectTerminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITSubStream self, out IEnumTerminal* ppEnumTerminal) EnumerateTerminals;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITSubStream self, out VARIANT pTerminals) get_Terminals;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITSubStream self, out ITStream* ppITStream) get_Stream;
			}
		}
		[CRepr]
		public struct IEnumSubStream : IUnknown
		{
			public const new Guid IID = .(0xee3bd609, 0x3868, 0x11d2, 0xa0, 0x45, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, out ITSubStream* ppElements, uint32* pceltFetched) mut => VT.Next(ref this, celt, out ppElements, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumSubStream* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumSubStream self, uint32 celt, out ITSubStream* ppElements, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumSubStream self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumSubStream self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumSubStream self, out IEnumSubStream* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct ITLegacyWaveSupport : IDispatch
		{
			public const new Guid IID = .(0x207823ea, 0xe252, 0x11d2, 0xb7, 0x7e, 0x00, 0x80, 0xc7, 0x13, 0x53, 0x81);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT IsFullDuplex(out FULLDUPLEX_SUPPORT pSupport) mut => VT.IsFullDuplex(ref this, out pSupport);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITLegacyWaveSupport self, out FULLDUPLEX_SUPPORT pSupport) IsFullDuplex;
			}
		}
		[CRepr]
		public struct ITBasicCallControl2 : ITBasicCallControl
		{
			public const new Guid IID = .(0x161a4a56, 0x1e99, 0x4b3f, 0xa4, 0x6a, 0x16, 0x8f, 0x38, 0xa5, 0xee, 0x4c);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT RequestTerminal(BSTR bstrTerminalClassGUID, int32 lMediaType, TERMINAL_DIRECTION Direction, out ITTerminal* ppTerminal) mut => VT.RequestTerminal(ref this, bstrTerminalClassGUID, lMediaType, Direction, out ppTerminal);
			public HRESULT SelectTerminalOnCall(ref ITTerminal pTerminal) mut => VT.SelectTerminalOnCall(ref this, ref pTerminal);
			public HRESULT UnselectTerminalOnCall(ref ITTerminal pTerminal) mut => VT.UnselectTerminalOnCall(ref this, ref pTerminal);

			[CRepr]
			public struct VTable : ITBasicCallControl.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl2 self, BSTR bstrTerminalClassGUID, int32 lMediaType, TERMINAL_DIRECTION Direction, out ITTerminal* ppTerminal) RequestTerminal;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl2 self, ref ITTerminal pTerminal) SelectTerminalOnCall;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITBasicCallControl2 self, ref ITTerminal pTerminal) UnselectTerminalOnCall;
			}
		}
		[CRepr]
		public struct ITScriptableAudioFormat : IDispatch
		{
			public const new Guid IID = .(0xb87658bd, 0x3c59, 0x4f64, 0xbe, 0x74, 0xae, 0xde, 0x3e, 0x86, 0xa8, 0x1e);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Channels(out int32 pVal) mut => VT.get_Channels(ref this, out pVal);
			public HRESULT put_Channels(int32 nNewVal) mut => VT.put_Channels(ref this, nNewVal);
			public HRESULT get_SamplesPerSec(out int32 pVal) mut => VT.get_SamplesPerSec(ref this, out pVal);
			public HRESULT put_SamplesPerSec(int32 nNewVal) mut => VT.put_SamplesPerSec(ref this, nNewVal);
			public HRESULT get_AvgBytesPerSec(out int32 pVal) mut => VT.get_AvgBytesPerSec(ref this, out pVal);
			public HRESULT put_AvgBytesPerSec(int32 nNewVal) mut => VT.put_AvgBytesPerSec(ref this, nNewVal);
			public HRESULT get_BlockAlign(out int32 pVal) mut => VT.get_BlockAlign(ref this, out pVal);
			public HRESULT put_BlockAlign(int32 nNewVal) mut => VT.put_BlockAlign(ref this, nNewVal);
			public HRESULT get_BitsPerSample(out int32 pVal) mut => VT.get_BitsPerSample(ref this, out pVal);
			public HRESULT put_BitsPerSample(int32 nNewVal) mut => VT.put_BitsPerSample(ref this, nNewVal);
			public HRESULT get_FormatTag(out int32 pVal) mut => VT.get_FormatTag(ref this, out pVal);
			public HRESULT put_FormatTag(int32 nNewVal) mut => VT.put_FormatTag(ref this, nNewVal);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITScriptableAudioFormat self, out int32 pVal) get_Channels;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITScriptableAudioFormat self, int32 nNewVal) put_Channels;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITScriptableAudioFormat self, out int32 pVal) get_SamplesPerSec;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITScriptableAudioFormat self, int32 nNewVal) put_SamplesPerSec;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITScriptableAudioFormat self, out int32 pVal) get_AvgBytesPerSec;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITScriptableAudioFormat self, int32 nNewVal) put_AvgBytesPerSec;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITScriptableAudioFormat self, out int32 pVal) get_BlockAlign;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITScriptableAudioFormat self, int32 nNewVal) put_BlockAlign;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITScriptableAudioFormat self, out int32 pVal) get_BitsPerSample;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITScriptableAudioFormat self, int32 nNewVal) put_BitsPerSample;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITScriptableAudioFormat self, out int32 pVal) get_FormatTag;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITScriptableAudioFormat self, int32 nNewVal) put_FormatTag;
			}
		}
		[CRepr]
		public struct ITAgent : IDispatch
		{
			public const new Guid IID = .(0x5770ece5, 0x4b27, 0x11d1, 0xbf, 0x80, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT EnumerateAgentSessions(IEnumAgentSession** ppEnumAgentSession) mut => VT.EnumerateAgentSessions(ref this, ppEnumAgentSession);
			public HRESULT CreateSession(ITACDGroup* pACDGroup, ITAddress* pAddress, ITAgentSession** ppAgentSession) mut => VT.CreateSession(ref this, pACDGroup, pAddress, ppAgentSession);
			public HRESULT CreateSessionWithPIN(ITACDGroup* pACDGroup, ITAddress* pAddress, BSTR pPIN, ITAgentSession** ppAgentSession) mut => VT.CreateSessionWithPIN(ref this, pACDGroup, pAddress, pPIN, ppAgentSession);
			public HRESULT get_ID(BSTR* ppID) mut => VT.get_ID(ref this, ppID);
			public HRESULT get_User(BSTR* ppUser) mut => VT.get_User(ref this, ppUser);
			public HRESULT put_State(AGENT_STATE AgentState) mut => VT.put_State(ref this, AgentState);
			public HRESULT get_State(out AGENT_STATE pAgentState) mut => VT.get_State(ref this, out pAgentState);
			public HRESULT put_MeasurementPeriod(int32 lPeriod) mut => VT.put_MeasurementPeriod(ref this, lPeriod);
			public HRESULT get_MeasurementPeriod(out int32 plPeriod) mut => VT.get_MeasurementPeriod(ref this, out plPeriod);
			public HRESULT get_OverallCallRate(out CY pcyCallrate) mut => VT.get_OverallCallRate(ref this, out pcyCallrate);
			public HRESULT get_NumberOfACDCalls(out int32 plCalls) mut => VT.get_NumberOfACDCalls(ref this, out plCalls);
			public HRESULT get_NumberOfIncomingCalls(out int32 plCalls) mut => VT.get_NumberOfIncomingCalls(ref this, out plCalls);
			public HRESULT get_NumberOfOutgoingCalls(out int32 plCalls) mut => VT.get_NumberOfOutgoingCalls(ref this, out plCalls);
			public HRESULT get_TotalACDTalkTime(out int32 plTalkTime) mut => VT.get_TotalACDTalkTime(ref this, out plTalkTime);
			public HRESULT get_TotalACDCallTime(out int32 plCallTime) mut => VT.get_TotalACDCallTime(ref this, out plCallTime);
			public HRESULT get_TotalWrapUpTime(out int32 plWrapUpTime) mut => VT.get_TotalWrapUpTime(ref this, out plWrapUpTime);
			public HRESULT get_AgentSessions(out VARIANT pVariant) mut => VT.get_AgentSessions(ref this, out pVariant);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, IEnumAgentSession** ppEnumAgentSession) EnumerateAgentSessions;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, ITACDGroup* pACDGroup, ITAddress* pAddress, ITAgentSession** ppAgentSession) CreateSession;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, ITACDGroup* pACDGroup, ITAddress* pAddress, BSTR pPIN, ITAgentSession** ppAgentSession) CreateSessionWithPIN;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, BSTR* ppID) get_ID;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, BSTR* ppUser) get_User;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, AGENT_STATE AgentState) put_State;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, out AGENT_STATE pAgentState) get_State;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, int32 lPeriod) put_MeasurementPeriod;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, out int32 plPeriod) get_MeasurementPeriod;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, out CY pcyCallrate) get_OverallCallRate;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, out int32 plCalls) get_NumberOfACDCalls;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, out int32 plCalls) get_NumberOfIncomingCalls;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, out int32 plCalls) get_NumberOfOutgoingCalls;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, out int32 plTalkTime) get_TotalACDTalkTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, out int32 plCallTime) get_TotalACDCallTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, out int32 plWrapUpTime) get_TotalWrapUpTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgent self, out VARIANT pVariant) get_AgentSessions;
			}
		}
		[CRepr]
		public struct ITAgentSession : IDispatch
		{
			public const new Guid IID = .(0x5afc3147, 0x4bcc, 0x11d1, 0xbf, 0x80, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Agent(ITAgent** ppAgent) mut => VT.get_Agent(ref this, ppAgent);
			public HRESULT get_Address(ITAddress** ppAddress) mut => VT.get_Address(ref this, ppAddress);
			public HRESULT get_ACDGroup(ITACDGroup** ppACDGroup) mut => VT.get_ACDGroup(ref this, ppACDGroup);
			public HRESULT put_State(AGENT_SESSION_STATE SessionState) mut => VT.put_State(ref this, SessionState);
			public HRESULT get_State(out AGENT_SESSION_STATE pSessionState) mut => VT.get_State(ref this, out pSessionState);
			public HRESULT get_SessionStartTime(out double pdateSessionStart) mut => VT.get_SessionStartTime(ref this, out pdateSessionStart);
			public HRESULT get_SessionDuration(out int32 plDuration) mut => VT.get_SessionDuration(ref this, out plDuration);
			public HRESULT get_NumberOfCalls(out int32 plCalls) mut => VT.get_NumberOfCalls(ref this, out plCalls);
			public HRESULT get_TotalTalkTime(out int32 plTalkTime) mut => VT.get_TotalTalkTime(ref this, out plTalkTime);
			public HRESULT get_AverageTalkTime(out int32 plTalkTime) mut => VT.get_AverageTalkTime(ref this, out plTalkTime);
			public HRESULT get_TotalCallTime(out int32 plCallTime) mut => VT.get_TotalCallTime(ref this, out plCallTime);
			public HRESULT get_AverageCallTime(out int32 plCallTime) mut => VT.get_AverageCallTime(ref this, out plCallTime);
			public HRESULT get_TotalWrapUpTime(out int32 plWrapUpTime) mut => VT.get_TotalWrapUpTime(ref this, out plWrapUpTime);
			public HRESULT get_AverageWrapUpTime(out int32 plWrapUpTime) mut => VT.get_AverageWrapUpTime(ref this, out plWrapUpTime);
			public HRESULT get_ACDCallRate(out CY pcyCallrate) mut => VT.get_ACDCallRate(ref this, out pcyCallrate);
			public HRESULT get_LongestTimeToAnswer(out int32 plAnswerTime) mut => VT.get_LongestTimeToAnswer(ref this, out plAnswerTime);
			public HRESULT get_AverageTimeToAnswer(out int32 plAnswerTime) mut => VT.get_AverageTimeToAnswer(ref this, out plAnswerTime);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, ITAgent** ppAgent) get_Agent;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, ITAddress** ppAddress) get_Address;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, ITACDGroup** ppACDGroup) get_ACDGroup;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, AGENT_SESSION_STATE SessionState) put_State;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, out AGENT_SESSION_STATE pSessionState) get_State;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, out double pdateSessionStart) get_SessionStartTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, out int32 plDuration) get_SessionDuration;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, out int32 plCalls) get_NumberOfCalls;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, out int32 plTalkTime) get_TotalTalkTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, out int32 plTalkTime) get_AverageTalkTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, out int32 plCallTime) get_TotalCallTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, out int32 plCallTime) get_AverageCallTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, out int32 plWrapUpTime) get_TotalWrapUpTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, out int32 plWrapUpTime) get_AverageWrapUpTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, out CY pcyCallrate) get_ACDCallRate;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, out int32 plAnswerTime) get_LongestTimeToAnswer;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSession self, out int32 plAnswerTime) get_AverageTimeToAnswer;
			}
		}
		[CRepr]
		public struct ITACDGroup : IDispatch
		{
			public const new Guid IID = .(0x5afc3148, 0x4bcc, 0x11d1, 0xbf, 0x80, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Name(BSTR* ppName) mut => VT.get_Name(ref this, ppName);
			public HRESULT EnumerateQueues(IEnumQueue** ppEnumQueue) mut => VT.EnumerateQueues(ref this, ppEnumQueue);
			public HRESULT get_Queues(out VARIANT pVariant) mut => VT.get_Queues(ref this, out pVariant);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITACDGroup self, BSTR* ppName) get_Name;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITACDGroup self, IEnumQueue** ppEnumQueue) EnumerateQueues;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITACDGroup self, out VARIANT pVariant) get_Queues;
			}
		}
		[CRepr]
		public struct ITQueue : IDispatch
		{
			public const new Guid IID = .(0x5afc3149, 0x4bcc, 0x11d1, 0xbf, 0x80, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT put_MeasurementPeriod(int32 lPeriod) mut => VT.put_MeasurementPeriod(ref this, lPeriod);
			public HRESULT get_MeasurementPeriod(out int32 plPeriod) mut => VT.get_MeasurementPeriod(ref this, out plPeriod);
			public HRESULT get_TotalCallsQueued(out int32 plCalls) mut => VT.get_TotalCallsQueued(ref this, out plCalls);
			public HRESULT get_CurrentCallsQueued(out int32 plCalls) mut => VT.get_CurrentCallsQueued(ref this, out plCalls);
			public HRESULT get_TotalCallsAbandoned(out int32 plCalls) mut => VT.get_TotalCallsAbandoned(ref this, out plCalls);
			public HRESULT get_TotalCallsFlowedIn(out int32 plCalls) mut => VT.get_TotalCallsFlowedIn(ref this, out plCalls);
			public HRESULT get_TotalCallsFlowedOut(out int32 plCalls) mut => VT.get_TotalCallsFlowedOut(ref this, out plCalls);
			public HRESULT get_LongestEverWaitTime(out int32 plWaitTime) mut => VT.get_LongestEverWaitTime(ref this, out plWaitTime);
			public HRESULT get_CurrentLongestWaitTime(out int32 plWaitTime) mut => VT.get_CurrentLongestWaitTime(ref this, out plWaitTime);
			public HRESULT get_AverageWaitTime(out int32 plWaitTime) mut => VT.get_AverageWaitTime(ref this, out plWaitTime);
			public HRESULT get_FinalDisposition(out int32 plCalls) mut => VT.get_FinalDisposition(ref this, out plCalls);
			public HRESULT get_Name(BSTR* ppName) mut => VT.get_Name(ref this, ppName);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueue self, int32 lPeriod) put_MeasurementPeriod;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueue self, out int32 plPeriod) get_MeasurementPeriod;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueue self, out int32 plCalls) get_TotalCallsQueued;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueue self, out int32 plCalls) get_CurrentCallsQueued;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueue self, out int32 plCalls) get_TotalCallsAbandoned;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueue self, out int32 plCalls) get_TotalCallsFlowedIn;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueue self, out int32 plCalls) get_TotalCallsFlowedOut;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueue self, out int32 plWaitTime) get_LongestEverWaitTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueue self, out int32 plWaitTime) get_CurrentLongestWaitTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueue self, out int32 plWaitTime) get_AverageWaitTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueue self, out int32 plCalls) get_FinalDisposition;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueue self, BSTR* ppName) get_Name;
			}
		}
		[CRepr]
		public struct ITAgentEvent : IDispatch
		{
			public const new Guid IID = .(0x5afc314a, 0x4bcc, 0x11d1, 0xbf, 0x80, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Agent(ITAgent** ppAgent) mut => VT.get_Agent(ref this, ppAgent);
			public HRESULT get_Event(out AGENT_EVENT pEvent) mut => VT.get_Event(ref this, out pEvent);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentEvent self, ITAgent** ppAgent) get_Agent;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentEvent self, out AGENT_EVENT pEvent) get_Event;
			}
		}
		[CRepr]
		public struct ITAgentSessionEvent : IDispatch
		{
			public const new Guid IID = .(0x5afc314b, 0x4bcc, 0x11d1, 0xbf, 0x80, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Session(ITAgentSession** ppSession) mut => VT.get_Session(ref this, ppSession);
			public HRESULT get_Event(out AGENT_SESSION_EVENT pEvent) mut => VT.get_Event(ref this, out pEvent);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSessionEvent self, ITAgentSession** ppSession) get_Session;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentSessionEvent self, out AGENT_SESSION_EVENT pEvent) get_Event;
			}
		}
		[CRepr]
		public struct ITACDGroupEvent : IDispatch
		{
			public const new Guid IID = .(0x297f3032, 0xbd11, 0x11d1, 0xa0, 0xa7, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Group(ITACDGroup** ppGroup) mut => VT.get_Group(ref this, ppGroup);
			public HRESULT get_Event(out ACDGROUP_EVENT pEvent) mut => VT.get_Event(ref this, out pEvent);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITACDGroupEvent self, ITACDGroup** ppGroup) get_Group;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITACDGroupEvent self, out ACDGROUP_EVENT pEvent) get_Event;
			}
		}
		[CRepr]
		public struct ITQueueEvent : IDispatch
		{
			public const new Guid IID = .(0x297f3033, 0xbd11, 0x11d1, 0xa0, 0xa7, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Queue(ITQueue** ppQueue) mut => VT.get_Queue(ref this, ppQueue);
			public HRESULT get_Event(out ACDQUEUE_EVENT pEvent) mut => VT.get_Event(ref this, out pEvent);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueueEvent self, ITQueue** ppQueue) get_Queue;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITQueueEvent self, out ACDQUEUE_EVENT pEvent) get_Event;
			}
		}
		[CRepr]
		public struct ITAgentHandlerEvent : IDispatch
		{
			public const new Guid IID = .(0x297f3034, 0xbd11, 0x11d1, 0xa0, 0xa7, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_AgentHandler(ITAgentHandler** ppAgentHandler) mut => VT.get_AgentHandler(ref this, ppAgentHandler);
			public HRESULT get_Event(out AGENTHANDLER_EVENT pEvent) mut => VT.get_Event(ref this, out pEvent);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentHandlerEvent self, ITAgentHandler** ppAgentHandler) get_AgentHandler;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentHandlerEvent self, out AGENTHANDLER_EVENT pEvent) get_Event;
			}
		}
		[CRepr]
		public struct ITTAPICallCenter : IDispatch
		{
			public const new Guid IID = .(0x5afc3154, 0x4bcc, 0x11d1, 0xbf, 0x80, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT EnumerateAgentHandlers(IEnumAgentHandler** ppEnumHandler) mut => VT.EnumerateAgentHandlers(ref this, ppEnumHandler);
			public HRESULT get_AgentHandlers(out VARIANT pVariant) mut => VT.get_AgentHandlers(ref this, out pVariant);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPICallCenter self, IEnumAgentHandler** ppEnumHandler) EnumerateAgentHandlers;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITTAPICallCenter self, out VARIANT pVariant) get_AgentHandlers;
			}
		}
		[CRepr]
		public struct ITAgentHandler : IDispatch
		{
			public const new Guid IID = .(0x587e8c22, 0x9802, 0x11d1, 0xa0, 0xa4, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Name(BSTR* ppName) mut => VT.get_Name(ref this, ppName);
			public HRESULT CreateAgent(ITAgent** ppAgent) mut => VT.CreateAgent(ref this, ppAgent);
			public HRESULT CreateAgentWithID(BSTR pID, BSTR pPIN, ITAgent** ppAgent) mut => VT.CreateAgentWithID(ref this, pID, pPIN, ppAgent);
			public HRESULT EnumerateACDGroups(IEnumACDGroup** ppEnumACDGroup) mut => VT.EnumerateACDGroups(ref this, ppEnumACDGroup);
			public HRESULT EnumerateUsableAddresses(IEnumAddress** ppEnumAddress) mut => VT.EnumerateUsableAddresses(ref this, ppEnumAddress);
			public HRESULT get_ACDGroups(out VARIANT pVariant) mut => VT.get_ACDGroups(ref this, out pVariant);
			public HRESULT get_UsableAddresses(out VARIANT pVariant) mut => VT.get_UsableAddresses(ref this, out pVariant);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentHandler self, BSTR* ppName) get_Name;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentHandler self, ITAgent** ppAgent) CreateAgent;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentHandler self, BSTR pID, BSTR pPIN, ITAgent** ppAgent) CreateAgentWithID;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentHandler self, IEnumACDGroup** ppEnumACDGroup) EnumerateACDGroups;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentHandler self, IEnumAddress** ppEnumAddress) EnumerateUsableAddresses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentHandler self, out VARIANT pVariant) get_ACDGroups;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAgentHandler self, out VARIANT pVariant) get_UsableAddresses;
			}
		}
		[CRepr]
		public struct IEnumAgent : IUnknown
		{
			public const new Guid IID = .(0x5afc314d, 0x4bcc, 0x11d1, 0xbf, 0x80, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, ITAgent** ppElements, out uint32 pceltFetched) mut => VT.Next(ref this, celt, ppElements, out pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(IEnumAgent** ppEnum) mut => VT.Clone(ref this, ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAgent self, uint32 celt, ITAgent** ppElements, out uint32 pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAgent self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAgent self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAgent self, IEnumAgent** ppEnum) Clone;
			}
		}
		[CRepr]
		public struct IEnumAgentSession : IUnknown
		{
			public const new Guid IID = .(0x5afc314e, 0x4bcc, 0x11d1, 0xbf, 0x80, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, ITAgentSession** ppElements, out uint32 pceltFetched) mut => VT.Next(ref this, celt, ppElements, out pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(IEnumAgentSession** ppEnum) mut => VT.Clone(ref this, ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAgentSession self, uint32 celt, ITAgentSession** ppElements, out uint32 pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAgentSession self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAgentSession self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAgentSession self, IEnumAgentSession** ppEnum) Clone;
			}
		}
		[CRepr]
		public struct IEnumQueue : IUnknown
		{
			public const new Guid IID = .(0x5afc3158, 0x4bcc, 0x11d1, 0xbf, 0x80, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, ITQueue** ppElements, out uint32 pceltFetched) mut => VT.Next(ref this, celt, ppElements, out pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(IEnumQueue** ppEnum) mut => VT.Clone(ref this, ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumQueue self, uint32 celt, ITQueue** ppElements, out uint32 pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumQueue self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumQueue self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumQueue self, IEnumQueue** ppEnum) Clone;
			}
		}
		[CRepr]
		public struct IEnumACDGroup : IUnknown
		{
			public const new Guid IID = .(0x5afc3157, 0x4bcc, 0x11d1, 0xbf, 0x80, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, ITACDGroup** ppElements, out uint32 pceltFetched) mut => VT.Next(ref this, celt, ppElements, out pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(IEnumACDGroup** ppEnum) mut => VT.Clone(ref this, ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumACDGroup self, uint32 celt, ITACDGroup** ppElements, out uint32 pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumACDGroup self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumACDGroup self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumACDGroup self, IEnumACDGroup** ppEnum) Clone;
			}
		}
		[CRepr]
		public struct IEnumAgentHandler : IUnknown
		{
			public const new Guid IID = .(0x587e8c28, 0x9802, 0x11d1, 0xa0, 0xa4, 0x00, 0x80, 0x5f, 0xc1, 0x47, 0xd3);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, ITAgentHandler** ppElements, out uint32 pceltFetched) mut => VT.Next(ref this, celt, ppElements, out pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(IEnumAgentHandler** ppEnum) mut => VT.Clone(ref this, ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAgentHandler self, uint32 celt, ITAgentHandler** ppElements, out uint32 pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAgentHandler self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAgentHandler self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumAgentHandler self, IEnumAgentHandler** ppEnum) Clone;
			}
		}
		[CRepr]
		public struct ITAMMediaFormat : IUnknown
		{
			public const new Guid IID = .(0x0364eb00, 0x4a77, 0x11d1, 0xa6, 0x71, 0x00, 0x60, 0x97, 0xc9, 0xa2, 0xe8);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_MediaFormat(AM_MEDIA_TYPE** ppmt) mut => VT.get_MediaFormat(ref this, ppmt);
			public HRESULT put_MediaFormat(in AM_MEDIA_TYPE pmt) mut => VT.put_MediaFormat(ref this, pmt);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAMMediaFormat self, AM_MEDIA_TYPE** ppmt) get_MediaFormat;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAMMediaFormat self, in AM_MEDIA_TYPE pmt) put_MediaFormat;
			}
		}
		[CRepr]
		public struct ITAllocatorProperties : IUnknown
		{
			public const new Guid IID = .(0xc1bc3c90, 0xbcfe, 0x11d1, 0x97, 0x45, 0x00, 0xc0, 0x4f, 0xd9, 0x1a, 0xc0);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT SetAllocatorProperties(ref ALLOCATOR_PROPERTIES pAllocProperties) mut => VT.SetAllocatorProperties(ref this, ref pAllocProperties);
			public HRESULT GetAllocatorProperties(out ALLOCATOR_PROPERTIES pAllocProperties) mut => VT.GetAllocatorProperties(ref this, out pAllocProperties);
			public HRESULT SetAllocateBuffers(BOOL bAllocBuffers) mut => VT.SetAllocateBuffers(ref this, bAllocBuffers);
			public HRESULT GetAllocateBuffers(out BOOL pbAllocBuffers) mut => VT.GetAllocateBuffers(ref this, out pbAllocBuffers);
			public HRESULT SetBufferSize(uint32 BufferSize) mut => VT.SetBufferSize(ref this, BufferSize);
			public HRESULT GetBufferSize(out uint32 pBufferSize) mut => VT.GetBufferSize(ref this, out pBufferSize);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAllocatorProperties self, ref ALLOCATOR_PROPERTIES pAllocProperties) SetAllocatorProperties;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAllocatorProperties self, out ALLOCATOR_PROPERTIES pAllocProperties) GetAllocatorProperties;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAllocatorProperties self, BOOL bAllocBuffers) SetAllocateBuffers;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAllocatorProperties self, out BOOL pbAllocBuffers) GetAllocateBuffers;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAllocatorProperties self, uint32 BufferSize) SetBufferSize;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITAllocatorProperties self, out uint32 pBufferSize) GetBufferSize;
			}
		}
		[CRepr]
		public struct ITPluggableTerminalEventSink : IUnknown
		{
			public const new Guid IID = .(0x6e0887be, 0xba1a, 0x492e, 0xbd, 0x10, 0x40, 0x20, 0xec, 0x5e, 0x33, 0xe0);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT FireEvent(in MSP_EVENT_INFO pMspEventInfo) mut => VT.FireEvent(ref this, pMspEventInfo);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPluggableTerminalEventSink self, in MSP_EVENT_INFO pMspEventInfo) FireEvent;
			}
		}
		[CRepr]
		public struct ITPluggableTerminalEventSinkRegistration : IUnknown
		{
			public const new Guid IID = .(0xf7115709, 0xa216, 0x4957, 0xa7, 0x59, 0x06, 0x0a, 0xb3, 0x2a, 0x90, 0xd1);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT RegisterSink(ITPluggableTerminalEventSink* pEventSink) mut => VT.RegisterSink(ref this, pEventSink);
			public HRESULT UnregisterSink() mut => VT.UnregisterSink(ref this);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPluggableTerminalEventSinkRegistration self, ITPluggableTerminalEventSink* pEventSink) RegisterSink;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITPluggableTerminalEventSinkRegistration self) UnregisterSink;
			}
		}
		[CRepr]
		public struct ITMSPAddress : IUnknown
		{
			public const new Guid IID = .(0xee3bd600, 0x3868, 0x11d2, 0xa0, 0x45, 0x00, 0xc0, 0x4f, 0xb6, 0x80, 0x9f);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Initialize(ref int32 hEvent) mut => VT.Initialize(ref this, ref hEvent);
			public HRESULT Shutdown() mut => VT.Shutdown(ref this);
			public HRESULT CreateMSPCall(ref int32 hCall, uint32 dwReserved, uint32 dwMediaType, IUnknown* pOuterUnknown, IUnknown** ppStreamControl) mut => VT.CreateMSPCall(ref this, ref hCall, dwReserved, dwMediaType, pOuterUnknown, ppStreamControl);
			public HRESULT ShutdownMSPCall(IUnknown* pStreamControl) mut => VT.ShutdownMSPCall(ref this, pStreamControl);
			public HRESULT ReceiveTSPData(IUnknown* pMSPCall, uint8* pBuffer, uint32 dwSize) mut => VT.ReceiveTSPData(ref this, pMSPCall, pBuffer, dwSize);
			public HRESULT GetEvent(out uint32 pdwSize, uint8* pEventBuffer) mut => VT.GetEvent(ref this, out pdwSize, pEventBuffer);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMSPAddress self, ref int32 hEvent) Initialize;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMSPAddress self) Shutdown;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMSPAddress self, ref int32 hCall, uint32 dwReserved, uint32 dwMediaType, IUnknown* pOuterUnknown, IUnknown** ppStreamControl) CreateMSPCall;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMSPAddress self, IUnknown* pStreamControl) ShutdownMSPCall;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMSPAddress self, IUnknown* pMSPCall, uint8* pBuffer, uint32 dwSize) ReceiveTSPData;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITMSPAddress self, out uint32 pdwSize, uint8* pEventBuffer) GetEvent;
			}
		}
		[CRepr]
		public struct ITTAPIDispatchEventNotification : IDispatch
		{
			public const new Guid IID = .(0x9f34325b, 0x7e62, 0x11d2, 0x94, 0x57, 0x00, 0xc0, 0x4f, 0x8e, 0xc8, 0x88);
			
			public new VTable* VT { get => (.)vt; }
			
			[CRepr]
			public struct VTable : IDispatch.VTable {}
		}
		[CRepr]
		public struct ITDirectoryObjectConference : IDispatch
		{
			public const new Guid IID = .(0xf1029e5d, 0xcb5b, 0x11d0, 0x8d, 0x59, 0x00, 0xc0, 0x4f, 0xd9, 0x1a, 0xc0);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Protocol(out BSTR ppProtocol) mut => VT.get_Protocol(ref this, out ppProtocol);
			public HRESULT get_Originator(out BSTR ppOriginator) mut => VT.get_Originator(ref this, out ppOriginator);
			public HRESULT put_Originator(BSTR pOriginator) mut => VT.put_Originator(ref this, pOriginator);
			public HRESULT get_AdvertisingScope(out RND_ADVERTISING_SCOPE pAdvertisingScope) mut => VT.get_AdvertisingScope(ref this, out pAdvertisingScope);
			public HRESULT put_AdvertisingScope(RND_ADVERTISING_SCOPE AdvertisingScope) mut => VT.put_AdvertisingScope(ref this, AdvertisingScope);
			public HRESULT get_Url(out BSTR ppUrl) mut => VT.get_Url(ref this, out ppUrl);
			public HRESULT put_Url(BSTR pUrl) mut => VT.put_Url(ref this, pUrl);
			public HRESULT get_Description(out BSTR ppDescription) mut => VT.get_Description(ref this, out ppDescription);
			public HRESULT put_Description(BSTR pDescription) mut => VT.put_Description(ref this, pDescription);
			public HRESULT get_IsEncrypted(out int16 pfEncrypted) mut => VT.get_IsEncrypted(ref this, out pfEncrypted);
			public HRESULT put_IsEncrypted(int16 fEncrypted) mut => VT.put_IsEncrypted(ref this, fEncrypted);
			public HRESULT get_StartTime(out double pDate) mut => VT.get_StartTime(ref this, out pDate);
			public HRESULT put_StartTime(double Date) mut => VT.put_StartTime(ref this, Date);
			public HRESULT get_StopTime(out double pDate) mut => VT.get_StopTime(ref this, out pDate);
			public HRESULT put_StopTime(double Date) mut => VT.put_StopTime(ref this, Date);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, out BSTR ppProtocol) get_Protocol;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, out BSTR ppOriginator) get_Originator;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, BSTR pOriginator) put_Originator;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, out RND_ADVERTISING_SCOPE pAdvertisingScope) get_AdvertisingScope;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, RND_ADVERTISING_SCOPE AdvertisingScope) put_AdvertisingScope;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, out BSTR ppUrl) get_Url;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, BSTR pUrl) put_Url;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, out BSTR ppDescription) get_Description;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, BSTR pDescription) put_Description;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, out int16 pfEncrypted) get_IsEncrypted;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, int16 fEncrypted) put_IsEncrypted;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, out double pDate) get_StartTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, double Date) put_StartTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, out double pDate) get_StopTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectConference self, double Date) put_StopTime;
			}
		}
		[CRepr]
		public struct ITDirectoryObjectUser : IDispatch
		{
			public const new Guid IID = .(0x34621d6f, 0x6cff, 0x11d1, 0xaf, 0xf7, 0x00, 0xc0, 0x4f, 0xc3, 0x1f, 0xee);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_IPPhonePrimary(out BSTR ppName) mut => VT.get_IPPhonePrimary(ref this, out ppName);
			public HRESULT put_IPPhonePrimary(BSTR pName) mut => VT.put_IPPhonePrimary(ref this, pName);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectUser self, out BSTR ppName) get_IPPhonePrimary;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObjectUser self, BSTR pName) put_IPPhonePrimary;
			}
		}
		[CRepr]
		public struct IEnumDialableAddrs : IUnknown
		{
			public const new Guid IID = .(0x34621d70, 0x6cff, 0x11d1, 0xaf, 0xf7, 0x00, 0xc0, 0x4f, 0xc3, 0x1f, 0xee);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, BSTR* ppElements, uint32* pcFetched) mut => VT.Next(ref this, celt, ppElements, pcFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumDialableAddrs* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumDialableAddrs self, uint32 celt, BSTR* ppElements, uint32* pcFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumDialableAddrs self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumDialableAddrs self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumDialableAddrs self, out IEnumDialableAddrs* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct ITDirectoryObject : IDispatch
		{
			public const new Guid IID = .(0x34621d6e, 0x6cff, 0x11d1, 0xaf, 0xf7, 0x00, 0xc0, 0x4f, 0xc3, 0x1f, 0xee);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_ObjectType(out DIRECTORY_OBJECT_TYPE pObjectType) mut => VT.get_ObjectType(ref this, out pObjectType);
			public HRESULT get_Name(out BSTR ppName) mut => VT.get_Name(ref this, out ppName);
			public HRESULT put_Name(BSTR pName) mut => VT.put_Name(ref this, pName);
			public HRESULT get_DialableAddrs(int32 dwAddressType, out VARIANT pVariant) mut => VT.get_DialableAddrs(ref this, dwAddressType, out pVariant);
			public HRESULT EnumerateDialableAddrs(uint32 dwAddressType, out IEnumDialableAddrs* ppEnumDialableAddrs) mut => VT.EnumerateDialableAddrs(ref this, dwAddressType, out ppEnumDialableAddrs);
			public HRESULT get_SecurityDescriptor(out IDispatch* ppSecDes) mut => VT.get_SecurityDescriptor(ref this, out ppSecDes);
			public HRESULT put_SecurityDescriptor(ref IDispatch pSecDes) mut => VT.put_SecurityDescriptor(ref this, ref pSecDes);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObject self, out DIRECTORY_OBJECT_TYPE pObjectType) get_ObjectType;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObject self, out BSTR ppName) get_Name;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObject self, BSTR pName) put_Name;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObject self, int32 dwAddressType, out VARIANT pVariant) get_DialableAddrs;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObject self, uint32 dwAddressType, out IEnumDialableAddrs* ppEnumDialableAddrs) EnumerateDialableAddrs;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObject self, out IDispatch* ppSecDes) get_SecurityDescriptor;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectoryObject self, ref IDispatch pSecDes) put_SecurityDescriptor;
			}
		}
		[CRepr]
		public struct IEnumDirectoryObject : IUnknown
		{
			public const new Guid IID = .(0x06c9b64a, 0x306d, 0x11d1, 0x97, 0x74, 0x00, 0xc0, 0x4f, 0xd9, 0x1a, 0xc0);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, ITDirectoryObject** pVal, uint32* pcFetched) mut => VT.Next(ref this, celt, pVal, pcFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumDirectoryObject* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumDirectoryObject self, uint32 celt, ITDirectoryObject** pVal, uint32* pcFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumDirectoryObject self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumDirectoryObject self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumDirectoryObject self, out IEnumDirectoryObject* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct ITILSConfig : IDispatch
		{
			public const new Guid IID = .(0x34621d72, 0x6cff, 0x11d1, 0xaf, 0xf7, 0x00, 0xc0, 0x4f, 0xc3, 0x1f, 0xee);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Port(out int32 pPort) mut => VT.get_Port(ref this, out pPort);
			public HRESULT put_Port(int32 Port) mut => VT.put_Port(ref this, Port);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITILSConfig self, out int32 pPort) get_Port;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITILSConfig self, int32 Port) put_Port;
			}
		}
		[CRepr]
		public struct ITDirectory : IDispatch
		{
			public const new Guid IID = .(0x34621d6c, 0x6cff, 0x11d1, 0xaf, 0xf7, 0x00, 0xc0, 0x4f, 0xc3, 0x1f, 0xee);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_DirectoryType(out DIRECTORY_TYPE pDirectoryType) mut => VT.get_DirectoryType(ref this, out pDirectoryType);
			public HRESULT get_DisplayName(out BSTR pName) mut => VT.get_DisplayName(ref this, out pName);
			public HRESULT get_IsDynamic(out int16 pfDynamic) mut => VT.get_IsDynamic(ref this, out pfDynamic);
			public HRESULT get_DefaultObjectTTL(out int32 pTTL) mut => VT.get_DefaultObjectTTL(ref this, out pTTL);
			public HRESULT put_DefaultObjectTTL(int32 TTL) mut => VT.put_DefaultObjectTTL(ref this, TTL);
			public HRESULT EnableAutoRefresh(int16 fEnable) mut => VT.EnableAutoRefresh(ref this, fEnable);
			public HRESULT Connect(int16 fSecure) mut => VT.Connect(ref this, fSecure);
			public HRESULT Bind(BSTR pDomainName, BSTR pUserName, BSTR pPassword, int32 lFlags) mut => VT.Bind(ref this, pDomainName, pUserName, pPassword, lFlags);
			public HRESULT AddDirectoryObject(ref ITDirectoryObject pDirectoryObject) mut => VT.AddDirectoryObject(ref this, ref pDirectoryObject);
			public HRESULT ModifyDirectoryObject(ref ITDirectoryObject pDirectoryObject) mut => VT.ModifyDirectoryObject(ref this, ref pDirectoryObject);
			public HRESULT RefreshDirectoryObject(ref ITDirectoryObject pDirectoryObject) mut => VT.RefreshDirectoryObject(ref this, ref pDirectoryObject);
			public HRESULT DeleteDirectoryObject(ref ITDirectoryObject pDirectoryObject) mut => VT.DeleteDirectoryObject(ref this, ref pDirectoryObject);
			public HRESULT get_DirectoryObjects(DIRECTORY_OBJECT_TYPE DirectoryObjectType, BSTR pName, out VARIANT pVariant) mut => VT.get_DirectoryObjects(ref this, DirectoryObjectType, pName, out pVariant);
			public HRESULT EnumerateDirectoryObjects(DIRECTORY_OBJECT_TYPE DirectoryObjectType, BSTR pName, out IEnumDirectoryObject* ppEnumObject) mut => VT.EnumerateDirectoryObjects(ref this, DirectoryObjectType, pName, out ppEnumObject);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, out DIRECTORY_TYPE pDirectoryType) get_DirectoryType;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, out BSTR pName) get_DisplayName;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, out int16 pfDynamic) get_IsDynamic;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, out int32 pTTL) get_DefaultObjectTTL;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, int32 TTL) put_DefaultObjectTTL;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, int16 fEnable) EnableAutoRefresh;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, int16 fSecure) Connect;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, BSTR pDomainName, BSTR pUserName, BSTR pPassword, int32 lFlags) Bind;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, ref ITDirectoryObject pDirectoryObject) AddDirectoryObject;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, ref ITDirectoryObject pDirectoryObject) ModifyDirectoryObject;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, ref ITDirectoryObject pDirectoryObject) RefreshDirectoryObject;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, ref ITDirectoryObject pDirectoryObject) DeleteDirectoryObject;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, DIRECTORY_OBJECT_TYPE DirectoryObjectType, BSTR pName, out VARIANT pVariant) get_DirectoryObjects;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITDirectory self, DIRECTORY_OBJECT_TYPE DirectoryObjectType, BSTR pName, out IEnumDirectoryObject* ppEnumObject) EnumerateDirectoryObjects;
			}
		}
		[CRepr]
		public struct IEnumDirectory : IUnknown
		{
			public const new Guid IID = .(0x34621d6d, 0x6cff, 0x11d1, 0xaf, 0xf7, 0x00, 0xc0, 0x4f, 0xc3, 0x1f, 0xee);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, ITDirectory** ppElements, uint32* pcFetched) mut => VT.Next(ref this, celt, ppElements, pcFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(out IEnumDirectory* ppEnum) mut => VT.Clone(ref this, out ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumDirectory self, uint32 celt, ITDirectory** ppElements, uint32* pcFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumDirectory self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumDirectory self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumDirectory self, out IEnumDirectory* ppEnum) Clone;
			}
		}
		[CRepr]
		public struct ITRendezvous : IDispatch
		{
			public const new Guid IID = .(0x34621d6b, 0x6cff, 0x11d1, 0xaf, 0xf7, 0x00, 0xc0, 0x4f, 0xc3, 0x1f, 0xee);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_DefaultDirectories(out VARIANT pVariant) mut => VT.get_DefaultDirectories(ref this, out pVariant);
			public HRESULT EnumerateDefaultDirectories(out IEnumDirectory* ppEnumDirectory) mut => VT.EnumerateDefaultDirectories(ref this, out ppEnumDirectory);
			public HRESULT CreateDirectory(DIRECTORY_TYPE DirectoryType, BSTR pName, out ITDirectory* ppDir) mut => VT.CreateDirectory(ref this, DirectoryType, pName, out ppDir);
			public HRESULT CreateDirectoryObject(DIRECTORY_OBJECT_TYPE DirectoryObjectType, BSTR pName, out ITDirectoryObject* ppDirectoryObject) mut => VT.CreateDirectoryObject(ref this, DirectoryObjectType, pName, out ppDirectoryObject);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITRendezvous self, out VARIANT pVariant) get_DefaultDirectories;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITRendezvous self, out IEnumDirectory* ppEnumDirectory) EnumerateDefaultDirectories;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITRendezvous self, DIRECTORY_TYPE DirectoryType, BSTR pName, out ITDirectory* ppDir) CreateDirectory;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITRendezvous self, DIRECTORY_OBJECT_TYPE DirectoryObjectType, BSTR pName, out ITDirectoryObject* ppDirectoryObject) CreateDirectoryObject;
			}
		}
		[CRepr]
		public struct IMcastScope : IDispatch
		{
			public const new Guid IID = .(0xdf0daef4, 0xa289, 0x11d1, 0x86, 0x97, 0x00, 0x60, 0x08, 0xb0, 0xe5, 0xd2);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_ScopeID(out int32 pID) mut => VT.get_ScopeID(ref this, out pID);
			public HRESULT get_ServerID(out int32 pID) mut => VT.get_ServerID(ref this, out pID);
			public HRESULT get_InterfaceID(out int32 pID) mut => VT.get_InterfaceID(ref this, out pID);
			public HRESULT get_ScopeDescription(BSTR* ppDescription) mut => VT.get_ScopeDescription(ref this, ppDescription);
			public HRESULT get_TTL(out int32 pTTL) mut => VT.get_TTL(ref this, out pTTL);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastScope self, out int32 pID) get_ScopeID;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastScope self, out int32 pID) get_ServerID;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastScope self, out int32 pID) get_InterfaceID;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastScope self, BSTR* ppDescription) get_ScopeDescription;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastScope self, out int32 pTTL) get_TTL;
			}
		}
		[CRepr]
		public struct IMcastLeaseInfo : IDispatch
		{
			public const new Guid IID = .(0xdf0daefd, 0xa289, 0x11d1, 0x86, 0x97, 0x00, 0x60, 0x08, 0xb0, 0xe5, 0xd2);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_RequestID(BSTR* ppRequestID) mut => VT.get_RequestID(ref this, ppRequestID);
			public HRESULT get_LeaseStartTime(out double pTime) mut => VT.get_LeaseStartTime(ref this, out pTime);
			public HRESULT put_LeaseStartTime(double time) mut => VT.put_LeaseStartTime(ref this, time);
			public HRESULT get_LeaseStopTime(out double pTime) mut => VT.get_LeaseStopTime(ref this, out pTime);
			public HRESULT put_LeaseStopTime(double time) mut => VT.put_LeaseStopTime(ref this, time);
			public HRESULT get_AddressCount(out int32 pCount) mut => VT.get_AddressCount(ref this, out pCount);
			public HRESULT get_ServerAddress(BSTR* ppAddress) mut => VT.get_ServerAddress(ref this, ppAddress);
			public HRESULT get_TTL(out int32 pTTL) mut => VT.get_TTL(ref this, out pTTL);
			public HRESULT get_Addresses(out VARIANT pVariant) mut => VT.get_Addresses(ref this, out pVariant);
			public HRESULT EnumerateAddresses(IEnumBstr** ppEnumAddresses) mut => VT.EnumerateAddresses(ref this, ppEnumAddresses);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastLeaseInfo self, BSTR* ppRequestID) get_RequestID;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastLeaseInfo self, out double pTime) get_LeaseStartTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastLeaseInfo self, double time) put_LeaseStartTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastLeaseInfo self, out double pTime) get_LeaseStopTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastLeaseInfo self, double time) put_LeaseStopTime;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastLeaseInfo self, out int32 pCount) get_AddressCount;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastLeaseInfo self, BSTR* ppAddress) get_ServerAddress;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastLeaseInfo self, out int32 pTTL) get_TTL;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastLeaseInfo self, out VARIANT pVariant) get_Addresses;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastLeaseInfo self, IEnumBstr** ppEnumAddresses) EnumerateAddresses;
			}
		}
		[CRepr]
		public struct IEnumMcastScope : IUnknown
		{
			public const new Guid IID = .(0xdf0daf09, 0xa289, 0x11d1, 0x86, 0x97, 0x00, 0x60, 0x08, 0xb0, 0xe5, 0xd2);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT Next(uint32 celt, IMcastScope** ppScopes, uint32* pceltFetched) mut => VT.Next(ref this, celt, ppScopes, pceltFetched);
			public HRESULT Reset() mut => VT.Reset(ref this);
			public HRESULT Skip(uint32 celt) mut => VT.Skip(ref this, celt);
			public HRESULT Clone(IEnumMcastScope** ppEnum) mut => VT.Clone(ref this, ppEnum);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumMcastScope self, uint32 celt, IMcastScope** ppScopes, uint32* pceltFetched) Next;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumMcastScope self) Reset;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumMcastScope self, uint32 celt) Skip;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IEnumMcastScope self, IEnumMcastScope** ppEnum) Clone;
			}
		}
		[CRepr]
		public struct IMcastAddressAllocation : IDispatch
		{
			public const new Guid IID = .(0xdf0daef1, 0xa289, 0x11d1, 0x86, 0x97, 0x00, 0x60, 0x08, 0xb0, 0xe5, 0xd2);
			
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT get_Scopes(out VARIANT pVariant) mut => VT.get_Scopes(ref this, out pVariant);
			public HRESULT EnumerateScopes(IEnumMcastScope** ppEnumMcastScope) mut => VT.EnumerateScopes(ref this, ppEnumMcastScope);
			public HRESULT RequestAddress(IMcastScope* pScope, double LeaseStartTime, double LeaseStopTime, int32 NumAddresses, IMcastLeaseInfo** ppLeaseResponse) mut => VT.RequestAddress(ref this, pScope, LeaseStartTime, LeaseStopTime, NumAddresses, ppLeaseResponse);
			public HRESULT RenewAddress(int32 lReserved, IMcastLeaseInfo* pRenewRequest, IMcastLeaseInfo** ppRenewResponse) mut => VT.RenewAddress(ref this, lReserved, pRenewRequest, ppRenewResponse);
			public HRESULT ReleaseAddress(IMcastLeaseInfo* pReleaseRequest) mut => VT.ReleaseAddress(ref this, pReleaseRequest);
			public HRESULT CreateLeaseInfo(double LeaseStartTime, double LeaseStopTime, uint32 dwNumAddresses, PWSTR* ppAddresses, PWSTR pRequestID, PWSTR pServerAddress, IMcastLeaseInfo** ppReleaseRequest) mut => VT.CreateLeaseInfo(ref this, LeaseStartTime, LeaseStopTime, dwNumAddresses, ppAddresses, pRequestID, pServerAddress, ppReleaseRequest);
			public HRESULT CreateLeaseInfoFromVariant(double LeaseStartTime, double LeaseStopTime, VARIANT vAddresses, BSTR pRequestID, BSTR pServerAddress, IMcastLeaseInfo** ppReleaseRequest) mut => VT.CreateLeaseInfoFromVariant(ref this, LeaseStartTime, LeaseStopTime, vAddresses, pRequestID, pServerAddress, ppReleaseRequest);

			[CRepr]
			public struct VTable : IDispatch.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastAddressAllocation self, out VARIANT pVariant) get_Scopes;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastAddressAllocation self, IEnumMcastScope** ppEnumMcastScope) EnumerateScopes;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastAddressAllocation self, IMcastScope* pScope, double LeaseStartTime, double LeaseStopTime, int32 NumAddresses, IMcastLeaseInfo** ppLeaseResponse) RequestAddress;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastAddressAllocation self, int32 lReserved, IMcastLeaseInfo* pRenewRequest, IMcastLeaseInfo** ppRenewResponse) RenewAddress;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastAddressAllocation self, IMcastLeaseInfo* pReleaseRequest) ReleaseAddress;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastAddressAllocation self, double LeaseStartTime, double LeaseStopTime, uint32 dwNumAddresses, PWSTR* ppAddresses, PWSTR pRequestID, PWSTR pServerAddress, IMcastLeaseInfo** ppReleaseRequest) CreateLeaseInfo;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref IMcastAddressAllocation self, double LeaseStartTime, double LeaseStopTime, VARIANT vAddresses, BSTR pRequestID, BSTR pServerAddress, IMcastLeaseInfo** ppReleaseRequest) CreateLeaseInfoFromVariant;
			}
		}
		[CRepr]
		public struct ITnef : IUnknown
		{
			public new VTable* VT { get => (.)vt; }
			
			public HRESULT AddProps(uint32 ulFlags, uint32 ulElemID, void* lpvData, out SPropTagArray lpPropList) mut => VT.AddProps(ref this, ulFlags, ulElemID, lpvData, out lpPropList);
			public HRESULT ExtractProps(uint32 ulFlags, out SPropTagArray lpPropList, out STnefProblemArray* lpProblems) mut => VT.ExtractProps(ref this, ulFlags, out lpPropList, out lpProblems);
			public HRESULT Finish(uint32 ulFlags, out uint16 lpKey, out STnefProblemArray* lpProblems) mut => VT.Finish(ref this, ulFlags, out lpKey, out lpProblems);
			public HRESULT OpenTaggedBody(ref IMessage lpMessage, uint32 ulFlags, out IStream* lppStream) mut => VT.OpenTaggedBody(ref this, ref lpMessage, ulFlags, out lppStream);
			public HRESULT SetProps(uint32 ulFlags, uint32 ulElemID, uint32 cValues, out SPropValue lpProps) mut => VT.SetProps(ref this, ulFlags, ulElemID, cValues, out lpProps);
			public HRESULT EncodeRecips(uint32 ulFlags, ref IMAPITable lpRecipientTable) mut => VT.EncodeRecips(ref this, ulFlags, ref lpRecipientTable);
			public HRESULT FinishComponent(uint32 ulFlags, uint32 ulComponentID, out SPropTagArray lpCustomPropList, out SPropValue lpCustomProps, out SPropTagArray lpPropList, out STnefProblemArray* lpProblems) mut => VT.FinishComponent(ref this, ulFlags, ulComponentID, out lpCustomPropList, out lpCustomProps, out lpPropList, out lpProblems);

			[CRepr]
			public struct VTable : IUnknown.VTable
			{
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITnef self, uint32 ulFlags, uint32 ulElemID, void* lpvData, out SPropTagArray lpPropList) AddProps;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITnef self, uint32 ulFlags, out SPropTagArray lpPropList, out STnefProblemArray* lpProblems) ExtractProps;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITnef self, uint32 ulFlags, out uint16 lpKey, out STnefProblemArray* lpProblems) Finish;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITnef self, ref IMessage lpMessage, uint32 ulFlags, out IStream* lppStream) OpenTaggedBody;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITnef self, uint32 ulFlags, uint32 ulElemID, uint32 cValues, out SPropValue lpProps) SetProps;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITnef self, uint32 ulFlags, ref IMAPITable lpRecipientTable) EncodeRecips;
				public new function [CallingConvention(.Stdcall)] HRESULT(ref ITnef self, uint32 ulFlags, uint32 ulComponentID, out SPropTagArray lpCustomPropList, out SPropValue lpCustomProps, out SPropTagArray lpPropList, out STnefProblemArray* lpProblems) FinishComponent;
			}
		}
		
		// --- Functions ---
		
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineAccept(uint32 hCall, PSTR lpsUserUserInfo, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineAddProvider(PSTR lpszProviderFilename, HWND hwndOwner, out uint32 lpdwPermanentProviderID);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineAddProviderA(PSTR lpszProviderFilename, HWND hwndOwner, out uint32 lpdwPermanentProviderID);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineAddProviderW(PWSTR lpszProviderFilename, HWND hwndOwner, out uint32 lpdwPermanentProviderID);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineAddToConference(uint32 hConfCall, uint32 hConsultCall);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineAgentSpecific(uint32 hLine, uint32 dwAddressID, uint32 dwAgentExtensionIDIndex, void* lpParams, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineAnswer(uint32 hCall, PSTR lpsUserUserInfo, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineBlindTransfer(uint32 hCall, PSTR lpszDestAddress, uint32 dwCountryCode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineBlindTransferA(uint32 hCall, PSTR lpszDestAddress, uint32 dwCountryCode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineBlindTransferW(uint32 hCall, PWSTR lpszDestAddressW, uint32 dwCountryCode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineClose(uint32 hLine);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineCompleteCall(uint32 hCall, out uint32 lpdwCompletionID, uint32 dwCompletionMode, uint32 dwMessageID);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineCompleteTransfer(uint32 hCall, uint32 hConsultCall, out uint32 lphConfCall, uint32 dwTransferMode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineConfigDialog(uint32 dwDeviceID, HWND hwndOwner, PSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineConfigDialogA(uint32 dwDeviceID, HWND hwndOwner, PSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineConfigDialogW(uint32 dwDeviceID, HWND hwndOwner, PWSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineConfigDialogEdit(uint32 dwDeviceID, HWND hwndOwner, PSTR lpszDeviceClass, void* lpDeviceConfigIn, uint32 dwSize, out VARSTRING lpDeviceConfigOut);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineConfigDialogEditA(uint32 dwDeviceID, HWND hwndOwner, PSTR lpszDeviceClass, void* lpDeviceConfigIn, uint32 dwSize, out VARSTRING lpDeviceConfigOut);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineConfigDialogEditW(uint32 dwDeviceID, HWND hwndOwner, PWSTR lpszDeviceClass, void* lpDeviceConfigIn, uint32 dwSize, out VARSTRING lpDeviceConfigOut);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineConfigProvider(HWND hwndOwner, uint32 dwPermanentProviderID);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineCreateAgentW(uint32 hLine, PWSTR lpszAgentID, PWSTR lpszAgentPIN, out uint32 lphAgent);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineCreateAgentA(uint32 hLine, PSTR lpszAgentID, PSTR lpszAgentPIN, out uint32 lphAgent);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineCreateAgentSessionW(uint32 hLine, uint32 hAgent, PWSTR lpszAgentPIN, uint32 dwWorkingAddressID, out Guid lpGroupID, out uint32 lphAgentSession);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineCreateAgentSessionA(uint32 hLine, uint32 hAgent, PSTR lpszAgentPIN, uint32 dwWorkingAddressID, out Guid lpGroupID, out uint32 lphAgentSession);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineDeallocateCall(uint32 hCall);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineDevSpecific(uint32 hLine, uint32 dwAddressID, uint32 hCall, void* lpParams, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineDevSpecificFeature(uint32 hLine, uint32 dwFeature, void* lpParams, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineDial(uint32 hCall, PSTR lpszDestAddress, uint32 dwCountryCode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineDialA(uint32 hCall, PSTR lpszDestAddress, uint32 dwCountryCode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineDialW(uint32 hCall, PWSTR lpszDestAddress, uint32 dwCountryCode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineDrop(uint32 hCall, PSTR lpsUserUserInfo, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineForward(uint32 hLine, uint32 bAllAddresses, uint32 dwAddressID, in LINEFORWARDLIST lpForwardList, uint32 dwNumRingsNoAnswer, out uint32 lphConsultCall, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineForwardA(uint32 hLine, uint32 bAllAddresses, uint32 dwAddressID, in LINEFORWARDLIST lpForwardList, uint32 dwNumRingsNoAnswer, out uint32 lphConsultCall, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineForwardW(uint32 hLine, uint32 bAllAddresses, uint32 dwAddressID, in LINEFORWARDLIST lpForwardList, uint32 dwNumRingsNoAnswer, out uint32 lphConsultCall, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGatherDigits(uint32 hCall, uint32 dwDigitModes, uint8* lpsDigits, uint32 dwNumDigits, PSTR lpszTerminationDigits, uint32 dwFirstDigitTimeout, uint32 dwInterDigitTimeout);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGatherDigitsA(uint32 hCall, uint32 dwDigitModes, uint8* lpsDigits, uint32 dwNumDigits, PSTR lpszTerminationDigits, uint32 dwFirstDigitTimeout, uint32 dwInterDigitTimeout);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGatherDigitsW(uint32 hCall, uint32 dwDigitModes, char16* lpsDigits, uint32 dwNumDigits, PWSTR lpszTerminationDigits, uint32 dwFirstDigitTimeout, uint32 dwInterDigitTimeout);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGenerateDigits(uint32 hCall, uint32 dwDigitMode, PSTR lpszDigits, uint32 dwDuration);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGenerateDigitsA(uint32 hCall, uint32 dwDigitMode, PSTR lpszDigits, uint32 dwDuration);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGenerateDigitsW(uint32 hCall, uint32 dwDigitMode, PWSTR lpszDigits, uint32 dwDuration);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGenerateTone(uint32 hCall, uint32 dwToneMode, uint32 dwDuration, uint32 dwNumTones, in LINEGENERATETONE lpTones);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAddressCaps(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAddressID, uint32 dwAPIVersion, uint32 dwExtVersion, out LINEADDRESSCAPS lpAddressCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAddressCapsA(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAddressID, uint32 dwAPIVersion, uint32 dwExtVersion, out LINEADDRESSCAPS lpAddressCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAddressCapsW(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAddressID, uint32 dwAPIVersion, uint32 dwExtVersion, out LINEADDRESSCAPS lpAddressCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAddressID(uint32 hLine, out uint32 lpdwAddressID, uint32 dwAddressMode, PSTR lpsAddress, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAddressIDA(uint32 hLine, out uint32 lpdwAddressID, uint32 dwAddressMode, PSTR lpsAddress, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAddressIDW(uint32 hLine, out uint32 lpdwAddressID, uint32 dwAddressMode, PWSTR lpsAddress, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAddressStatus(uint32 hLine, uint32 dwAddressID, out LINEADDRESSSTATUS lpAddressStatus);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAddressStatusA(uint32 hLine, uint32 dwAddressID, out LINEADDRESSSTATUS lpAddressStatus);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAddressStatusW(uint32 hLine, uint32 dwAddressID, out LINEADDRESSSTATUS lpAddressStatus);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAgentActivityListA(uint32 hLine, uint32 dwAddressID, out LINEAGENTACTIVITYLIST lpAgentActivityList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAgentActivityListW(uint32 hLine, uint32 dwAddressID, out LINEAGENTACTIVITYLIST lpAgentActivityList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAgentCapsA(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAddressID, uint32 dwAppAPIVersion, out LINEAGENTCAPS lpAgentCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAgentCapsW(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAddressID, uint32 dwAppAPIVersion, out LINEAGENTCAPS lpAgentCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAgentGroupListA(uint32 hLine, uint32 dwAddressID, out LINEAGENTGROUPLIST lpAgentGroupList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAgentGroupListW(uint32 hLine, uint32 dwAddressID, out LINEAGENTGROUPLIST lpAgentGroupList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAgentInfo(uint32 hLine, uint32 hAgent, out LINEAGENTINFO lpAgentInfo);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAgentSessionInfo(uint32 hLine, uint32 hAgentSession, out LINEAGENTSESSIONINFO lpAgentSessionInfo);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAgentSessionList(uint32 hLine, uint32 hAgent, out LINEAGENTSESSIONLIST lpAgentSessionList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAgentStatusA(uint32 hLine, uint32 dwAddressID, out LINEAGENTSTATUS lpAgentStatus);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAgentStatusW(uint32 hLine, uint32 dwAddressID, out LINEAGENTSTATUS lpAgentStatus);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAppPriority(PSTR lpszAppFilename, uint32 dwMediaMode, out LINEEXTENSIONID lpExtensionID, uint32 dwRequestMode, out VARSTRING lpExtensionName, out uint32 lpdwPriority);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAppPriorityA(PSTR lpszAppFilename, uint32 dwMediaMode, out LINEEXTENSIONID lpExtensionID, uint32 dwRequestMode, out VARSTRING lpExtensionName, out uint32 lpdwPriority);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetAppPriorityW(PWSTR lpszAppFilename, uint32 dwMediaMode, out LINEEXTENSIONID lpExtensionID, uint32 dwRequestMode, out VARSTRING lpExtensionName, out uint32 lpdwPriority);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetCallInfo(uint32 hCall, out LINECALLINFO lpCallInfo);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetCallInfoA(uint32 hCall, out LINECALLINFO lpCallInfo);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetCallInfoW(uint32 hCall, out LINECALLINFO lpCallInfo);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetCallStatus(uint32 hCall, out LINECALLSTATUS lpCallStatus);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetConfRelatedCalls(uint32 hCall, out LINECALLLIST lpCallList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetCountry(uint32 dwCountryID, uint32 dwAPIVersion, out LINECOUNTRYLIST lpLineCountryList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetCountryA(uint32 dwCountryID, uint32 dwAPIVersion, out LINECOUNTRYLIST lpLineCountryList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetCountryW(uint32 dwCountryID, uint32 dwAPIVersion, out LINECOUNTRYLIST lpLineCountryList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetDevCaps(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAPIVersion, uint32 dwExtVersion, out LINEDEVCAPS lpLineDevCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetDevCapsA(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAPIVersion, uint32 dwExtVersion, out LINEDEVCAPS lpLineDevCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetDevCapsW(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAPIVersion, uint32 dwExtVersion, out LINEDEVCAPS lpLineDevCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetDevConfig(uint32 dwDeviceID, out VARSTRING lpDeviceConfig, PSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetDevConfigA(uint32 dwDeviceID, out VARSTRING lpDeviceConfig, PSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetDevConfigW(uint32 dwDeviceID, out VARSTRING lpDeviceConfig, PWSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetGroupListA(uint32 hLine, out LINEAGENTGROUPLIST lpGroupList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetGroupListW(uint32 hLine, out LINEAGENTGROUPLIST lpGroupList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetIcon(uint32 dwDeviceID, PSTR lpszDeviceClass, out int lphIcon);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetIconA(uint32 dwDeviceID, PSTR lpszDeviceClass, out int lphIcon);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetIconW(uint32 dwDeviceID, PWSTR lpszDeviceClass, out int lphIcon);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetID(uint32 hLine, uint32 dwAddressID, uint32 hCall, uint32 dwSelect, out VARSTRING lpDeviceID, PSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetIDA(uint32 hLine, uint32 dwAddressID, uint32 hCall, uint32 dwSelect, out VARSTRING lpDeviceID, PSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetIDW(uint32 hLine, uint32 dwAddressID, uint32 hCall, uint32 dwSelect, out VARSTRING lpDeviceID, PWSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetLineDevStatus(uint32 hLine, out LINEDEVSTATUS lpLineDevStatus);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetLineDevStatusA(uint32 hLine, out LINEDEVSTATUS lpLineDevStatus);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetLineDevStatusW(uint32 hLine, out LINEDEVSTATUS lpLineDevStatus);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetMessage(uint32 hLineApp, out LINEMESSAGE lpMessage, uint32 dwTimeout);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetNewCalls(uint32 hLine, uint32 dwAddressID, uint32 dwSelect, out LINECALLLIST lpCallList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetNumRings(uint32 hLine, uint32 dwAddressID, out uint32 lpdwNumRings);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetProviderList(uint32 dwAPIVersion, out LINEPROVIDERLIST lpProviderList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetProviderListA(uint32 dwAPIVersion, out LINEPROVIDERLIST lpProviderList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetProviderListW(uint32 dwAPIVersion, out LINEPROVIDERLIST lpProviderList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetProxyStatus(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAppAPIVersion, out LINEPROXYREQUESTLIST lpLineProxyReqestList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetQueueInfo(uint32 hLine, uint32 dwQueueID, out LINEQUEUEINFO lpLineQueueInfo);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetQueueListA(uint32 hLine, out Guid lpGroupID, out LINEQUEUELIST lpQueueList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetQueueListW(uint32 hLine, out Guid lpGroupID, out LINEQUEUELIST lpQueueList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetRequest(uint32 hLineApp, uint32 dwRequestMode, void* lpRequestBuffer);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetRequestA(uint32 hLineApp, uint32 dwRequestMode, void* lpRequestBuffer);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetRequestW(uint32 hLineApp, uint32 dwRequestMode, void* lpRequestBuffer);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetStatusMessages(uint32 hLine, out uint32 lpdwLineStates, out uint32 lpdwAddressStates);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetTranslateCaps(uint32 hLineApp, uint32 dwAPIVersion, out LINETRANSLATECAPS lpTranslateCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetTranslateCapsA(uint32 hLineApp, uint32 dwAPIVersion, out LINETRANSLATECAPS lpTranslateCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineGetTranslateCapsW(uint32 hLineApp, uint32 dwAPIVersion, out LINETRANSLATECAPS lpTranslateCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineHandoff(uint32 hCall, PSTR lpszFileName, uint32 dwMediaMode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineHandoffA(uint32 hCall, PSTR lpszFileName, uint32 dwMediaMode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineHandoffW(uint32 hCall, PWSTR lpszFileName, uint32 dwMediaMode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineHold(uint32 hCall);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineInitialize(out uint32 lphLineApp, HINSTANCE hInstance, LINECALLBACK lpfnCallback, PSTR lpszAppName, out uint32 lpdwNumDevs);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineInitializeExA(out uint32 lphLineApp, HINSTANCE hInstance, LINECALLBACK lpfnCallback, PSTR lpszFriendlyAppName, out uint32 lpdwNumDevs, out uint32 lpdwAPIVersion, out LINEINITIALIZEEXPARAMS lpLineInitializeExParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineInitializeExW(out uint32 lphLineApp, HINSTANCE hInstance, LINECALLBACK lpfnCallback, PWSTR lpszFriendlyAppName, out uint32 lpdwNumDevs, out uint32 lpdwAPIVersion, out LINEINITIALIZEEXPARAMS lpLineInitializeExParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineMakeCall(uint32 hLine, out uint32 lphCall, PSTR lpszDestAddress, uint32 dwCountryCode, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineMakeCallA(uint32 hLine, out uint32 lphCall, PSTR lpszDestAddress, uint32 dwCountryCode, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineMakeCallW(uint32 hLine, out uint32 lphCall, PWSTR lpszDestAddress, uint32 dwCountryCode, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineMonitorDigits(uint32 hCall, uint32 dwDigitModes);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineMonitorMedia(uint32 hCall, uint32 dwMediaModes);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineMonitorTones(uint32 hCall, in LINEMONITORTONE lpToneList, uint32 dwNumEntries);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineNegotiateAPIVersion(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAPILowVersion, uint32 dwAPIHighVersion, out uint32 lpdwAPIVersion, out LINEEXTENSIONID lpExtensionID);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineNegotiateExtVersion(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAPIVersion, uint32 dwExtLowVersion, uint32 dwExtHighVersion, out uint32 lpdwExtVersion);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineOpen(uint32 hLineApp, uint32 dwDeviceID, out uint32 lphLine, uint32 dwAPIVersion, uint32 dwExtVersion, uint dwCallbackInstance, uint32 dwPrivileges, uint32 dwMediaModes, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineOpenA(uint32 hLineApp, uint32 dwDeviceID, out uint32 lphLine, uint32 dwAPIVersion, uint32 dwExtVersion, uint dwCallbackInstance, uint32 dwPrivileges, uint32 dwMediaModes, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineOpenW(uint32 hLineApp, uint32 dwDeviceID, out uint32 lphLine, uint32 dwAPIVersion, uint32 dwExtVersion, uint dwCallbackInstance, uint32 dwPrivileges, uint32 dwMediaModes, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 linePark(uint32 hCall, uint32 dwParkMode, PSTR lpszDirAddress, out VARSTRING lpNonDirAddress);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineParkA(uint32 hCall, uint32 dwParkMode, PSTR lpszDirAddress, out VARSTRING lpNonDirAddress);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineParkW(uint32 hCall, uint32 dwParkMode, PWSTR lpszDirAddress, out VARSTRING lpNonDirAddress);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 linePickup(uint32 hLine, uint32 dwAddressID, out uint32 lphCall, PSTR lpszDestAddress, PSTR lpszGroupID);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 linePickupA(uint32 hLine, uint32 dwAddressID, out uint32 lphCall, PSTR lpszDestAddress, PSTR lpszGroupID);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 linePickupW(uint32 hLine, uint32 dwAddressID, out uint32 lphCall, PWSTR lpszDestAddress, PWSTR lpszGroupID);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 linePrepareAddToConference(uint32 hConfCall, out uint32 lphConsultCall, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 linePrepareAddToConferenceA(uint32 hConfCall, out uint32 lphConsultCall, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 linePrepareAddToConferenceW(uint32 hConfCall, out uint32 lphConsultCall, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineProxyMessage(uint32 hLine, uint32 hCall, uint32 dwMsg, uint32 dwParam1, uint32 dwParam2, uint32 dwParam3);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineProxyResponse(uint32 hLine, out LINEPROXYREQUEST lpProxyRequest, uint32 dwResult);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineRedirect(uint32 hCall, PSTR lpszDestAddress, uint32 dwCountryCode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineRedirectA(uint32 hCall, PSTR lpszDestAddress, uint32 dwCountryCode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineRedirectW(uint32 hCall, PWSTR lpszDestAddress, uint32 dwCountryCode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineRegisterRequestRecipient(uint32 hLineApp, uint32 dwRegistrationInstance, uint32 dwRequestMode, uint32 bEnable);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineReleaseUserUserInfo(uint32 hCall);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineRemoveFromConference(uint32 hCall);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineRemoveProvider(uint32 dwPermanentProviderID, HWND hwndOwner);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSecureCall(uint32 hCall);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSendUserUserInfo(uint32 hCall, PSTR lpsUserUserInfo, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetAgentActivity(uint32 hLine, uint32 dwAddressID, uint32 dwActivityID);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetAgentGroup(uint32 hLine, uint32 dwAddressID, out LINEAGENTGROUPLIST lpAgentGroupList);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetAgentMeasurementPeriod(uint32 hLine, uint32 hAgent, uint32 dwMeasurementPeriod);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetAgentSessionState(uint32 hLine, uint32 hAgentSession, uint32 dwAgentSessionState, uint32 dwNextAgentSessionState);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetAgentStateEx(uint32 hLine, uint32 hAgent, uint32 dwAgentState, uint32 dwNextAgentState);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetAgentState(uint32 hLine, uint32 dwAddressID, uint32 dwAgentState, uint32 dwNextAgentState);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetAppPriority(PSTR lpszAppFilename, uint32 dwMediaMode, out LINEEXTENSIONID lpExtensionID, uint32 dwRequestMode, PSTR lpszExtensionName, uint32 dwPriority);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetAppPriorityA(PSTR lpszAppFilename, uint32 dwMediaMode, out LINEEXTENSIONID lpExtensionID, uint32 dwRequestMode, PSTR lpszExtensionName, uint32 dwPriority);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetAppPriorityW(PWSTR lpszAppFilename, uint32 dwMediaMode, out LINEEXTENSIONID lpExtensionID, uint32 dwRequestMode, PWSTR lpszExtensionName, uint32 dwPriority);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetAppSpecific(uint32 hCall, uint32 dwAppSpecific);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetCallData(uint32 hCall, void* lpCallData, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetCallParams(uint32 hCall, uint32 dwBearerMode, uint32 dwMinRate, uint32 dwMaxRate, in LINEDIALPARAMS lpDialParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetCallPrivilege(uint32 hCall, uint32 dwCallPrivilege);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetCallQualityOfService(uint32 hCall, void* lpSendingFlowspec, uint32 dwSendingFlowspecSize, void* lpReceivingFlowspec, uint32 dwReceivingFlowspecSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetCallTreatment(uint32 hCall, uint32 dwTreatment);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetCurrentLocation(uint32 hLineApp, uint32 dwLocation);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetDevConfig(uint32 dwDeviceID, void* lpDeviceConfig, uint32 dwSize, PSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetDevConfigA(uint32 dwDeviceID, void* lpDeviceConfig, uint32 dwSize, PSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetDevConfigW(uint32 dwDeviceID, void* lpDeviceConfig, uint32 dwSize, PWSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetLineDevStatus(uint32 hLine, uint32 dwStatusToChange, uint32 fStatus);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetMediaControl(uint32 hLine, uint32 dwAddressID, uint32 hCall, uint32 dwSelect, in LINEMEDIACONTROLDIGIT lpDigitList, uint32 dwDigitNumEntries, in LINEMEDIACONTROLMEDIA lpMediaList, uint32 dwMediaNumEntries, in LINEMEDIACONTROLTONE lpToneList, uint32 dwToneNumEntries, in LINEMEDIACONTROLCALLSTATE lpCallStateList, uint32 dwCallStateNumEntries);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetMediaMode(uint32 hCall, uint32 dwMediaModes);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetQueueMeasurementPeriod(uint32 hLine, uint32 dwQueueID, uint32 dwMeasurementPeriod);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetNumRings(uint32 hLine, uint32 dwAddressID, uint32 dwNumRings);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetStatusMessages(uint32 hLine, uint32 dwLineStates, uint32 dwAddressStates);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetTerminal(uint32 hLine, uint32 dwAddressID, uint32 hCall, uint32 dwSelect, uint32 dwTerminalModes, uint32 dwTerminalID, uint32 bEnable);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetTollList(uint32 hLineApp, uint32 dwDeviceID, PSTR lpszAddressIn, uint32 dwTollListOption);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetTollListA(uint32 hLineApp, uint32 dwDeviceID, PSTR lpszAddressIn, uint32 dwTollListOption);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetTollListW(uint32 hLineApp, uint32 dwDeviceID, PWSTR lpszAddressInW, uint32 dwTollListOption);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetupConference(uint32 hCall, uint32 hLine, out uint32 lphConfCall, out uint32 lphConsultCall, uint32 dwNumParties, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetupConferenceA(uint32 hCall, uint32 hLine, out uint32 lphConfCall, out uint32 lphConsultCall, uint32 dwNumParties, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetupConferenceW(uint32 hCall, uint32 hLine, out uint32 lphConfCall, out uint32 lphConsultCall, uint32 dwNumParties, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetupTransfer(uint32 hCall, out uint32 lphConsultCall, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetupTransferA(uint32 hCall, out uint32 lphConsultCall, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSetupTransferW(uint32 hCall, out uint32 lphConsultCall, in LINECALLPARAMS lpCallParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineShutdown(uint32 hLineApp);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineSwapHold(uint32 hActiveCall, uint32 hHeldCall);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineTranslateAddress(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAPIVersion, PSTR lpszAddressIn, uint32 dwCard, uint32 dwTranslateOptions, out LINETRANSLATEOUTPUT lpTranslateOutput);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineTranslateAddressA(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAPIVersion, PSTR lpszAddressIn, uint32 dwCard, uint32 dwTranslateOptions, out LINETRANSLATEOUTPUT lpTranslateOutput);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineTranslateAddressW(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAPIVersion, PWSTR lpszAddressIn, uint32 dwCard, uint32 dwTranslateOptions, out LINETRANSLATEOUTPUT lpTranslateOutput);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineTranslateDialog(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAPIVersion, HWND hwndOwner, PSTR lpszAddressIn);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineTranslateDialogA(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAPIVersion, HWND hwndOwner, PSTR lpszAddressIn);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineTranslateDialogW(uint32 hLineApp, uint32 dwDeviceID, uint32 dwAPIVersion, HWND hwndOwner, PWSTR lpszAddressIn);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineUncompleteCall(uint32 hLine, uint32 dwCompletionID);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineUnhold(uint32 hCall);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineUnpark(uint32 hLine, uint32 dwAddressID, out uint32 lphCall, PSTR lpszDestAddress);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineUnparkA(uint32 hLine, uint32 dwAddressID, out uint32 lphCall, PSTR lpszDestAddress);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 lineUnparkW(uint32 hLine, uint32 dwAddressID, out uint32 lphCall, PWSTR lpszDestAddress);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneClose(uint32 hPhone);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneConfigDialog(uint32 dwDeviceID, HWND hwndOwner, PSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneConfigDialogA(uint32 dwDeviceID, HWND hwndOwner, PSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneConfigDialogW(uint32 dwDeviceID, HWND hwndOwner, PWSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneDevSpecific(uint32 hPhone, void* lpParams, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetButtonInfo(uint32 hPhone, uint32 dwButtonLampID, out PHONEBUTTONINFO lpButtonInfo);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetButtonInfoA(uint32 hPhone, uint32 dwButtonLampID, out PHONEBUTTONINFO lpButtonInfo);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetButtonInfoW(uint32 hPhone, uint32 dwButtonLampID, out PHONEBUTTONINFO lpButtonInfo);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetData(uint32 hPhone, uint32 dwDataID, void* lpData, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetDevCaps(uint32 hPhoneApp, uint32 dwDeviceID, uint32 dwAPIVersion, uint32 dwExtVersion, out PHONECAPS lpPhoneCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetDevCapsA(uint32 hPhoneApp, uint32 dwDeviceID, uint32 dwAPIVersion, uint32 dwExtVersion, out PHONECAPS lpPhoneCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetDevCapsW(uint32 hPhoneApp, uint32 dwDeviceID, uint32 dwAPIVersion, uint32 dwExtVersion, out PHONECAPS lpPhoneCaps);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetDisplay(uint32 hPhone, out VARSTRING lpDisplay);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetGain(uint32 hPhone, uint32 dwHookSwitchDev, out uint32 lpdwGain);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetHookSwitch(uint32 hPhone, out uint32 lpdwHookSwitchDevs);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetIcon(uint32 dwDeviceID, PSTR lpszDeviceClass, out int lphIcon);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetIconA(uint32 dwDeviceID, PSTR lpszDeviceClass, out int lphIcon);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetIconW(uint32 dwDeviceID, PWSTR lpszDeviceClass, out int lphIcon);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetID(uint32 hPhone, out VARSTRING lpDeviceID, PSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetIDA(uint32 hPhone, out VARSTRING lpDeviceID, PSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetIDW(uint32 hPhone, out VARSTRING lpDeviceID, PWSTR lpszDeviceClass);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetLamp(uint32 hPhone, uint32 dwButtonLampID, out uint32 lpdwLampMode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetMessage(uint32 hPhoneApp, out PHONEMESSAGE lpMessage, uint32 dwTimeout);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetRing(uint32 hPhone, out uint32 lpdwRingMode, out uint32 lpdwVolume);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetStatus(uint32 hPhone, out PHONESTATUS lpPhoneStatus);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetStatusA(uint32 hPhone, out PHONESTATUS lpPhoneStatus);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetStatusW(uint32 hPhone, out PHONESTATUS lpPhoneStatus);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetStatusMessages(uint32 hPhone, out uint32 lpdwPhoneStates, out uint32 lpdwButtonModes, out uint32 lpdwButtonStates);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneGetVolume(uint32 hPhone, uint32 dwHookSwitchDev, out uint32 lpdwVolume);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneInitialize(out uint32 lphPhoneApp, HINSTANCE hInstance, PHONECALLBACK lpfnCallback, PSTR lpszAppName, out uint32 lpdwNumDevs);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneInitializeExA(out uint32 lphPhoneApp, HINSTANCE hInstance, PHONECALLBACK lpfnCallback, PSTR lpszFriendlyAppName, out uint32 lpdwNumDevs, out uint32 lpdwAPIVersion, out PHONEINITIALIZEEXPARAMS lpPhoneInitializeExParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneInitializeExW(out uint32 lphPhoneApp, HINSTANCE hInstance, PHONECALLBACK lpfnCallback, PWSTR lpszFriendlyAppName, out uint32 lpdwNumDevs, out uint32 lpdwAPIVersion, out PHONEINITIALIZEEXPARAMS lpPhoneInitializeExParams);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneNegotiateAPIVersion(uint32 hPhoneApp, uint32 dwDeviceID, uint32 dwAPILowVersion, uint32 dwAPIHighVersion, out uint32 lpdwAPIVersion, out PHONEEXTENSIONID lpExtensionID);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneNegotiateExtVersion(uint32 hPhoneApp, uint32 dwDeviceID, uint32 dwAPIVersion, uint32 dwExtLowVersion, uint32 dwExtHighVersion, out uint32 lpdwExtVersion);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneOpen(uint32 hPhoneApp, uint32 dwDeviceID, out uint32 lphPhone, uint32 dwAPIVersion, uint32 dwExtVersion, uint dwCallbackInstance, uint32 dwPrivilege);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneSetButtonInfo(uint32 hPhone, uint32 dwButtonLampID, in PHONEBUTTONINFO lpButtonInfo);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneSetButtonInfoA(uint32 hPhone, uint32 dwButtonLampID, in PHONEBUTTONINFO lpButtonInfo);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneSetButtonInfoW(uint32 hPhone, uint32 dwButtonLampID, in PHONEBUTTONINFO lpButtonInfo);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneSetData(uint32 hPhone, uint32 dwDataID, void* lpData, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneSetDisplay(uint32 hPhone, uint32 dwRow, uint32 dwColumn, PSTR lpsDisplay, uint32 dwSize);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneSetGain(uint32 hPhone, uint32 dwHookSwitchDev, uint32 dwGain);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneSetHookSwitch(uint32 hPhone, uint32 dwHookSwitchDevs, uint32 dwHookSwitchMode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneSetLamp(uint32 hPhone, uint32 dwButtonLampID, uint32 dwLampMode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneSetRing(uint32 hPhone, uint32 dwRingMode, uint32 dwVolume);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneSetStatusMessages(uint32 hPhone, uint32 dwPhoneStates, uint32 dwButtonModes, uint32 dwButtonStates);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneSetVolume(uint32 hPhone, uint32 dwHookSwitchDev, uint32 dwVolume);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 phoneShutdown(uint32 hPhoneApp);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 tapiGetLocationInfo(uint8* lpszCountryCode, uint8* lpszCityCode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 tapiGetLocationInfoA(uint8* lpszCountryCode, uint8* lpszCityCode);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 tapiGetLocationInfoW(char16* lpszCountryCodeW, char16* lpszCityCodeW);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 tapiRequestDrop(HWND hwnd, WPARAM wRequestID);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 tapiRequestMakeCall(PSTR lpszDestAddress, PSTR lpszAppName, PSTR lpszCalledParty, PSTR lpszComment);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 tapiRequestMakeCallA(PSTR lpszDestAddress, PSTR lpszAppName, PSTR lpszCalledParty, PSTR lpszComment);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 tapiRequestMakeCallW(PWSTR lpszDestAddress, PWSTR lpszAppName, PWSTR lpszCalledParty, PWSTR lpszComment);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 tapiRequestMediaCall(HWND hwnd, WPARAM wRequestID, PSTR lpszDeviceClass, PSTR lpDeviceID, uint32 dwSize, uint32 dwSecure, PSTR lpszDestAddress, PSTR lpszAppName, PSTR lpszCalledParty, PSTR lpszComment);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 tapiRequestMediaCallA(HWND hwnd, WPARAM wRequestID, PSTR lpszDeviceClass, PSTR lpDeviceID, uint32 dwSize, uint32 dwSecure, PSTR lpszDestAddress, PSTR lpszAppName, PSTR lpszCalledParty, PSTR lpszComment);
		[Import("tapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern int32 tapiRequestMediaCallW(HWND hwnd, WPARAM wRequestID, PWSTR lpszDeviceClass, PWSTR lpDeviceID, uint32 dwSize, uint32 dwSecure, PWSTR lpszDestAddress, PWSTR lpszAppName, PWSTR lpszCalledParty, PWSTR lpszComment);
		[Import("mapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern HRESULT OpenTnefStream(void* lpvSupport, ref IStream lpStream, ref int8 lpszStreamName, uint32 ulFlags, ref IMessage lpMessage, uint16 wKeyVal, out ITnef* lppTNEF);
		[Import("mapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern HRESULT OpenTnefStreamEx(void* lpvSupport, ref IStream lpStream, ref int8 lpszStreamName, uint32 ulFlags, ref IMessage lpMessage, uint16 wKeyVal, ref IAddrBook lpAdressBook, out ITnef* lppTNEF);
		[Import("mapi32.dll"), CLink, CallingConvention(.Stdcall)]
		public static extern HRESULT GetTnefStreamCodepage(ref IStream lpStream, out uint32 lpulCodepage, out uint32 lpulSubCodepage);
	}
}
