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;
790 pConv->
wStatus &= ~ST_CONNECTED;
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)
900 pConv->
wStatus &= ~ST_CONNECTED;
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",
1098 pConv->
wStatus &= ~ST_CONNECTED;
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);
#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)
WDML_CONV * WDML_FindConv(WDML_INSTANCE *pInstance, WDML_SIDE side, HSZ hszService, HSZ hszTopic) DECLSPEC_HIDDEN
WDML_XACT * WDML_AllocTransaction(WDML_INSTANCE *pInstance, UINT ddeMsg, UINT wFmt, HSZ hszItem) DECLSPEC_HIDDEN
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
HDDEDATA WDML_Global2DataHandle(WDML_CONV *pConv, HGLOBAL hMem, WINE_DDEHEAD *da) DECLSPEC_HIDDEN
#define GWL_WDML_CONVERSATION
ATOM WDML_MakeAtomFromHsz(HSZ hsz) DECLSPEC_HIDDEN
static __inline void WDML_ExtractAck(WORD status, DDEACK *da)
WDML_LINK * WDML_FindLink(WDML_INSTANCE *pInstance, HCONV hConv, WDML_SIDE side, HSZ hszItem, BOOL use_fmt, UINT uFmt) DECLSPEC_HIDDEN
WDML_INSTANCE * WDML_GetInstanceFromWnd(HWND hWnd) DECLSPEC_HIDDEN
WDML_CONV * WDML_GetConv(HCONV hConv, BOOL checkConnected) DECLSPEC_HIDDEN
struct tagDDE_DATAHANDLE_HEAD DDE_DATAHANDLE_HEAD
BOOL WDML_DecHSZ(WDML_INSTANCE *pInstance, HSZ hsz) DECLSPEC_HIDDEN
BOOL WDML_UnQueueTransaction(WDML_CONV *pConv, WDML_XACT *pXAct) DECLSPEC_HIDDEN
void WDML_AddLink(WDML_INSTANCE *pInstance, HCONV hConv, WDML_SIDE side, UINT wType, HSZ hszItem, UINT wFmt) DECLSPEC_HIDDEN
WDML_CONV * WDML_GetConvFromWnd(HWND hWnd) DECLSPEC_HIDDEN
void WDML_RemoveLink(WDML_INSTANCE *pInstance, HCONV hConv, WDML_SIDE side, HSZ hszItem, UINT wFmt) DECLSPEC_HIDDEN
void WDML_FreeTransaction(WDML_INSTANCE *pInstance, WDML_XACT *pXAct, BOOL doFreePmt) DECLSPEC_HIDDEN
BOOL WDML_PostAck(WDML_CONV *pConv, WDML_SIDE side, WORD appRetCode, BOOL fBusy, BOOL fAck, UINT_PTR pmt, LPARAM lParam, UINT oldMsg) DECLSPEC_HIDDEN
WDML_INSTANCE * WDML_GetInstance(DWORD InstId) DECLSPEC_HIDDEN
void WDML_RemoveConv(WDML_CONV *pConv, WDML_SIDE side) DECLSPEC_HIDDEN
HSZ WDML_MakeHszFromAtom(const WDML_INSTANCE *pInstance, ATOM atom) DECLSPEC_HIDDEN
WDML_CONV * WDML_AddConv(WDML_INSTANCE *pInstance, WDML_SIDE side, HSZ hszService, HSZ hszTopic, HWND hwndClient, HWND hwndServer) DECLSPEC_HIDDEN
void WDML_QueueTransaction(WDML_CONV *pConv, WDML_XACT *pXAct) DECLSPEC_HIDDEN
#define GWL_WDML_INSTANCE
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)
const char WDML_szClientConvClassA[]
static WDML_XACT * WDML_ClientQueueExecute(WDML_CONV *pConv, LPVOID pData, DWORD cbData)
HDDEDATA WINAPI DdeClientTransaction(LPBYTE pData, DWORD cbData, HCONV hConv, HSZ hszItem, UINT wFmt, UINT wType, DWORD dwTimeout, LPDWORD pdwResult)
const WCHAR WDML_szClientConvClassW[]
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)
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
const WCHAR WDML_szServerConvClassW[]
const char WDML_szServerConvClassA[]
#define WideCharToMultiByte
#define MultiByteToWideChar
ATOM WINAPI GlobalDeleteAtom(ATOM nAtom)
DWORD WINAPI GetTickCount(VOID)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
FxWmiInstanceExternal * pInstance
GLenum GLuint GLenum GLsizei const GLchar * buf
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
#define memcpy(s1, s2, n)
unsigned __int3264 UINT_PTR
_In_ UINT _In_ DWORD _Out_ DWORD * pdwResult
struct tagWDML_CONV * next
struct tagWDML_INSTANCE * instance
struct tagWDML_LINK * next
struct tagWDML_XACT * next
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)
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD dwTimeout
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)