mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1580 lines
41 KiB
1580 lines
41 KiB
/*++ BUILD Version: 0000 // Increment this if a change has global effects
|
|
|
|
Copyright (c) 1995-1998 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
server.h
|
|
|
|
Abstract:
|
|
|
|
Header file for tapi server & client
|
|
|
|
Author:
|
|
|
|
Dan Knudson (DanKn) 01-Apr-1995
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#include "rmotsp.h"
|
|
#include "tapiclnt.h"
|
|
#include "tlnklist.h"
|
|
#include "tapievt.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define INVAL_KEY ((DWORD) 'LVNI')
|
|
#define TCALL_KEY ((DWORD) 'LLAC')
|
|
#define TINCOMPLETECALL_KEY ((DWORD) 'LACI')
|
|
#define TZOMBIECALL_KEY ((DWORD) 'LACZ')
|
|
#define TCALLCLIENT_KEY ((DWORD) 'ILCC')
|
|
#define TCALLHUBCLIENT_KEY ((DWORD) 'CBUH')
|
|
#define TINCOMPLETECALLCLIENT_KEY ((DWORD) 'LCCI')
|
|
#define TLINE_KEY ((DWORD) 'ENIL')
|
|
#define TINCOMPLETELINE_KEY ((DWORD) 'NILI')
|
|
#define TLINECLIENT_KEY ((DWORD) 'ILCL')
|
|
#define TPHONE_KEY ((DWORD) 'NOHP')
|
|
#define TINCOMPLETEPHONE_KEY ((DWORD) 'OHPI')
|
|
#define TPHONECLIENT_KEY ((DWORD) 'ILCP')
|
|
#define TLINEAPP_KEY ((DWORD) 'PPAL')
|
|
#define TPHONEAPP_KEY ((DWORD) 'PPAP')
|
|
#define TCLIENT_KEY ((DWORD) 'TNLC')
|
|
#define TCLIENTCLEANUP_KEY ((DWORD) 'CNLC')
|
|
#define TZOMBIECLIENT_KEY ((DWORD) 'ZNLC')
|
|
#define TPROVIDER_KEY ((DWORD) 'VORP')
|
|
#define TASYNC_KEY ((DWORD) 'CYSA')
|
|
#define TDLGINST_KEY ((DWORD) 'GOLD')
|
|
#define TCONFLIST_KEY ((DWORD) 'FNOC')
|
|
#define RSP_MSG ((DWORD)'RXYQ')
|
|
#define RSP_CALLPARAMS 0xFEDC
|
|
|
|
#ifdef _WIN64
|
|
#define TALIGN_MASK 0xfffffff8
|
|
#define TALIGN_COUNT 7
|
|
#else
|
|
#define TALIGN_MASK 0xfffffffc
|
|
#define TALIGN_COUNT 3
|
|
#endif
|
|
#define ALIGN(a) (((a)+TALIGN_COUNT)&TALIGN_MASK)
|
|
#define ALIGNED(a) (0 == ((a)&TALIGN_COUNT))
|
|
|
|
#define INITIAL_EVENT_BUFFER_SIZE 1024
|
|
|
|
#define DEF_NUM_LOOKUP_ENTRIES 16
|
|
#define DEF_NUM_CONF_LIST_ENTRIES 4
|
|
#define DEF_NUM_PTR_LIST_ENTRIES 8
|
|
|
|
#define LINEPROXYREQUEST_LASTVALUE LINEPROXYREQUEST_SETAGENTSTATEEX
|
|
|
|
#define BOGUS_REQUEST_ID 0x7fffffff
|
|
|
|
#define DCF_SPIRETURNED 0x00000001
|
|
#define DCF_DRVCALLVALID 0x00000002
|
|
#define DCF_CREATEDINITIALMONITORS 0x00000004
|
|
#define DCF_INCOMINGCALL 0x00010000
|
|
|
|
#define SYNC_REQUESTS_ALL 0
|
|
#define SYNC_REQUESTS_PER_WIDGET 1
|
|
#define SYNC_REQUESTS_NONE 2
|
|
|
|
#define SP_NONE 0xffffffff
|
|
|
|
#define DGCLIENT_TIMEOUT 1000 // milliseconds
|
|
#define DGCLIENTDISCONNECT_TIMEOUT (5*60*1000) // milliseconds
|
|
|
|
#define SP_LINEACCEPT 0
|
|
#define SP_LINEADDTOCONFERENCE 1
|
|
#define SP_LINEAGENTSPECIFIC 2
|
|
#define SP_LINEANSWER 3
|
|
#define SP_LINEBLINDTRANSFER 4
|
|
#define SP_LINECLOSE 5
|
|
#define SP_LINECLOSECALL 6
|
|
#define SP_LINECOMPLETECALL 7
|
|
#define SP_LINECOMPLETETRANSFER 8
|
|
#define SP_LINECONDITIONALMEDIADETECTION 9
|
|
#define SP_LINEDEVSPECIFIC 10
|
|
#define SP_LINEDEVSPECIFICFEATURE 11
|
|
#define SP_LINEDIAL 12
|
|
#define SP_LINEDROP 13
|
|
#define SP_LINEFORWARD 14
|
|
#define SP_LINEGATHERDIGITS 15
|
|
#define SP_LINEGENERATEDIGITS 16
|
|
#define SP_LINEGENERATETONE 17
|
|
#define SP_LINEGETADDRESSCAPS 18
|
|
#define SP_LINEGETADDRESSID 19
|
|
#define SP_LINEGETADDRESSSTATUS 20
|
|
#define SP_LINEGETAGENTACTIVITYLIST 21
|
|
#define SP_LINEGETAGENTCAPS 22
|
|
#define SP_LINEGETAGENTGROUPLIST 23
|
|
#define SP_LINEGETAGENTSTATUS 24
|
|
#define SP_LINEGETCALLADDRESSID 25
|
|
#define SP_LINEGETCALLINFO 26
|
|
#define SP_LINEGETCALLSTATUS 27
|
|
#define SP_LINEGETDEVCAPS 28
|
|
#define SP_LINEGETDEVCONFIG 29
|
|
#define SP_LINEGETEXTENSIONID 30
|
|
#define SP_LINEGETICON 31
|
|
#define SP_LINEGETID 32
|
|
#define SP_LINEGETLINEDEVSTATUS 33
|
|
#define SP_LINEGETNUMADDRESSIDS 34
|
|
#define SP_LINEHOLD 35
|
|
#define SP_LINEMAKECALL 36
|
|
#define SP_LINEMONITORDIGITS 37
|
|
#define SP_LINEMONITORMEDIA 38
|
|
#define SP_LINEMONITORTONES 39
|
|
#define SP_LINENEGOTIATEEXTVERSION 40
|
|
#define SP_LINENEGOTIATETSPIVERSION 41
|
|
#define SP_LINEOPEN 42
|
|
#define SP_LINEPARK 43
|
|
#define SP_LINEPICKUP 44
|
|
#define SP_LINEPREPAREADDTOCONFERENCE 45
|
|
#define SP_LINEREDIRECT 46
|
|
#define SP_LINERELEASEUSERUSERINFO 47
|
|
#define SP_LINEREMOVEFROMCONFERENCE 48
|
|
#define SP_LINESECURECALL 49
|
|
#define SP_LINESELECTEXTVERSION 50
|
|
#define SP_LINESENDUSERUSERINFO 51
|
|
#define SP_LINESETAGENTACTIVITY 52
|
|
#define SP_LINESETAGENTGROUP 53
|
|
#define SP_LINESETAGENTSTATE 54
|
|
#define SP_LINESETAPPSPECIFIC 55
|
|
#define SP_LINESETCALLDATA 56
|
|
#define SP_LINESETCALLPARAMS 57
|
|
#define SP_LINESETCALLQUALITYOFSERVICE 58
|
|
#define SP_LINESETCALLTREATMENT 59
|
|
#define SP_LINESETCURRENTLOCATION 60
|
|
#define SP_LINESETDEFAULTMEDIADETECTION 61
|
|
#define SP_LINESETDEVCONFIG 62
|
|
#define SP_LINESETLINEDEVSTATUS 63
|
|
#define SP_LINESETMEDIACONTROL 64
|
|
#define SP_LINESETMEDIAMODE 65
|
|
#define SP_LINESETSTATUSMESSAGES 66
|
|
#define SP_LINESETTERMINAL 67
|
|
#define SP_LINESETUPCONFERENCE 68
|
|
#define SP_LINESETUPTRANSFER 69
|
|
#define SP_LINESWAPHOLD 70
|
|
#define SP_LINEUNCOMPLETECALL 71
|
|
#define SP_LINEUNHOLD 72
|
|
#define SP_LINEUNPARK 73
|
|
#define SP_PHONECLOSE 74
|
|
#define SP_PHONEDEVSPECIFIC 75
|
|
#define SP_PHONEGETBUTTONINFO 76
|
|
#define SP_PHONEGETDATA 77
|
|
#define SP_PHONEGETDEVCAPS 78
|
|
#define SP_PHONEGETDISPLAY 79
|
|
#define SP_PHONEGETEXTENSIONID 80
|
|
#define SP_PHONEGETGAIN 81
|
|
#define SP_PHONEGETHOOKSWITCH 82
|
|
#define SP_PHONEGETICON 83
|
|
#define SP_PHONEGETID 84
|
|
#define SP_PHONEGETLAMP 85
|
|
#define SP_PHONEGETRING 86
|
|
#define SP_PHONEGETSTATUS 87
|
|
#define SP_PHONEGETVOLUME 88
|
|
#define SP_PHONENEGOTIATEEXTVERSION 89
|
|
#define SP_PHONENEGOTIATETSPIVERSION 90
|
|
#define SP_PHONEOPEN 91
|
|
#define SP_PHONESELECTEXTVERSION 92
|
|
#define SP_PHONESETBUTTONINFO 93
|
|
#define SP_PHONESETDATA 94
|
|
#define SP_PHONESETDISPLAY 95
|
|
#define SP_PHONESETGAIN 96
|
|
#define SP_PHONESETHOOKSWITCH 97
|
|
#define SP_PHONESETLAMP 98
|
|
#define SP_PHONESETRING 99
|
|
#define SP_PHONESETSTATUSMESSAGES 100
|
|
#define SP_PHONESETVOLUME 101
|
|
#define SP_PROVIDERCREATELINEDEVICE 102
|
|
#define SP_PROVIDERCREATEPHONEDEVICE 103
|
|
#define SP_PROVIDERENUMDEVICES 104
|
|
#define SP_PROVIDERFREEDIALOGINSTANCE 105
|
|
#define SP_PROVIDERGENERICDIALOGDATA 106
|
|
#define SP_PROVIDERINIT 107
|
|
#define SP_PROVIDERSHUTDOWN 108
|
|
#define SP_PROVIDERUIIDENTIFY 109
|
|
#define SP_LINEMSPIDENTIFY 110
|
|
#define SP_LINERECEIVEMSPDATA 111
|
|
#define SP_PROVIDERCHECKFORNEWUSER 112
|
|
#define SP_LINEGETCALLIDS 113
|
|
#define SP_LINEGETCALLHUBTRACKING 114
|
|
#define SP_LINESETCALLHUBTRACKING 115
|
|
#define SP_PROVIDERPRIVATEFACTORYIDENTIFY 116
|
|
#define SP_LINEDEVSPECIFICEX 117
|
|
#define SP_LINECREATEAGENT 118
|
|
#define SP_LINECREATEAGENTSESSION 119
|
|
#define SP_LINEGETAGENTINFO 120
|
|
#define SP_LINEGETAGENTSESSIONINFO 121
|
|
#define SP_LINEGETAGENTSESSIONLIST 122
|
|
#define SP_LINEGETQUEUEINFO 123
|
|
#define SP_LINEGETGROUPLIST 124
|
|
#define SP_LINEGETQUEUELIST 125
|
|
#define SP_LINESETAGENTMEASUREMENTPERIOD 126
|
|
#define SP_LINESETAGENTSESSIONSTATE 127
|
|
#define SP_LINESETQUEUEMEASUREMENTPERIOD 128
|
|
#define SP_LINESETAGENTSTATEEX 129
|
|
#define SP_LINEGETPROXYSTATUS 130
|
|
#define SP_LINECREATEMSPINSTANCE 131
|
|
#define SP_LINECLOSEMSPINSTANCE 132
|
|
#define SP_LASTPROCNUMBER (SP_LINECLOSEMSPINSTANCE + 1)
|
|
|
|
|
|
// TAPICLIENT api
|
|
|
|
#define TC_LOAD 0
|
|
#define TC_FREE 1
|
|
#define TC_CLIENTINITIALIZE 2
|
|
#define TC_CLIENTSHUTDOWN 3
|
|
#define TC_GETDEVICEACCESS 4
|
|
#define TC_LINEADDTOCONFERENCE 5
|
|
#define TC_LINEBLINDTRANSFER 6
|
|
#define TC_LINECONFIGDIALOG 7
|
|
#define TC_LINEDIAL 8
|
|
#define TC_LINEFORWARD 9
|
|
#define TC_LINEGENERATEDIGITS 10
|
|
#define TC_LINEMAKECALL 11
|
|
#define TC_LINEOPEN 12
|
|
#define TC_LINEREDIRECT 13
|
|
#define TC_LINESETCALLDATA 14
|
|
#define TC_LINESETCALLPARAMS 15
|
|
#define TC_LINESETCALLPRIVILEGE 16
|
|
#define TC_LINESETCALLTREATMENT 17
|
|
#define TC_LINESETCURRENTLOCATION 18
|
|
#define TC_LINESETDEVCONFIG 19
|
|
#define TC_LINESETLINEDEVSTATUS 20
|
|
#define TC_LINESETMEDIACONTROL 21
|
|
#define TC_LINESETMEDIAMODE 22
|
|
#define TC_LINESETTERMINAL 23
|
|
#define TC_LINESETTOLLLIST 24
|
|
#define TC_PHONECONFIGDIALOG 25
|
|
#define TC_PHONEOPEN 26
|
|
#define TC_LASTPROCNUMBER TC_PHONEOPEN+1
|
|
|
|
|
|
#define myexcept except(EXCEPTION_EXECUTE_HANDLER)
|
|
|
|
#define CN_CLIENT ((ULONG_PTR) -1)
|
|
#define DG_CLIENT ((ULONG_PTR) -2)
|
|
#define MMC_CLIENT ((ULONG_PTR) -3)
|
|
|
|
#define IS_REMOTE_CLIENT(ptClient) \
|
|
(((((ULONG_PTR) ptClient->hProcess) & DG_CLIENT) == DG_CLIENT) || \
|
|
(ptClient->hProcess == (HANDLE) MMC_CLIENT))
|
|
|
|
#define IS_REMOTE_CN_CLIENT(ptClient) \
|
|
(ptClient->hProcess == (HANDLE) CN_CLIENT)
|
|
|
|
#define IS_REMOTE_DG_CLIENT(ptClient) \
|
|
(ptClient->hProcess == (HANDLE) DG_CLIENT)
|
|
|
|
#define IS_REMOTE_MMC_CLIENT(ptClient) \
|
|
(ptClient->hProcess == (HANDLE) MMC_CLIENT)
|
|
|
|
#define SET_FLAG(dw,fl) (dw) |= (fl)
|
|
#define RESET_FLAG(dw,fl) (dw) &= ~(fl)
|
|
#define IS_FLAG_SET(dw,fl) ((dw) & (fl))
|
|
|
|
typedef LONG (PASCAL *TSPIPROC)();
|
|
typedef LONG (PASCAL *CLIENTPROC)();
|
|
|
|
typedef struct _TPOINTERLIST
|
|
{
|
|
DWORD dwNumUsedEntries;
|
|
|
|
LPVOID aEntries[DEF_NUM_PTR_LIST_ENTRIES];
|
|
|
|
} TPOINTERLIST, *PTPOINTERLIST;
|
|
|
|
|
|
typedef struct _THASHTABLEENTRY
|
|
{
|
|
DWORD dwCallHubID;
|
|
LONG lCookie;
|
|
LIST_ENTRY CallHubList;
|
|
struct _TCALLHUBCLIENT *ptCallHubClients;
|
|
struct _THASHTABLEENTRY *pNext;
|
|
|
|
} THASHTABLEENTRY, *PTHASHTABLEENTRY;
|
|
|
|
|
|
typedef struct _TPROVIDER
|
|
{
|
|
DWORD dwKey;
|
|
HANDLE hMutex;
|
|
HINSTANCE hDll;
|
|
DWORD dwTSPIOptions;
|
|
|
|
DWORD dwSPIVersion;
|
|
DWORD dwPermanentProviderID;
|
|
struct _TPROVIDER *pPrev;
|
|
struct _TPROVIDER *pNext;
|
|
|
|
DWORD dwNumHashTableEntries;
|
|
DWORD dwNumDynamicHashTableEntries;
|
|
PTHASHTABLEENTRY pHashTable;
|
|
LONG lHashTableReaderCount;
|
|
|
|
HANDLE hHashTableReaderEvent;
|
|
|
|
CRITICAL_SECTION HashTableCritSec;
|
|
|
|
TSPIPROC apfn[SP_LASTPROCNUMBER];
|
|
|
|
DWORD dwNameHash;
|
|
TCHAR szFileName[1];
|
|
|
|
} TPROVIDER, *PTPROVIDER;
|
|
|
|
|
|
typedef struct _TCALLHUBCLIENT
|
|
{
|
|
DWORD dwKey;
|
|
struct _TCLIENT * ptClient;
|
|
PTPROVIDER ptProvider;
|
|
DWORD dwCallHubID;
|
|
|
|
HCALLHUB hCallHub;
|
|
struct _TLINEAPP *ptLineApp;
|
|
struct _TCALLHUBCLIENT *pNext;
|
|
|
|
} TCALLHUBCLIENT, *PTCALLHUBCLIENT;
|
|
|
|
|
|
typedef struct _TCALLCLIENT
|
|
{
|
|
DWORD dwKey;
|
|
struct _TCLIENT *ptClient;
|
|
struct _TLINECLIENT *ptLineClient;
|
|
struct _TCALL *ptCall;
|
|
|
|
DWORD dwPrivilege;
|
|
DWORD dwMonitorDigitModes;
|
|
DWORD dwMonitorMediaModes;
|
|
|
|
//
|
|
// The following field is used to determine whether we need to
|
|
// set or zero the LINE_CALLSTATE\dwParam3 parameter to indicate
|
|
// a privilege change to the app
|
|
//
|
|
|
|
BYTE bIndicatePrivilege;
|
|
BYTE bMonitoringTones;
|
|
BYTE bUnused1;
|
|
BYTE bUnused2;
|
|
|
|
struct _TCALLCLIENT *pPrevSametCall;
|
|
struct _TCALLCLIENT *pNextSametCall;
|
|
struct _TCALLCLIENT *pPrevSametLineClient;
|
|
struct _TCALLCLIENT *pNextSametLineClient;
|
|
|
|
struct _TCALLHUBCLIENT *ptCallHubClient;
|
|
DWORD hCall;
|
|
DWORD adwEventSubMasks[EM_NUM_MASKS];
|
|
|
|
} TCALLCLIENT, *PTCALLCLIENT;
|
|
|
|
|
|
typedef struct _TCALL
|
|
{
|
|
DWORD dwKey;
|
|
PTCALLCLIENT ptCallClients;
|
|
struct _TLINE *ptLine;
|
|
PTPROVIDER ptProvider;
|
|
|
|
DWORD dwDrvCallFlags;
|
|
BOOL bCreatedInitialMonitors;
|
|
HDRVCALL hdCall;
|
|
HCALL hCall;
|
|
|
|
DWORD dwAddressID;
|
|
DWORD dwCallState;
|
|
DWORD dwCallStateMode;
|
|
DWORD dwNumOwners;
|
|
|
|
DWORD dwNumMonitors;
|
|
BOOL bAlertApps;
|
|
DWORD dwAppNameSize;
|
|
LPVOID pszAppName;
|
|
|
|
DWORD dwDisplayableAddressSize;
|
|
LPVOID pszDisplayableAddress;
|
|
DWORD dwCalledPartySize;
|
|
LPVOID pszCalledParty;
|
|
|
|
DWORD dwCommentSize;
|
|
LPVOID pszComment;
|
|
struct _TCONFERENCELIST * pConfList;
|
|
struct _TCALL *pPrev;
|
|
|
|
struct _TCALL *pNext;
|
|
DWORD dwCallID;
|
|
DWORD dwRelatedCallID;
|
|
|
|
LIST_ENTRY CallHubList;
|
|
|
|
#define DEF_NUM_FAST_CALLCLIENTS 2
|
|
|
|
LONG lUsedFastCallClients;
|
|
LONG lActiveFastCallClients;
|
|
|
|
TCALLCLIENT aFastCallClients[DEF_NUM_FAST_CALLCLIENTS];
|
|
|
|
} TCALL, *PTCALL;
|
|
|
|
|
|
typedef struct _TCONFERENCELIST
|
|
{
|
|
DWORD dwKey;
|
|
DWORD dwNumTotalEntries;
|
|
DWORD dwNumUsedEntries;
|
|
struct _TCONFERENCELIST *pNext;
|
|
|
|
PTCALL aptCalls[1];
|
|
|
|
} TCONFERENCELIST, *PTCONFERENCELIST;
|
|
|
|
|
|
typedef struct _TLINE
|
|
{
|
|
DWORD dwKey;
|
|
HANDLE hMutex;
|
|
struct _TLINECLIENT * ptLineClients;
|
|
LPVOID apProxys[LINEPROXYREQUEST_LASTVALUE+1];
|
|
|
|
PTPROVIDER ptProvider;
|
|
HDRVLINE hdLine;
|
|
HLINE hLine;
|
|
DWORD dwDeviceID;
|
|
|
|
DWORD dwSPIVersion;
|
|
DWORD dwExtVersion;
|
|
DWORD dwExtVersionCount;
|
|
DWORD dwNumAddresses;
|
|
|
|
DWORD dwOpenMediaModes;
|
|
DWORD dwNumOpens;
|
|
DWORD dwUnionLineStates;
|
|
DWORD dwUnionAddressStates;
|
|
|
|
PTCALL ptCalls;
|
|
DWORD dwNumCallHubTrackers;
|
|
DWORD dwNumCallHubTrackersSPLevel;
|
|
DWORD dwBusy;
|
|
|
|
} TLINE, *PTLINE;
|
|
|
|
|
|
typedef struct _TLINECLIENT
|
|
{
|
|
DWORD dwKey;
|
|
struct _TCLIENT * ptClient;
|
|
struct _TLINEAPP * ptLineApp;
|
|
DWORD hLine;
|
|
|
|
PTLINE ptLine;
|
|
DWORD dwAddressID;
|
|
PTCALLCLIENT ptCallClients;
|
|
DWORD hRemoteLine;
|
|
|
|
DWORD dwAPIVersion;
|
|
DWORD dwPrivileges;
|
|
DWORD dwMediaModes;
|
|
DWORD OpenContext; // was : DWORD dwCallbackInstance;
|
|
DWORD dwLineStates;
|
|
|
|
DWORD dwAddressStates;
|
|
LPDWORD aNumRings;
|
|
DWORD dwExtVersion;
|
|
|
|
struct _TLINECLIENT *pPrevSametLine;
|
|
struct _TLINECLIENT *pNextSametLine;
|
|
struct _TLINECLIENT *pPrevSametLineApp;
|
|
struct _TLINECLIENT *pNextSametLineApp;
|
|
|
|
LPVOID pPendingProxyRequests;
|
|
DWORD dwCurrentTracking;
|
|
HDRVMSPLINE hdMSPLine;
|
|
LPTSTR szProxyClsid;
|
|
|
|
DWORD adwEventSubMasks[EM_NUM_MASKS];
|
|
|
|
} TLINECLIENT, *PTLINECLIENT;
|
|
|
|
|
|
typedef struct _TPHONE
|
|
{
|
|
DWORD dwKey;
|
|
HANDLE hMutex;
|
|
struct _TPHONECLIENT * ptPhoneClients;
|
|
PTPROVIDER ptProvider;
|
|
|
|
HDRVPHONE hdPhone;
|
|
HPHONE hPhone;
|
|
DWORD dwDeviceID;
|
|
DWORD dwSPIVersion;
|
|
|
|
DWORD dwExtVersion;
|
|
DWORD dwExtVersionCount;
|
|
DWORD dwNumOwners;
|
|
DWORD dwNumMonitors;
|
|
|
|
DWORD dwUnionPhoneStates;
|
|
DWORD dwUnionButtonModes;
|
|
DWORD dwUnionButtonStates;
|
|
DWORD dwBusy;
|
|
|
|
} TPHONE, *PTPHONE;
|
|
|
|
|
|
typedef struct _TPHONECLIENT
|
|
{
|
|
DWORD dwKey;
|
|
struct _TCLIENT * ptClient;
|
|
struct _TPHONEAPP * ptPhoneApp;
|
|
PTPHONE ptPhone;
|
|
|
|
DWORD hRemotePhone;
|
|
DWORD dwAPIVersion;
|
|
DWORD dwExtVersion;
|
|
DWORD dwPrivilege;
|
|
|
|
DWORD OpenContext; // was : DWORD dwCallbackInstance;
|
|
DWORD dwPhoneStates;
|
|
DWORD dwButtonModes;
|
|
DWORD dwButtonStates;
|
|
|
|
struct _TPHONECLIENT *pPrevSametPhone;
|
|
struct _TPHONECLIENT *pNextSametPhone;
|
|
struct _TPHONECLIENT *pPrevSametPhoneApp;
|
|
struct _TPHONECLIENT *pNextSametPhoneApp;
|
|
|
|
DWORD hPhone;
|
|
DWORD adwEventSubMasks[EM_NUM_MASKS];
|
|
|
|
} TPHONECLIENT, *PTPHONECLIENT;
|
|
|
|
|
|
typedef struct _TLINEAPP
|
|
{
|
|
DWORD dwKey;
|
|
struct _TCLIENT * ptClient;
|
|
PTLINECLIENT ptLineClients;
|
|
DWORD hLineApp;
|
|
|
|
DWORD InitContext; // was: LINECALLBACK lpfnCallback;
|
|
struct _TLINEAPP *pPrev;
|
|
struct _TLINEAPP *pNext;
|
|
DWORD dwAPIVersion;
|
|
|
|
DWORD bReqMediaCallRecipient;
|
|
LPVOID pRequestRecipient;
|
|
DWORD dwFriendlyNameSize;
|
|
WCHAR *pszFriendlyName;
|
|
|
|
DWORD adwEventSubMasks[EM_NUM_MASKS];
|
|
|
|
DWORD dwModuleNameSize;
|
|
WCHAR *pszModuleName;
|
|
|
|
} TLINEAPP, *PTLINEAPP;
|
|
|
|
|
|
typedef struct _TPHONEAPP
|
|
{
|
|
DWORD dwKey;
|
|
DWORD hPhoneApp;
|
|
struct _TCLIENT * ptClient;
|
|
DWORD InitContext; // was: PHONECALLBACK lpfnCallback;
|
|
|
|
PTPHONECLIENT ptPhoneClients;
|
|
struct _TPHONEAPP *pPrev;
|
|
struct _TPHONEAPP *pNext;
|
|
WCHAR *pszFriendlyName;
|
|
|
|
WCHAR *pszModuleName;
|
|
DWORD dwAPIVersion;
|
|
DWORD dwFriendlyNameSize;
|
|
DWORD dwModuleNameSize;
|
|
|
|
DWORD adwEventSubMasks[EM_NUM_MASKS];
|
|
|
|
} TPHONEAPP, *PTPHONEAPP;
|
|
|
|
|
|
typedef struct _TAPIDIALOGINSTANCE
|
|
{
|
|
DWORD dwKey;
|
|
struct _TCLIENT * ptClient;
|
|
DWORD dwPermanentProviderID;
|
|
HINSTANCE hTsp;
|
|
|
|
TSPIPROC pfnTSPI_providerGenericDialogData;
|
|
PTPROVIDER ptProvider;
|
|
HDRVDIALOGINSTANCE hdDlgInst;
|
|
WCHAR *pszProviderFilename;
|
|
|
|
DWORD bRemoveProvider;
|
|
struct _TAPIDIALOGINSTANCE *pPrev;
|
|
struct _TAPIDIALOGINSTANCE *pNext;
|
|
|
|
HTAPIDIALOGINSTANCE htDlgInst;
|
|
|
|
} TAPIDIALOGINSTANCE, *PTAPIDIALOGINSTANCE;
|
|
|
|
|
|
// management DLL client info
|
|
typedef struct _TMANAGEDLLINFO
|
|
{
|
|
HINSTANCE hDll;
|
|
DWORD dwID;
|
|
CLIENTPROC aProcs[TC_LASTPROCNUMBER];
|
|
LPWSTR pszName;
|
|
DWORD dwAPIVersion;
|
|
struct _TMANAGEDLLINFO *pNext;
|
|
|
|
} TMANAGEDLLINFO, *PTMANAGEDLLINFO;
|
|
|
|
|
|
typedef struct _TCLIENTHANDLE
|
|
{
|
|
HMANAGEMENTCLIENT hClient;
|
|
DWORD dwID;
|
|
BOOL fValid;
|
|
struct _TCLIENTHANDLE *pNext;
|
|
|
|
} TCLIENTHANDLE, *PTCLIENTHANDLE;
|
|
|
|
|
|
typedef struct _TCLIENT
|
|
{
|
|
DWORD dwKey;
|
|
HANDLE hProcess;
|
|
DWORD dwUserNameSize;
|
|
WCHAR *pszUserName;
|
|
|
|
DWORD dwComputerNameSize;
|
|
WCHAR *pszComputerName;
|
|
WCHAR *pszDomainName;
|
|
PCONTEXT_HANDLE_TYPE2 phContext;
|
|
|
|
PTCLIENTHANDLE pClientHandles;
|
|
HMANAGEMENTCLIENT hMapper;
|
|
LPTAPIPERMANENTID pLineMap;
|
|
LPDWORD pLineDevices;
|
|
|
|
DWORD dwLineDevices;
|
|
LPTAPIPERMANENTID pPhoneMap;
|
|
LPDWORD pPhoneDevices;
|
|
DWORD dwPhoneDevices;
|
|
|
|
union
|
|
{
|
|
HANDLE hValidEventBufferDataEvent;
|
|
HANDLE hMailslot;
|
|
};
|
|
DWORD dwEventBufferTotalSize;
|
|
DWORD dwEventBufferUsedSize;
|
|
LPBYTE pEventBuffer;
|
|
|
|
LPBYTE pDataIn;
|
|
LPBYTE pDataOut;
|
|
PTLINEAPP ptLineApps;
|
|
PTPHONEAPP ptPhoneApps;
|
|
|
|
PTAPIDIALOGINSTANCE pProviderXxxDlgInsts;
|
|
PTAPIDIALOGINSTANCE pGenericDlgInsts;
|
|
struct _TCLIENT *pPrev;
|
|
struct _TCLIENT *pNext;
|
|
|
|
DWORD dwFlags;
|
|
LIST_ENTRY MsgPendingListEntry;
|
|
union
|
|
{
|
|
DWORD dwDgRetryTimeoutTickCount;
|
|
DWORD dwCnBusy;
|
|
};
|
|
|
|
DWORD dwDgEventsRetrievedTickCount;
|
|
|
|
DWORD htClient;
|
|
|
|
DWORD adwEventSubMasks[EM_NUM_MASKS];
|
|
} TCLIENT, *PTCLIENT;
|
|
#define PTCLIENT_FLAG_ADMINISTRATOR 1
|
|
#define PTCLIENT_FLAG_SKIPFIRSTMESSAGE 2
|
|
#define PTCLIENT_FLAG_LOCKEDMMCWRITE 4
|
|
|
|
|
|
typedef struct _TREQUESTRECIPIENT
|
|
{
|
|
PTLINEAPP ptLineApp;
|
|
DWORD dwRegistrationInstance;
|
|
struct _TREQUESTRECIPIENT *pPrev;
|
|
struct _TREQUESTRECIPIENT *pNext;
|
|
|
|
} TREQUESTRECIPIENT, *PTREQUESTRECIPIENT;
|
|
|
|
typedef void (*SRVPOSTPROCESSPROC)(LPVOID, LPVOID, LPVOID);
|
|
|
|
|
|
//WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
|
//DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY!
|
|
//DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY!
|
|
//DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY!
|
|
//
|
|
// The SPEVENT struct below must have the dwKey/dwType and ListEntry
|
|
// fields in the same relative place in the structure as ASYNCREQUESTINFO!
|
|
// Code in SERVER.C assumes this is an OK thing to do.
|
|
//
|
|
typedef struct _ASYNCREQUESTINFO
|
|
{
|
|
DWORD dwKey;
|
|
LIST_ENTRY ListEntry;
|
|
|
|
ULONG_PTR htXxx;
|
|
|
|
PTCLIENT ptClient;
|
|
LONG lResult;
|
|
SRVPOSTPROCESSPROC pfnPostProcess;
|
|
DWORD dwLineFlags;
|
|
|
|
DWORD InitContext;
|
|
DWORD OpenContext;
|
|
DWORD hfnClientPostProcessProc;
|
|
DWORD dwLocalRequestID;
|
|
|
|
DWORD dwRemoteRequestID;
|
|
ULONG_PTR dwParam1;
|
|
ULONG_PTR dwParam2;
|
|
ULONG_PTR dwParam3;
|
|
ULONG_PTR dwParam4;
|
|
|
|
ULONG_PTR dwParam5;
|
|
|
|
} ASYNCREQUESTINFO, *PASYNCREQUESTINFO;
|
|
|
|
enum {
|
|
SP_LINE_EVENT = 1,
|
|
SP_COMPLETION_EVENT,
|
|
SP_PHONE_EVENT
|
|
};
|
|
|
|
|
|
//DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY!
|
|
//DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY!
|
|
//
|
|
// (see above)
|
|
//
|
|
//DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY!
|
|
//DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY! DEPENDENCY!
|
|
typedef struct _SPEVENT
|
|
{
|
|
DWORD dwType;
|
|
LIST_ENTRY ListEntry;
|
|
|
|
union
|
|
{
|
|
HTAPILINE htLine;
|
|
HTAPIPHONE htPhone;
|
|
DWORD dwRequestID;
|
|
};
|
|
union
|
|
{
|
|
HTAPICALL htCall;
|
|
LONG lResult;
|
|
};
|
|
|
|
DWORD dwMsg;
|
|
ULONG_PTR dwParam1;
|
|
ULONG_PTR dwParam2;
|
|
ULONG_PTR dwParam3;
|
|
|
|
} SPEVENT, *PSPEVENT;
|
|
|
|
|
|
typedef struct _SPEVENTHANDLERTHREADINFO
|
|
{
|
|
LIST_ENTRY ListHead;
|
|
HANDLE hEvent;
|
|
CRITICAL_SECTION CritSec;
|
|
|
|
} SPEVENTHANDLERTHREADINFO, *PSPEVENTHANDLERTHREADINFO;
|
|
|
|
//
|
|
// The following XXXTUPLE types give us a quick easy way to retrieve
|
|
// the ptProvider and ptXxx associated with the widget (the widget ID
|
|
// is used as an index into a global array)
|
|
//
|
|
|
|
typedef struct _TLINELOOKUPENTRY
|
|
{
|
|
DWORD dwSPIVersion;
|
|
PTLINE ptLine;
|
|
HANDLE hMutex;
|
|
PTPROVIDER ptProvider;
|
|
|
|
DWORD bRemoved;
|
|
DWORD bRemote;
|
|
|
|
} TLINELOOKUPENTRY, *PTLINELOOKUPENTRY;
|
|
|
|
|
|
typedef struct _TLINELOOKUPTABLE
|
|
{
|
|
DWORD dwNumTotalEntries;
|
|
DWORD dwNumUsedEntries;
|
|
struct _TLINELOOKUPTABLE *pNext;
|
|
TLINELOOKUPENTRY aEntries[1];
|
|
|
|
} TLINELOOKUPTABLE, *PTLINELOOKUPTABLE;
|
|
|
|
|
|
typedef struct _TPHONELOOKUPENTRY
|
|
{
|
|
DWORD dwSPIVersion;
|
|
PTPHONE ptPhone;
|
|
HANDLE hMutex;
|
|
PTPROVIDER ptProvider;
|
|
|
|
DWORD bRemoved;
|
|
|
|
} TPHONELOOKUPENTRY, *PTPHONELOOKUPENTRY;
|
|
|
|
|
|
typedef struct _TPHONELOOKUPTABLE
|
|
{
|
|
DWORD dwNumTotalEntries;
|
|
DWORD dwNumUsedEntries;
|
|
struct _TPHONELOOKUPTABLE *pNext;
|
|
TPHONELOOKUPENTRY aEntries[1];
|
|
|
|
} TPHONELOOKUPTABLE, *PTPHONELOOKUPTABLE;
|
|
|
|
|
|
typedef struct _TREQUESTMAKECALL
|
|
{
|
|
LINEREQMAKECALLW LineReqMakeCall;
|
|
struct _TREQUESTMAKECALL *pNext;
|
|
|
|
} TREQUESTMAKECALL, *PTREQUESTMAKECALL;
|
|
|
|
|
|
typedef struct _TMANAGEDLLLISTHEADER
|
|
{
|
|
LONG lCount;
|
|
PTMANAGEDLLINFO pFirst;
|
|
|
|
} TMANAGEDLLLISTHEADER, *PTMANAGEDLLLISTHEADER;
|
|
|
|
|
|
typedef struct _PERMANENTIDELEMENT
|
|
{
|
|
DWORD dwPermanentID;
|
|
DWORD dwDeviceID;
|
|
|
|
} PERMANENTIDELEMENT, *PPERMANENTIDELEMENT;
|
|
|
|
|
|
typedef struct _PERMANENTIDARRAYHEADER
|
|
{
|
|
LONG lCookie;
|
|
DWORD dwPermanentProviderID;
|
|
PPERMANENTIDELEMENT pLineElements;
|
|
DWORD dwNumLines;
|
|
DWORD dwCurrentLines;
|
|
PPERMANENTIDELEMENT pPhoneElements;
|
|
DWORD dwNumPhones;
|
|
DWORD dwCurrentPhones;
|
|
struct _PERMANENTIDARRAYHEADER *pNext;
|
|
|
|
} PERMANENTIDARRAYHEADER, *PPERMANENTIDARRAYHEADER;
|
|
|
|
|
|
typedef struct _PRILISTSTRUCT
|
|
{
|
|
DWORD dwMediaModes;
|
|
LPWSTR pszPriList;
|
|
|
|
} PRILISTSTRUCT, *PPRILISTSTRUCT;
|
|
|
|
|
|
#ifdef __TAPI_DEBUG_CS__
|
|
|
|
#define DEBUG_CS_FILENAME_LEN 16
|
|
|
|
typedef struct _DEBUG_CS_CODEPATH
|
|
{
|
|
char szSourceFile[ DEBUG_CS_FILENAME_LEN ];
|
|
DWORD dwSourceLine;
|
|
DWORD dwThreadId;
|
|
|
|
} DEBUG_CS_CODEPATH;
|
|
|
|
typedef struct _DEBUG_CS_CRITICAL_SECTION
|
|
{
|
|
CRITICAL_SECTION CriticalSection;
|
|
DEBUG_CS_CODEPATH LastEnter;
|
|
DEBUG_CS_CODEPATH LastLeave;
|
|
|
|
} DEBUG_CS_CRITICAL_SECTION, *PDEBUG_CS_CRITICAL_SECTION;
|
|
|
|
#define TapiInitializeCriticalSection(a) \
|
|
ZeroMemory((a), sizeof(DEBUG_CS_CRITICAL_SECTION)); \
|
|
InitializeCriticalSection(&((a)->CriticalSection));
|
|
|
|
#define TapiInitializeCriticalSectionAndSpinCount(a, b) \
|
|
(ZeroMemory((a), sizeof(DEBUG_CS_CRITICAL_SECTION)), \
|
|
InitializeCriticalSectionAndSpinCount(&((a)->CriticalSection), b))
|
|
|
|
#define TapiMyInitializeCriticalSection(a, b) \
|
|
(ZeroMemory((a), sizeof(DEBUG_CS_CRITICAL_SECTION)), \
|
|
MyInitializeCriticalSection(&((a)->CriticalSection), b))
|
|
|
|
#define TapiDeleteCriticalSection(a) \
|
|
DeleteCriticalSection(&((a)->CriticalSection));
|
|
|
|
#define TapiEnterCriticalSection(a) \
|
|
EnterCriticalSection(&((a)->CriticalSection)); \
|
|
(a)->LastEnter.dwSourceLine = __LINE__; \
|
|
(a)->LastEnter.dwThreadId = GetCurrentThreadId( ); \
|
|
strcpy( \
|
|
(a)->LastEnter.szSourceFile, \
|
|
(strlen(__FILE__) < DEBUG_CS_FILENAME_LEN)? \
|
|
(__FILE__) : (__FILE__ + (strlen(__FILE__) + 1 - DEBUG_CS_FILENAME_LEN) ));
|
|
|
|
#define TapiLeaveCriticalSection(a) \
|
|
(a)->LastLeave.dwSourceLine = __LINE__; \
|
|
(a)->LastLeave.dwThreadId = GetCurrentThreadId( ); \
|
|
strcpy( \
|
|
(a)->LastLeave.szSourceFile, \
|
|
(strlen(__FILE__) < DEBUG_CS_FILENAME_LEN)? \
|
|
(__FILE__) : (__FILE__ + (strlen(__FILE__) + 1 - DEBUG_CS_FILENAME_LEN) )); \
|
|
LeaveCriticalSection(&((a)->CriticalSection));
|
|
|
|
#else // #ifdef __TAPI_DEBUG_CS__
|
|
|
|
#define TapiInitializeCriticalSection(a) \
|
|
InitializeCriticalSection(a);
|
|
|
|
#define TapiInitializeCriticalSectionAndSpinCount(a, b) \
|
|
InitializeCriticalSectionAndSpinCount(a, b)
|
|
|
|
#define TapiMyInitializeCriticalSection(a, b) \
|
|
MyInitializeCriticalSection(a, b)
|
|
|
|
#define TapiDeleteCriticalSection(a) \
|
|
DeleteCriticalSection(a);
|
|
|
|
#define TapiEnterCriticalSection(a) \
|
|
EnterCriticalSection(a);
|
|
|
|
#define TapiLeaveCriticalSection(a) \
|
|
LeaveCriticalSection(a);
|
|
|
|
#endif // #ifdef __TAPI_DEBUG_CS__
|
|
|
|
typedef struct _TAPIGLOBALS
|
|
{
|
|
HINSTANCE hinstDll;
|
|
HICON hLineIcon;
|
|
HICON hPhoneIcon;
|
|
HANDLE hProcess;
|
|
|
|
#define TAPIGLOBALS_REINIT (0x00000001)
|
|
#define TAPIGLOBALS_SERVER (0x00000002)
|
|
#define TAPIGLOBALS_PAUSED (0x00000004)
|
|
|
|
DWORD dwFlags;
|
|
PTCLIENT ptClients;
|
|
PTPROVIDER ptProviders;
|
|
DWORD dwNumLineInits;
|
|
|
|
DWORD dwNumLines;
|
|
PTLINELOOKUPTABLE pLineLookup;
|
|
DWORD dwNumPhoneInits;
|
|
DWORD dwNumPhones;
|
|
|
|
PTPHONELOOKUPTABLE pPhoneLookup;
|
|
PTREQUESTRECIPIENT pRequestRecipients;
|
|
PTREQUESTRECIPIENT pHighestPriorityRequestRecipient;
|
|
PTREQUESTMAKECALL pRequestMakeCallList;
|
|
|
|
PTREQUESTMAKECALL pRequestMakeCallListEnd;
|
|
PRILISTSTRUCT * pPriLists;
|
|
DWORD dwUsedPriorityLists;
|
|
DWORD dwTotalPriorityLists;
|
|
|
|
WCHAR *pszReqMakeCallPriList;
|
|
WCHAR *pszReqMediaCallPriList;
|
|
DWORD dwComputerNameSize;
|
|
WCHAR *pszComputerName;
|
|
|
|
SERVICE_STATUS_HANDLE sshStatusHandle;
|
|
#if TELE_SERVER
|
|
PTMANAGEDLLINFO pMapperDll;
|
|
PTMANAGEDLLLISTHEADER pManageDllList;
|
|
PPERMANENTIDARRAYHEADER pIDArrays;
|
|
#endif
|
|
|
|
ULONG64 ulPermMasks;
|
|
|
|
#ifdef __TAPI_DEBUG_CS__
|
|
DEBUG_CS_CRITICAL_SECTION CritSec;
|
|
#else
|
|
CRITICAL_SECTION CritSec;
|
|
#endif
|
|
|
|
CRITICAL_SECTION RemoteSPCritSec;
|
|
|
|
} TAPIGLOBALS, *PTAPIGLOBALS;
|
|
|
|
typedef struct _GETEVENTS_PARAMS
|
|
{
|
|
union
|
|
{
|
|
OUT LONG lResult;
|
|
};
|
|
|
|
DWORD dwUnused;
|
|
|
|
union
|
|
{
|
|
IN DWORD dwTotalBufferSize;
|
|
};
|
|
|
|
union
|
|
{
|
|
OUT DWORD dwNeededBufferSize;
|
|
};
|
|
|
|
union
|
|
{
|
|
OUT DWORD dwUsedBufferSize;
|
|
};
|
|
|
|
} GETEVENTS_PARAMS, *PGETEVENTS_PARAMS;
|
|
|
|
|
|
typedef struct _GETUIDLLNAME_PARAMS
|
|
{
|
|
union
|
|
{
|
|
OUT LONG lResult;
|
|
};
|
|
|
|
DWORD dwUnused;
|
|
|
|
union
|
|
{
|
|
IN DWORD dwObjectID;
|
|
};
|
|
|
|
union
|
|
{
|
|
IN DWORD dwObjectType;
|
|
};
|
|
|
|
union
|
|
{
|
|
OUT DWORD dwUIDllNameOffset;
|
|
};
|
|
|
|
union
|
|
{
|
|
IN OUT DWORD dwUIDllNameSize;
|
|
};
|
|
|
|
|
|
//
|
|
// The following fields used only for providerConfig, -Install, & -Remove
|
|
//
|
|
|
|
union
|
|
{
|
|
IN DWORD dwProviderFilenameOffset;
|
|
};
|
|
|
|
union
|
|
{
|
|
IN DWORD bRemoveProvider;
|
|
};
|
|
|
|
OUT HTAPIDIALOGINSTANCE htDlgInst;
|
|
|
|
} GETUIDLLNAME_PARAMS, *PGETUIDLLNAME_PARAMS;
|
|
|
|
|
|
typedef struct _UIDLLCALLBACK_PARAMS
|
|
{
|
|
union
|
|
{
|
|
OUT LONG lResult;
|
|
};
|
|
|
|
DWORD dwUnused;
|
|
|
|
IN DWORD ObjectID;
|
|
|
|
union
|
|
{
|
|
IN DWORD dwObjectType;
|
|
};
|
|
|
|
union
|
|
{
|
|
IN DWORD dwParamsInOffset;
|
|
};
|
|
|
|
union
|
|
{
|
|
IN DWORD dwParamsInSize;
|
|
};
|
|
|
|
union
|
|
{
|
|
OUT DWORD dwParamsOutOffset;
|
|
};
|
|
|
|
union
|
|
{
|
|
IN OUT DWORD dwParamsOutSize;
|
|
};
|
|
|
|
} UIDLLCALLBACK_PARAMS, *PUIDLLCALLBACK_PARAMS;
|
|
|
|
|
|
typedef struct _FREEDIALOGINSTANCE_PARAMS
|
|
{
|
|
union
|
|
{
|
|
OUT LONG lResult;
|
|
};
|
|
|
|
DWORD dwUnused;
|
|
|
|
|
|
union
|
|
{
|
|
IN HTAPIDIALOGINSTANCE htDlgInst;
|
|
};
|
|
|
|
union
|
|
{
|
|
IN LONG lUIDllResult;
|
|
};
|
|
|
|
} FREEDIALOGINSTANCE_PARAMS, *PFREEDIALOGINSTANCE_PARAMS;
|
|
|
|
|
|
typedef struct _PROXYREQUESTWRAPPER
|
|
{
|
|
ASYNCEVENTMSG AsyncEventMsg;
|
|
|
|
LINEPROXYREQUEST ProxyRequest;
|
|
|
|
} PROXYREQUESTWRAPPER, *PPROXYREQUESTWRAPPER;
|
|
|
|
|
|
typedef struct _PRIVATEFACTORYIDENTIFY_PARAMS
|
|
{
|
|
union
|
|
{
|
|
OUT LONG lResult;
|
|
};
|
|
|
|
DWORD dwUnused;
|
|
|
|
union
|
|
{
|
|
IN DWORD dwDeviceID;
|
|
};
|
|
|
|
union
|
|
{
|
|
OUT DWORD dwCLSIDOffset;
|
|
};
|
|
|
|
union
|
|
{
|
|
IN OUT DWORD dwCLSIDSize;
|
|
};
|
|
|
|
} PRIVATEFACTORYIDENTIFY_PARAMS, *PPRIVATEFACTORYIDENTIFY_PARAMS;
|
|
|
|
|
|
|
|
|
|
#if DBG
|
|
|
|
#define DBGOUT(arg) DbgPrt arg
|
|
|
|
VOID
|
|
DbgPrt(
|
|
IN DWORD dwDbgLevel,
|
|
IN PUCHAR DbgMessage,
|
|
IN ...
|
|
);
|
|
|
|
#define ASSERT(exp) if(!(exp)) { DbgPrt(0, "ASSERT : File : %s; Line : %d\n", __FILE__, __LINE__) ;}
|
|
|
|
typedef struct _MYMEMINFO
|
|
{
|
|
//
|
|
// The dwDummy field at the top of this struct is there because on
|
|
// x86 the heap mgr seems to trash this field when you free the
|
|
// block (uses it as a list entry pointer or some such). We'd like
|
|
// to see the line/file info preserved in hopes of getting more
|
|
// clues when debugging.
|
|
//
|
|
|
|
DWORD dwDummy;
|
|
DWORD dwLine;
|
|
PSTR pszFile;
|
|
|
|
} MYMEMINFO, *PMYMEMINFO;
|
|
|
|
#else
|
|
|
|
#define DBGOUT(arg)
|
|
#define ASSERT(exp)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if DBG
|
|
|
|
#define ServerAlloc( __size__ ) ServerAllocReal( __size__, __LINE__, __FILE__ )
|
|
|
|
LPVOID
|
|
WINAPI
|
|
ServerAllocReal(
|
|
DWORD dwSize,
|
|
DWORD dwLine,
|
|
PSTR pszFile
|
|
);
|
|
|
|
#else
|
|
|
|
#define ServerAlloc( __size__ ) ServerAllocReal( __size__ )
|
|
|
|
LPVOID
|
|
WINAPI
|
|
ServerAllocReal(
|
|
DWORD dwSize
|
|
);
|
|
|
|
#endif
|
|
|
|
VOID
|
|
WINAPI
|
|
ServerFree(
|
|
LPVOID lp
|
|
);
|
|
|
|
#if DBG
|
|
|
|
#define MyCreateMutex() MyRealCreateMutex(__FILE__, __LINE__)
|
|
HANDLE
|
|
MyRealCreateMutex(PSTR pFile, DWORD dwLine);
|
|
|
|
#else
|
|
|
|
#define MyCreateMutex() MyRealCreateMutex()
|
|
HANDLE
|
|
MyRealCreateMutex(
|
|
void
|
|
);
|
|
|
|
#endif
|
|
|
|
void
|
|
MyCloseMutex(
|
|
HANDLE hMutex
|
|
);
|
|
|
|
BOOL
|
|
PASCAL
|
|
MyDuplicateHandle(
|
|
HANDLE hSource,
|
|
LPHANDLE phTarget
|
|
);
|
|
|
|
VOID
|
|
CALLBACK
|
|
CompletionProc(
|
|
PASYNCREQUESTINFO pAsyncRequestInfo,
|
|
LONG lResult
|
|
);
|
|
|
|
BOOL
|
|
WaitForMutex(
|
|
HANDLE hMutex,
|
|
HANDLE *phMutex,
|
|
BOOL *pbCloseMutex,
|
|
LPVOID pWidget,
|
|
DWORD dwKey,
|
|
DWORD dwTimeout
|
|
);
|
|
|
|
void
|
|
MyReleaseMutex(
|
|
HANDLE hMutex,
|
|
BOOL bCloseMutex
|
|
);
|
|
|
|
LONG
|
|
PASCAL
|
|
DestroytLineApp(
|
|
HLINEAPP hLineApp
|
|
);
|
|
|
|
LONG
|
|
DestroytPhoneApp(
|
|
HPHONEAPP hPhoneApp
|
|
);
|
|
|
|
LONG
|
|
ServerInit(
|
|
BOOL fReinit
|
|
);
|
|
|
|
LONG
|
|
ServerShutdown(
|
|
void
|
|
);
|
|
|
|
void
|
|
WriteEventBuffer(
|
|
PTCLIENT ptClient,
|
|
PASYNCEVENTMSG pMsg
|
|
);
|
|
|
|
BOOL
|
|
PASCAL
|
|
QueueSPEvent(
|
|
PSPEVENT pSPEvent
|
|
);
|
|
|
|
VOID
|
|
QueueStaleObject(
|
|
LPVOID pObjectToQueue
|
|
);
|
|
|
|
#if DBG
|
|
|
|
#define SP_FUNC_SYNC 0
|
|
#define SP_FUNC_ASYNC 1
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP1(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
ULONG_PTR Arg1
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP2(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
ULONG_PTR Arg1,
|
|
ULONG_PTR Arg2
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP3(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
ULONG_PTR Arg1,
|
|
ULONG_PTR Arg2,
|
|
ULONG_PTR Arg3
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP4(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
ULONG_PTR Arg1,
|
|
ULONG_PTR Arg2,
|
|
ULONG_PTR Arg3,
|
|
ULONG_PTR Arg4
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP5(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
ULONG_PTR Arg1,
|
|
ULONG_PTR Arg2,
|
|
ULONG_PTR Arg3,
|
|
ULONG_PTR Arg4,
|
|
ULONG_PTR Arg5
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP6(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
ULONG_PTR Arg1,
|
|
ULONG_PTR Arg2,
|
|
ULONG_PTR Arg3,
|
|
ULONG_PTR Arg4,
|
|
ULONG_PTR Arg5,
|
|
ULONG_PTR Arg6
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP7(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
ULONG_PTR Arg1,
|
|
ULONG_PTR Arg2,
|
|
ULONG_PTR Arg3,
|
|
ULONG_PTR Arg4,
|
|
ULONG_PTR Arg5,
|
|
ULONG_PTR Arg6,
|
|
ULONG_PTR Arg7
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP8(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
ULONG_PTR Arg1,
|
|
ULONG_PTR Arg2,
|
|
ULONG_PTR Arg3,
|
|
ULONG_PTR Arg4,
|
|
ULONG_PTR Arg5,
|
|
ULONG_PTR Arg6,
|
|
ULONG_PTR Arg7,
|
|
ULONG_PTR Arg8
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP9(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
ULONG_PTR Arg1,
|
|
ULONG_PTR Arg2,
|
|
ULONG_PTR Arg3,
|
|
ULONG_PTR Arg4,
|
|
ULONG_PTR Arg5,
|
|
ULONG_PTR Arg6,
|
|
ULONG_PTR Arg7,
|
|
ULONG_PTR Arg8,
|
|
ULONG_PTR Arg9
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP12(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
ULONG_PTR Arg1,
|
|
ULONG_PTR Arg2,
|
|
ULONG_PTR Arg3,
|
|
ULONG_PTR Arg4,
|
|
ULONG_PTR Arg5,
|
|
ULONG_PTR Arg6,
|
|
ULONG_PTR Arg7,
|
|
ULONG_PTR Arg8,
|
|
ULONG_PTR Arg9,
|
|
ULONG_PTR Arg10,
|
|
ULONG_PTR Arg11,
|
|
ULONG_PTR Arg12
|
|
);
|
|
|
|
|
|
#else
|
|
|
|
#define CallSP1(pfn,nm,fl,a1) ((*pfn)(a1))
|
|
#define CallSP2(pfn,nm,fl,a1,a2) ((*pfn)(a1,a2))
|
|
#define CallSP3(pfn,nm,fl,a1,a2,a3) ((*pfn)(a1,a2,a3))
|
|
#define CallSP4(pfn,nm,fl,a1,a2,a3,a4) ((*pfn)(a1,a2,a3,a4))
|
|
#define CallSP5(pfn,nm,fl,a1,a2,a3,a4,a5) ((*pfn)(a1,a2,a3,a4,a5))
|
|
#define CallSP6(pfn,nm,fl,a1,a2,a3,a4,a5,a6) ((*pfn)(a1,a2,a3,a4,a5,a6))
|
|
#define CallSP7(pfn,nm,fl,a1,a2,a3,a4,a5,a6,a7) ((*pfn)(a1,a2,a3,a4,a5,a6,a7))
|
|
#define CallSP8(pfn,nm,fl,a1,a2,a3,a4,a5,a6,a7,a8) \
|
|
((*pfn)(a1,a2,a3,a4,a5,a6,a7,a8))
|
|
#define CallSP9(pfn,nm,fl,a1,a2,a3,a4,a5,a6,a7,a8,a9) \
|
|
((*pfn)(a1,a2,a3,a4,a5,a6,a7,a8,a9))
|
|
#define CallSP12(pfn,nm,fl,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) \
|
|
((*pfn)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12))
|
|
|
|
#endif
|
|
|
|
|
|
#if DBG
|
|
|
|
BOOL
|
|
IsBadSizeOffset(
|
|
DWORD dwTotalSize,
|
|
DWORD dwFixedSize,
|
|
DWORD dwXxxSize,
|
|
DWORD dwXxxOffset,
|
|
DWORD dwAlignMask,
|
|
char *pszCallingFunc,
|
|
char *pszFieldName
|
|
);
|
|
|
|
#define ISBADSIZEOFFSET(a1,a2,a3,a4,a5,a6,a7) IsBadSizeOffset(a1,a2,a3,a4,a5,a6,a7)
|
|
|
|
#else
|
|
|
|
BOOL
|
|
IsBadSizeOffset(
|
|
DWORD dwTotalSize,
|
|
DWORD dwFixedSize,
|
|
DWORD dwXxxSize,
|
|
DWORD dwXxxOffset,
|
|
DWORD dwAlignMask
|
|
);
|
|
|
|
#define ISBADSIZEOFFSET(a1,a2,a3,a4,a5,a6,a7) IsBadSizeOffset(a1,a2,a3,a4,a5)
|
|
|
|
#endif
|
|
|
|
BOOL
|
|
IsBadStringParam(
|
|
DWORD dwParamsBufferSize,
|
|
LPBYTE pDataBuf,
|
|
DWORD dwStringOffset
|
|
);
|
|
|
|
#define MAP_HANDLE_TO_SP_EVENT_QUEUE_ID(h) (h % gdwNumSPEventHandlerThreads)
|
|
|
|
#if DBG
|
|
|
|
#define DWORD_CAST(v,f,l) (((v)>MAXDWORD)?(DbgPrt(0,"DWORD_CAST: information will be lost during cast from %p in file %s, line %d",(v),(f),(l)), DebugBreak(),((DWORD)(v))):((DWORD)(v)))
|
|
|
|
#else
|
|
#define DWORD_CAST(v,f,l) (DWORD)(v)
|
|
#endif //DBG
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|