00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
#include "precomp.h"
00012
#pragma hdrstop
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 VOID MonitorStringHandle(
00032
PCL_INSTANCE_INFO pcii,
00033 HSZ hsz,
00034 DWORD fsAction)
00035 {
00036 WCHAR szT[256];
00037
PEVENT_PACKET pep;
00038
DWORD cchString;
00039
00040
CheckDDECritIn;
00041
00042 UserAssert(pcii->
MonitorFlags & MF_HSZ_INFO);
00043
00044
if (!(cchString = GetAtomName(
LATOM_FROM_HSZ(hsz), szT,
00045
sizeof(szT) /
sizeof(WCHAR)))) {
00046
SetLastDDEMLError(pcii, DMLERR_INVALIDPARAMETER);
00047
return ;
00048 }
00049 cchString++;
00050
pep = (
PEVENT_PACKET)
DDEMLAlloc(
sizeof(
EVENT_PACKET) -
sizeof(
DWORD) +
00051
sizeof(MONHSZSTRUCT) + cchString *
sizeof(WCHAR));
00052
if (
pep ==
NULL) {
00053
SetLastDDEMLError(pcii, DMLERR_MEMORY_ERROR);
00054
return ;
00055 }
00056
00057
pep->EventType = MF_HSZ_INFO;
00058
pep->fSense =
TRUE;
00059
pep->cbEventData = (WORD)(
sizeof(MONHSZSTRUCT) + cchString *
sizeof(WCHAR));
00060
00061
#define phszs ((MONHSZSTRUCT *)&pep->Data)
00062
phszs->cb =
sizeof(MONHSZSTRUCT);
00063
phszs->fsAction = fsAction;
00064
phszs->dwTime =
NtGetTickCount();
00065
phszs->hsz = hsz;
00066
phszs->hTask = (HANDLE)LongToHandle( pcii->
tid );
00067
00068 wcscpy(
phszs->str, szT);
00069
00070
LeaveDDECrit;
00071
Event(
pep);
00072
EnterDDECrit;
00073
#undef phszs
00074
}
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 VOID MonitorLink(
00091
PCL_INSTANCE_INFO pcii,
00092 BOOL fEstablished,
00093 BOOL fNoData,
00094 LATOM aService,
00095 LATOM aTopic,
00096 GATOM aItem,
00097 WORD wFmt,
00098 BOOL fServer,
00099 HCONV hConvServer,
00100 HCONV hConvClient)
00101 {
00102
PEVENT_PACKET pep;
00103
00104
CheckDDECritIn;
00105
00106 UserAssert(pcii->
MonitorFlags & MF_LINKS);
00107
00108
pep = (
PEVENT_PACKET)
DDEMLAlloc(
sizeof(
EVENT_PACKET) -
sizeof(
DWORD) +
00109
sizeof(MONLINKSTRUCT));
00110
if (
pep ==
NULL) {
00111
SetLastDDEMLError(pcii, DMLERR_MEMORY_ERROR);
00112
return ;
00113 }
00114
00115
pep->EventType = MF_LINKS;
00116
pep->fSense =
TRUE;
00117
pep->cbEventData =
sizeof(MONLINKSTRUCT);
00118
00119
#define pls ((MONLINKSTRUCT *)&pep->Data)
00120
pls->cb =
sizeof(MONLINKSTRUCT);
00121
pls->dwTime =
NtGetTickCount();
00122
pls->hTask = (HANDLE)LongToHandle( pcii->
tid );
00123
pls->fEstablished = fEstablished;
00124
pls->fNoData = fNoData;
00125
00126
00127
00128
00129
pls->hszSvc = (HSZ)
LocalToGlobalAtom(aService);
00130
pls->hszTopic = (HSZ)
LocalToGlobalAtom(aTopic);
00131
IncGlobalAtomCount(aItem);
00132
pls->hszItem = (HSZ)aItem;
00133
00134
pls->wFmt = wFmt;
00135
pls->fServer = fServer;
00136
pls->hConvServer = hConvServer;
00137
pls->hConvClient = hConvClient;
00138
00139
LeaveDDECrit;
00140
Event(
pep);
00141
EnterDDECrit;
00142
00143 GlobalDeleteAtom((ATOM)(ULONG_PTR)
pls->hszSvc);
00144 GlobalDeleteAtom((ATOM)(ULONG_PTR)
pls->hszTopic);
00145 GlobalDeleteAtom(aItem);
00146
#undef pls
00147
}
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167 VOID MonitorConv(
00168
PCONV_INFO pcoi,
00169 BOOL fConnect)
00170 {
00171
PEVENT_PACKET pep;
00172
00173
CheckDDECritIn;
00174
00175 UserAssert(pcoi->
pcii->
MonitorFlags & MF_CONV);
00176
00177
pep = (
PEVENT_PACKET)
DDEMLAlloc(
sizeof(
EVENT_PACKET) -
sizeof(
DWORD) +
00178
sizeof(MONCONVSTRUCT));
00179
if (
pep ==
NULL) {
00180
SetLastDDEMLError(pcoi->
pcii, DMLERR_MEMORY_ERROR);
00181
return ;
00182 }
00183
00184
pep->EventType = MF_CONV;
00185
pep->fSense =
TRUE;
00186
pep->cbEventData =
sizeof(MONCONVSTRUCT);
00187
00188
#define pcs ((MONCONVSTRUCT *)&pep->Data)
00189
pcs->cb =
sizeof(MONCONVSTRUCT);
00190
pcs->fConnect = fConnect;
00191
pcs->dwTime =
NtGetTickCount();
00192
pcs->hTask = (HANDLE)LongToHandle( pcoi->
pcii->
tid );
00193
pcs->hszSvc = (HSZ)
LocalToGlobalAtom(pcoi->
laService);
00194
pcs->hszTopic = (HSZ)
LocalToGlobalAtom(pcoi->
laTopic);
00195
if (pcoi->
state & ST_CLIENT) {
00196
pcs->hConvClient = (HCONV)pcoi->
hwndConv;
00197
pcs->hConvServer = (HCONV)pcoi->
hwndPartner;
00198 }
else {
00199
pcs->hConvClient = (HCONV)pcoi->
hwndPartner;
00200
pcs->hConvServer = (HCONV)pcoi->
hwndConv;
00201 }
00202
00203
LeaveDDECrit;
00204
Event(
pep);
00205
EnterDDECrit;
00206
00207 GlobalDeleteAtom((ATOM)(ULONG_PTR)
pcs->hszSvc);
00208 GlobalDeleteAtom((ATOM)(ULONG_PTR)
pcs->hszTopic);
00209
#undef pcs
00210
}