51 FIXME(
"(%d,%p,%p,%p,%p): stub\n", idInst, hszService,
hszTopic, hConvList, pCC);
60 FIXME(
"(%p,%p): stub\n", hConvList, hConvPrev);
77 FIXME(
"(%p): stub\n", hConvList);
90 ATOM aSrv = 0, aTpc = 0;
92 TRACE(
"(0x%x,%p,%p,%p)\n", idInst, hszService,
hszTopic, pCC);
102 ERR(
"This Conv already exists: (%p)\n", pConv);
113 wndclass.
cbSize =
sizeof(wndclass);
128 hwndClient =
CreateWindowW(
WDML_szClientConvClassW,
NULL,
WS_POPUP, 0, 0, 0, 0, 0, 0, 0, 0);
134 wndclass.
cbSize =
sizeof(wndclass);
149 hwndClient =
CreateWindowA(
WDML_szClientConvClassA,
NULL,
WS_POPUP, 0, 0, 0, 0, 0, 0, 0, 0);
157 if (!aSrv)
goto theEnd;
162 if (!aTpc)
goto theEnd;
181 WARN(
"Done with INITIATE, but no Server window available\n");
216 ATOM aSrv = 0, aTpc = 0;
218 TRACE(
"(%p)\n", hConv);
241 if (!aSrv || !aTpc)
goto theEnd;
250 FIXME(
"Should fail reconnection\n");
261 if (pLink->
hConv == hConv)
281 return (HCONV)pNewConv;
295 TRACE(
"XTYP_ADVSTART (with%s data) transaction\n", (wType &
XTYPF_NODATA) ?
"out" :
"");
298 if (!atom)
return NULL;
307 pXAct->
wType = wType & ~0x0F;
348 if (ack) *ack = uiLo;
372 TRACE(
"Returning FALSE on XTYP_ADVSTART - fAck was FALSE\n");
390 TRACE(
"XTYP_ADVSTOP transaction\n");
393 if (!atom)
return NULL;
434 if (ack) *ack = uiLo;
437 TRACE(
"WM_DDE_ACK received while waiting for a timeout\n");
441 TRACE(
"Returning FALSE on XTYP_ADVSTOP - fAck was FALSE\n");
464 TRACE(
"XTYP_REQUEST transaction\n");
467 if (!atom)
return NULL;
496 switch (
msg->message)
502 if (ack) *ack = uiLo;
506 ERR(
"Positive answer should appear in NACK for a request, assuming negative\n");
507 TRACE(
"Negative answer...\n");
512 TRACE(
"Got the result (%08lx)\n", uiLo);
552 BOOL clientUnicode, serverUnicode;
555 clientUnicode = pConv->
instance->unicode;
556 TRACE(
"client %p uses unicode = %d\n", pConv->
hwndClient, clientUnicode);
559 TRACE(
"server %p uses unicode = %d\n", pConv->
hwndServer, serverUnicode);
561 if (clientUnicode == serverUnicode)
586 if (clientUnicode == serverUnicode)
622 TRACE(
"XTYP_EXECUTE transaction\n");
626 if (cbData == (
DWORD)-1)
637 if (cbData == (
DWORD)-1)
639 HDDEDATA hDdeData =
pData;
681 if (ack) *ack = uiLo;
697 UINT wFmt, HSZ hszItem)
705 TRACE(
"XTYP_POKE transaction\n");
708 if (!atom)
return NULL;
717 if (cbData == (
DWORD)-1)
769 if (ack) *ack = uiLo;
810 FIXME(
"hmmm shouldn't happen\n");
816 0, 0, 0, 0, (pConv->wStatus &
ST_ISSELF) ? 1 : 0);
830 HDDEDATA hDdeDataIn, hDdeDataOut;
835 TRACE(
"WM_DDE_DATA message received in the Client Proc!\n");
857 if (hDdeDataIn != 0 && wdh.
fAckReq)
869 pConv->hszTopic, pLink->
hszItem, hDdeDataIn, 0, 0);
975 switch (
msg->message)
987 *hdd = (HDDEDATA)
TRUE;
994 FIXME(
"shouldn't be used on client side\n");
1028 HDDEDATA hdd =
NULL;
1042 TRACE(
"WDML_HandleReply returned WDML_QS_HANDLED\n");
1062 TRACE(
"Timeout !!\n");
1096 WARN(
"Failed posting message %x to %p (error=0x%x)\n",
1110 hDdeData = (HDDEDATA)1;
1129 TRACE(
"(%p,%d,%p,%p,%x,%x,%d,%p)\n",
1134 WARN(
"Invalid conversation handle NULL\n");
1181 if (
pData || !hszItem)
1189 FIXME(
"Unknown transaction type %04x\n", wType);
1207 TRACE(
"Transactions are blocked, add to the queue and exit\n");
1242 (idTransaction == 0 || pXAct->
xActID == idTransaction))
1369 TRACE(
"(%p)\n", hConv);
1373 WARN(
"DdeDisconnect(): hConv = 0\n");
1401 FIXME(
"Not implemented yet for a server side conversation\n");
1417 TRACE(
"(%p)\n", hConv);
HDDEDATA WINAPI DdeClientTransaction(LPBYTE pData, DWORD cbData, HCONV hConv, HSZ hszItem, UINT wFmt, UINT wType, DWORD dwTimeout, LPDWORD pdwResult)
BOOL WINAPI DdeImpersonateClient(HCONV hConv)
ATOM WINAPI GlobalDeleteAtom(ATOM nAtom)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
struct tagWDML_CONV * next
int WINAPI GetClassNameA(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPSTR lpClassName, _In_ int nMaxCount)
int WINAPI lstrcmpiA(LPCSTR lpString1, LPCSTR lpString2)
#define WideCharToMultiByte
static WDML_QUEUE_STATE WDML_HandleAdviseReply(WDML_CONV *pConv, MSG *msg, WDML_XACT *pXAct, DWORD *ack)
LPBYTE WINAPI DdeAccessData(HDDEDATA, LPDWORD)
WDML_XACT * WDML_AllocTransaction(WDML_INSTANCE *pInstance, UINT ddeMsg, UINT wFmt, HSZ hszItem) DECLSPEC_HIDDEN
static WDML_QUEUE_STATE WDML_HandleIncomingData(WDML_CONV *pConv, MSG *msg, HDDEDATA *hdd)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
ATOM WDML_MakeAtomFromHsz(HSZ hsz) DECLSPEC_HIDDEN
#define DMLERR_MEMORY_ERROR
DWORD WINAPI GetTickCount(VOID)
static WDML_XACT * WDML_ClientQueuePoke(WDML_CONV *pConv, LPVOID pData, DWORD cbData, UINT wFmt, HSZ hszItem)
static WDML_XACT * WDML_ClientQueueTerminate(WDML_CONV *pConv)
static WDML_QUEUE_STATE WDML_HandleReply(WDML_CONV *pConv, MSG *msg, HDDEDATA *hdd, DWORD *ack)
DWORD WINAPI GetLastError(VOID)
static WDML_QUEUE_STATE WDML_HandleExecuteReply(WDML_CONV *pConv, MSG *msg, WDML_XACT *pXAct, DWORD *ack)
void WDML_AddLink(WDML_INSTANCE *pInstance, HCONV hConv, WDML_SIDE side, UINT wType, HSZ hszItem, UINT wFmt) DECLSPEC_HIDDEN
static WDML_XACT * WDML_ClientQueueExecute(WDML_CONV *pConv, LPVOID pData, DWORD cbData)
BOOL WINAPI DdeAbandonTransaction(DWORD idInst, HCONV hConv, DWORD idTransaction)
LPARAM WINAPI PackDDElParam(UINT, UINT_PTR, UINT_PTR)
HDDEDATA WDML_ClientHandle(WDML_CONV *pConv, WDML_XACT *pXAct, DWORD dwTimeout, LPDWORD pdwResult)
#define DMLERR_POKEACKTIMEOUT
#define DMLERR_POSTMSG_FAILED
#define DDE_FNOTPROCESSED
BOOL WDML_UnQueueTransaction(WDML_CONV *pConv, WDML_XACT *pXAct) DECLSPEC_HIDDEN
BOOL WINAPI DdeFreeDataHandle(HDDEDATA)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
#define DMLERR_ADVACKTIMEOUT
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
const WCHAR WDML_szServerConvClassW[]
#define DMLERR_NOTPROCESSED
BOOL WINAPI DdeDisconnect(HCONV hConv)
int WINAPI lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2)
WDML_INSTANCE * WDML_GetInstanceFromWnd(HWND hWnd) DECLSPEC_HIDDEN
int WINAPI GetClassNameW(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPWSTR lpClassName, _In_ int nMaxCount)
WDML_CONV * WDML_GetConv(HCONV hConv, BOOL checkConnected) DECLSPEC_HIDDEN
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
GLenum GLuint GLenum GLsizei const GLchar * buf
HSZ WDML_MakeHszFromAtom(const WDML_INSTANCE *pInstance, ATOM atom) DECLSPEC_HIDDEN
HCONVLIST WINAPI DdeConnectList(DWORD idInst, HSZ hszService, HSZ hszTopic, HCONVLIST hConvList, PCONVCONTEXT pCC)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
struct tagWDML_XACT * next
static WDML_XACT * WDML_ClientQueueRequest(WDML_CONV *pConv, UINT wFmt, HSZ hszItem)
void WDML_QueueTransaction(WDML_CONV *pConv, WDML_XACT *pXAct) DECLSPEC_HIDDEN
const char WDML_szClientConvClassA[]
#define XTYP_XACT_COMPLETE
HDDEDATA WDML_Global2DataHandle(WDML_CONV *pConv, HGLOBAL hMem, WINE_DDEHEAD *da) DECLSPEC_HIDDEN
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
BOOL WDML_PostAck(WDML_CONV *pConv, WDML_SIDE side, WORD appRetCode, BOOL fBusy, BOOL fAck, UINT_PTR pmt, LPARAM lParam, UINT oldMsg) DECLSPEC_HIDDEN
static WDML_QUEUE_STATE WDML_HandleRequestReply(WDML_CONV *pConv, MSG *msg, WDML_XACT *pXAct, DWORD *ack)
#define DMLERR_UNADVACKTIMEOUT
BOOL WDML_DecHSZ(WDML_INSTANCE *pInstance, HSZ hsz) DECLSPEC_HIDDEN
BOOL WINAPI IsWindowUnicode(_In_ HWND)
HCONV WINAPI DdeReconnect(HCONV hConv)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
WDML_LINK * WDML_FindLink(WDML_INSTANCE *pInstance, HCONV hConv, WDML_SIDE side, HSZ hszItem, BOOL use_fmt, UINT uFmt) DECLSPEC_HIDDEN
INT WINAPI DdeCmpStringHandles(HSZ, HSZ)
BOOL WINAPI ImpersonateDdeClientWindow(HWND hWndClient, HWND hWndServer)
#define DMLERR_EXECACKTIMEOUT
static WDML_XACT * WDML_ClientQueueUnadvise(WDML_CONV *pConv, UINT wFmt, HSZ hszItem)
WDML_CONV * WDML_AddConv(WDML_INSTANCE *pInstance, WDML_SIDE side, HSZ hszService, HSZ hszTopic, HWND hwndClient, HWND hwndServer) DECLSPEC_HIDDEN
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
unsigned __int3264 UINT_PTR
static WDML_QUEUE_STATE WDML_HandleTerminateReply(WDML_CONV *pConv, MSG *msg)
DWORD WINAPI MsgWaitForMultipleObjects(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ BOOL fWaitAll, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask)
#define GWL_WDML_INSTANCE
#define DMLERR_DATAACKTIMEOUT
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
BOOL WINAPI FreeDDElParam(UINT, LPARAM)
#define memcpy(s1, s2, n)
#define GWL_WDML_CONVERSATION
static WDML_QUEUE_STATE WDML_HandleIncomingTerminate(WDML_CONV *pConv, MSG *msg, HDDEDATA *hdd)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
static LRESULT CALLBACK WDML_ClientProc(HWND, UINT, WPARAM, LPARAM)
ATOM WINAPI RegisterClassExA(_In_ CONST WNDCLASSEXA *)
struct tagWDML_LINK * next
static WDML_XACT * WDML_ClientQueueAdvise(WDML_CONV *pConv, UINT wType, UINT wFmt, HSZ hszItem)
struct tagDDE_DATAHANDLE_HEAD DDE_DATAHANDLE_HEAD
BOOL WINAPI UnpackDDElParam(UINT, LPARAM, PUINT_PTR, PUINT_PTR)
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD dwTimeout
#define CBF_SKIP_DISCONNECTS
#define DMLERR_INVALIDPARAMETER
FxWmiInstanceExternal * pInstance
struct tagWDML_INSTANCE * instance
void WDML_FreeTransaction(WDML_INSTANCE *pInstance, WDML_XACT *pXAct, BOOL doFreePmt) DECLSPEC_HIDDEN
static HDDEDATA WDML_SyncWaitTransactionReply(HCONV hConv, DWORD dwTimeout, const WDML_XACT *pXAct, DWORD *ack)
_In_ UINT _In_ DWORD _Out_ DWORD * pdwResult
WDML_CONV * WDML_FindConv(WDML_INSTANCE *pInstance, WDML_SIDE side, HSZ hszService, HSZ hszTopic) DECLSPEC_HIDDEN
void WDML_RemoveLink(WDML_INSTANCE *pInstance, HCONV hConv, WDML_SIDE side, HSZ hszItem, UINT wFmt) DECLSPEC_HIDDEN
const char WDML_szServerConvClassA[]
static __inline void WDML_ExtractAck(WORD status, DDEACK *da)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define FIELD_OFFSET(t, f)
HCONV WINAPI DdeConnect(DWORD idInst, HSZ hszService, HSZ hszTopic, PCONVCONTEXT pCC)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
#define MultiByteToWideChar
LRESULT WINAPI SendMessageTimeoutW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM, _In_ UINT, _In_ UINT, _Out_opt_ PDWORD_PTR)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
void WDML_RemoveConv(WDML_CONV *pConv, WDML_SIDE side) DECLSPEC_HIDDEN
WDML_INSTANCE * WDML_GetInstance(DWORD InstId) DECLSPEC_HIDDEN
BOOL WINAPI DdeUnaccessData(HDDEDATA)
BOOL WINAPI DdeDisconnectList(HCONVLIST hConvList)
#define SetWindowLongPtrW
const WCHAR WDML_szClientConvClassW[]
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
WINE_DEFAULT_DEBUG_CHANNEL(ddeml)
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
#define DMLERR_NO_CONV_ESTABLISHED
HCONV WINAPI DdeQueryNextServer(HCONVLIST hConvList, HCONV hConvPrev)
HDDEDATA WDML_InvokeCallback(WDML_INSTANCE *pInst, UINT uType, UINT uFmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hdata, ULONG_PTR dwData1, ULONG_PTR dwData2) DECLSPEC_HIDDEN
WDML_CONV * WDML_GetConvFromWnd(HWND hWnd) DECLSPEC_HIDDEN
#define WIN_GetFullHandle(h)
static WDML_QUEUE_STATE WDML_HandlePokeReply(WDML_CONV *pConv, MSG *msg, WDML_XACT *pXAct, DWORD *ack)
static HGLOBAL WDML_BuildExecuteCommand(WDML_CONV *pConv, LPCVOID pData, DWORD cbData)
static WDML_QUEUE_STATE WDML_HandleUnadviseReply(WDML_CONV *pConv, MSG *msg, WDML_XACT *pXAct, DWORD *ack)