56 FIXME(
"(%ld,%p,%p,%p,%p): stub\n", idInst, hszService,
hszTopic, hConvList, pCC);
65 FIXME(
"(%p,%p): stub\n", hConvList, hConvPrev);
82 FIXME(
"(%p): stub\n", hConvList);
95 ATOM aSrv = 0, aTpc = 0;
97 TRACE(
"(0x%lx,%p,%p,%p)\n", idInst, hszService,
hszTopic, pCC);
107 ERR(
"This Conv already exists: (%p)\n", pConv);
118 wndclass.
cbSize =
sizeof(wndclass);
133 hwndClient =
CreateWindowW(
WDML_szClientConvClassW,
NULL,
WS_POPUP, 0, 0, 0, 0, 0, 0, 0, 0);
139 wndclass.
cbSize =
sizeof(wndclass);
154 hwndClient =
CreateWindowA(
WDML_szClientConvClassA,
NULL,
WS_POPUP, 0, 0, 0, 0, 0, 0, 0, 0);
162 if (!aSrv)
goto theEnd;
167 if (!aTpc)
goto theEnd;
186 WARN(
"Done with INITIATE, but no Server window available\n");
221 ATOM aSrv = 0, aTpc = 0;
223 TRACE(
"(%p)\n", hConv);
246 if (!aSrv || !aTpc)
goto theEnd;
255 FIXME(
"Should fail reconnection\n");
266 if (pLink->
hConv == hConv)
286 return (HCONV)pNewConv;
300 TRACE(
"XTYP_ADVSTART (with%s data) transaction\n", (wType &
XTYPF_NODATA) ?
"out" :
"");
303 if (!atom)
return NULL;
312 pXAct->
wType = wType & ~0x0F;
353 if (ack) *ack = uiLo;
377 TRACE(
"Returning FALSE on XTYP_ADVSTART - fAck was FALSE\n");
395 TRACE(
"XTYP_ADVSTOP transaction\n");
398 if (!atom)
return NULL;
439 if (ack) *ack = uiLo;
442 TRACE(
"WM_DDE_ACK received while waiting for a timeout\n");
446 TRACE(
"Returning FALSE on XTYP_ADVSTOP - fAck was FALSE\n");
469 TRACE(
"XTYP_REQUEST transaction\n");
472 if (!atom)
return NULL;
501 switch (
msg->message)
507 if (ack) *ack = uiLo;
511 ERR(
"Positive answer should appear in NACK for a request, assuming negative\n");
512 TRACE(
"Negative answer...\n");
517 TRACE(
"Got the result (%08Ix)\n", uiLo);
557 BOOL clientUnicode, serverUnicode;
560 clientUnicode = pConv->
instance->unicode;
561 TRACE(
"client %p uses unicode = %d\n", pConv->
hwndClient, clientUnicode);
564 TRACE(
"server %p uses unicode = %d\n", pConv->
hwndServer, serverUnicode);
566 if (clientUnicode == serverUnicode)
591 if (clientUnicode == serverUnicode)
627 TRACE(
"XTYP_EXECUTE transaction\n");
644 HDDEDATA hDdeData =
pData;
686 if (ack) *ack = uiLo;
702 UINT wFmt, HSZ hszItem)
710 TRACE(
"XTYP_POKE transaction\n");
713 if (!atom)
return NULL;
774 if (ack) *ack = uiLo;
795 pConv->
wStatus &= ~ST_CONNECTED;
815 FIXME(
"hmmm shouldn't happen\n");
821 0, 0, 0, 0, (pConv->wStatus &
ST_ISSELF) ? 1 : 0);
835 HDDEDATA hDdeDataIn, hDdeDataOut;
840 TRACE(
"WM_DDE_DATA message received in the Client Proc!\n");
862 if (hDdeDataIn != 0 && wdh.
fAckReq)
905 pConv->
wStatus &= ~ST_CONNECTED;
980 switch (
msg->message)
992 *hdd = (HDDEDATA)
TRUE;
999 FIXME(
"shouldn't be used on client side\n");
1018 TRACE(
"Starting wait for a timeout of %ld ms\n", dwTimeout);
1033 HDDEDATA hdd =
NULL;
1047 TRACE(
"WDML_HandleReply returned WDML_QS_HANDLED\n");
1067 TRACE(
"Timeout !!\n");
1101 WARN(
"Failed posting message %x to %p (error=0x%lx)\n",
1103 pConv->
wStatus &= ~ST_CONNECTED;
1115 hDdeData = (HDDEDATA)1;
1134 TRACE(
"(%p,%ld,%p,%p,%x,%x,%ld,%p)\n",
1139 WARN(
"Invalid conversation handle NULL\n");
1186 if (
pData || !hszItem)
1194 FIXME(
"Unknown transaction type %04x\n", wType);
1212 TRACE(
"Transactions are blocked, add to the queue and exit\n");
1247 (idTransaction == 0 || pXAct->
xActID == idTransaction))
1374 TRACE(
"(%p)\n", hConv);
1378 WARN(
"DdeDisconnect(): hConv = 0\n");
1406 FIXME(
"Not implemented yet for a server side conversation\n");
1422 TRACE(
"(%p)\n", hConv);
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
BOOL WINAPI UnpackDDElParam(UINT, LPARAM, PUINT_PTR, PUINT_PTR)
BOOL WINAPI ImpersonateDdeClientWindow(HWND hWndClient, HWND hWndServer)
BOOL WINAPI FreeDDElParam(UINT, LPARAM)
LPARAM WINAPI PackDDElParam(UINT, UINT_PTR, UINT_PTR)
void WDML_QueueTransaction(WDML_CONV *pConv, WDML_XACT *pXAct)
WDML_INSTANCE * WDML_GetInstanceFromWnd(HWND hWnd)
#define GWL_WDML_CONVERSATION
WDML_CONV * WDML_AddConv(WDML_INSTANCE *pInstance, WDML_SIDE side, HSZ hszService, HSZ hszTopic, HWND hwndClient, HWND hwndServer)
static __inline void WDML_ExtractAck(WORD status, DDEACK *da)
WDML_CONV * WDML_GetConv(HCONV hConv, BOOL checkConnected)
BOOL WDML_PostAck(WDML_CONV *pConv, WDML_SIDE side, WORD appRetCode, BOOL fBusy, BOOL fAck, UINT_PTR pmt, LPARAM lParam, UINT oldMsg)
HSZ WDML_MakeHszFromAtom(const WDML_INSTANCE *pInstance, ATOM atom)
void WDML_FreeTransaction(WDML_INSTANCE *pInstance, WDML_XACT *pXAct, BOOL doFreePmt)
struct tagDDE_DATAHANDLE_HEAD DDE_DATAHANDLE_HEAD
void WDML_RemoveLink(WDML_INSTANCE *pInstance, HCONV hConv, WDML_SIDE side, HSZ hszItem, UINT wFmt)
BOOL WDML_DecHSZ(WDML_INSTANCE *pInstance, HSZ hsz)
void WDML_RemoveConv(WDML_CONV *pConv, WDML_SIDE side)
HDDEDATA WDML_InvokeCallback(WDML_INSTANCE *pInst, UINT uType, UINT uFmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hdata, ULONG_PTR dwData1, ULONG_PTR dwData2)
WDML_XACT * WDML_AllocTransaction(WDML_INSTANCE *pInstance, UINT ddeMsg, UINT wFmt, HSZ hszItem)
ATOM WDML_MakeAtomFromHsz(HSZ hsz)
WDML_LINK * WDML_FindLink(WDML_INSTANCE *pInstance, HCONV hConv, WDML_SIDE side, HSZ hszItem, BOOL use_fmt, UINT uFmt)
WDML_CONV * WDML_FindConv(WDML_INSTANCE *pInstance, WDML_SIDE side, HSZ hszService, HSZ hszTopic)
const char WDML_szServerConvClassA[]
BOOL WDML_UnQueueTransaction(WDML_CONV *pConv, WDML_XACT *pXAct)
WDML_INSTANCE * WDML_GetInstance(DWORD InstId)
HDDEDATA WDML_Global2DataHandle(WDML_CONV *pConv, HGLOBAL hMem, WINE_DDEHEAD *da)
WDML_CONV * WDML_GetConvFromWnd(HWND hWnd)
void WDML_AddLink(WDML_INSTANCE *pInstance, HCONV hConv, WDML_SIDE side, UINT wType, HSZ hszItem, UINT wFmt)
#define GWL_WDML_INSTANCE
const WCHAR WDML_szServerConvClassW[]
static WDML_QUEUE_STATE WDML_HandleTerminateReply(WDML_CONV *pConv, MSG *msg)
static WDML_QUEUE_STATE WDML_HandleIncomingTerminate(WDML_CONV *pConv, MSG *msg, HDDEDATA *hdd)
static WDML_QUEUE_STATE WDML_HandleRequestReply(WDML_CONV *pConv, MSG *msg, WDML_XACT *pXAct, DWORD *ack)
BOOL WINAPI DdeDisconnectList(HCONVLIST hConvList)
static LRESULT CALLBACK WDML_ClientProc(HWND, UINT, WPARAM, LPARAM)
HCONV WINAPI DdeReconnect(HCONV hConv)
static WDML_XACT * WDML_ClientQueueRequest(WDML_CONV *pConv, UINT wFmt, HSZ hszItem)
BOOL WINAPI DdeAbandonTransaction(DWORD idInst, HCONV hConv, DWORD idTransaction)
static WDML_XACT * WDML_ClientQueueExecute(WDML_CONV *pConv, LPVOID pData, DWORD cbData)
const WCHAR WDML_szClientConvClassW[]
HDDEDATA WINAPI DdeClientTransaction(LPBYTE pData, DWORD cbData, HCONV hConv, HSZ hszItem, UINT wFmt, UINT wType, DWORD dwTimeout, LPDWORD pdwResult)
BOOL WINAPI DdeImpersonateClient(HCONV hConv)
static WDML_QUEUE_STATE WDML_HandleIncomingData(WDML_CONV *pConv, MSG *msg, HDDEDATA *hdd)
static HDDEDATA WDML_SyncWaitTransactionReply(HCONV hConv, DWORD dwTimeout, const WDML_XACT *pXAct, DWORD *ack)
BOOL WINAPI DdeDisconnect(HCONV hConv)
static WDML_XACT * WDML_ClientQueueUnadvise(WDML_CONV *pConv, UINT wFmt, HSZ hszItem)
static WDML_QUEUE_STATE WDML_HandlePokeReply(WDML_CONV *pConv, MSG *msg, WDML_XACT *pXAct, DWORD *ack)
static WDML_QUEUE_STATE WDML_HandleReply(WDML_CONV *pConv, MSG *msg, HDDEDATA *hdd, DWORD *ack)
HDDEDATA WDML_ClientHandle(WDML_CONV *pConv, WDML_XACT *pXAct, DWORD dwTimeout, LPDWORD pdwResult)
static WDML_XACT * WDML_ClientQueueAdvise(WDML_CONV *pConv, UINT wType, UINT wFmt, HSZ hszItem)
static WDML_XACT * WDML_ClientQueueTerminate(WDML_CONV *pConv)
static HGLOBAL WDML_BuildExecuteCommand(WDML_CONV *pConv, LPCVOID pData, DWORD cbData)
HCONVLIST WINAPI DdeConnectList(DWORD idInst, HSZ hszService, HSZ hszTopic, HCONVLIST hConvList, PCONVCONTEXT pCC)
const char WDML_szClientConvClassA[]
static WDML_QUEUE_STATE WDML_HandleExecuteReply(WDML_CONV *pConv, MSG *msg, WDML_XACT *pXAct, DWORD *ack)
HCONV WINAPI DdeConnect(DWORD idInst, HSZ hszService, HSZ hszTopic, PCONVCONTEXT pCC)
HCONV WINAPI DdeQueryNextServer(HCONVLIST hConvList, HCONV hConvPrev)
static WDML_QUEUE_STATE WDML_HandleAdviseReply(WDML_CONV *pConv, MSG *msg, WDML_XACT *pXAct, DWORD *ack)
static WDML_XACT * WDML_ClientQueuePoke(WDML_CONV *pConv, LPVOID pData, DWORD cbData, UINT wFmt, HSZ hszItem)
static WDML_QUEUE_STATE WDML_HandleUnadviseReply(WDML_CONV *pConv, MSG *msg, WDML_XACT *pXAct, DWORD *ack)
#define DMLERR_UNADVACKTIMEOUT
#define XTYP_XACT_COMPLETE
INT WINAPI DdeCmpStringHandles(HSZ, HSZ)
#define CBF_SKIP_DISCONNECTS
#define DMLERR_POSTMSG_FAILED
#define DMLERR_MEMORY_ERROR
#define DMLERR_NOTPROCESSED
#define DMLERR_ADVACKTIMEOUT
#define DDE_FNOTPROCESSED
#define DMLERR_EXECACKTIMEOUT
#define DMLERR_POKEACKTIMEOUT
#define DMLERR_DATAACKTIMEOUT
#define DMLERR_NO_CONV_ESTABLISHED
BOOL WINAPI DdeUnaccessData(HDDEDATA)
LPBYTE WINAPI DdeAccessData(HDDEDATA, LPDWORD)
BOOL WINAPI DdeFreeDataHandle(HDDEDATA)
#define DMLERR_INVALIDPARAMETER
#define WideCharToMultiByte
#define MultiByteToWideChar
ATOM WINAPI GlobalDeleteAtom(ATOM nAtom)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
ULONG WINAPI DECLSPEC_HOTPATCH GetTickCount(void)
FxWmiInstanceExternal * pInstance
GLenum GLuint GLenum GLsizei const GLchar * buf
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
static ERESOURCE GlobalLock
#define memcpy(s1, s2, n)
unsigned __int3264 UINT_PTR
_In_ UINT _In_ DWORD _Out_ DWORD * pdwResult
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
int WINAPI GetClassNameA(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPSTR lpClassName, _In_ int nMaxCount)
DWORD WINAPI MsgWaitForMultipleObjects(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ BOOL fWaitAll, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask)
LRESULT WINAPI SendMessageTimeoutW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM, _In_ UINT, _In_ UINT, _Out_opt_ PDWORD_PTR)
BOOL WINAPI IsWindowUnicode(_In_ HWND)
ATOM WINAPI RegisterClassExA(_In_ CONST WNDCLASSEXA *)
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
int WINAPI GetClassNameW(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPWSTR lpClassName, _In_ int nMaxCount)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
#define SetWindowLongPtrW
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
struct tagWDML_CONV * next
struct tagWDML_INSTANCE * instance
struct tagWDML_LINK * next
struct tagWDML_XACT * next
PCBYTE PBYTE SIZE_T cbData
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define FIELD_OFFSET(t, f)
#define WIN_GetFullHandle(h)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
DWORD WINAPI GetLastError(void)