Added coded stubs for DdeQueryConvInfo (16 & 32 bit), DdeAddData (32
bit), DdeAbandonTransaction (32 bit), DdeImpersonateClient (32)
DdeSetQualityOfService, DdeSetUserHandle.
Corrected heap handling in DdeInitializeW, refined CreateMutex error
handling.
General tidying.
diff --git a/if1632/ddeml.spec b/if1632/ddeml.spec
index 6a89e41..992c8b7 100644
--- a/if1632/ddeml.spec
+++ b/if1632/ddeml.spec
@@ -8,7 +8,7 @@
6 pascal DdeDisconnectList(word) DdeDisconnectList16
7 pascal DdeConnect(long long long ptr) DdeConnect16
8 pascal16 DdeDisconnect(long) DdeDisconnect16
-9 stub DdeQueryConvInfo #(word long ptr) DdeQueryConvInfo
+9 pascal16 DdeQueryConvInfo (word long ptr) DdeQueryConvInfo16
10 pascal DdeSetUserHandle(word long long) DdeSetUserHandle16
11 pascal DdeClientTransaction(ptr long long long s_word s_word long ptr)
DdeClientTransaction16
@@ -23,7 +23,7 @@
20 pascal16 DdeGetLastError(long) DdeGetLastError16
21 pascal DdeCreateStringHandle(long str s_word) DdeCreateStringHandle16
22 pascal16 DdeFreeStringHandle(long long) DdeFreeStringHandle16
-23 stub DdeQueryString #(long word ptr long word) DdeQueryString
+23 pascal DdeQueryString (long word ptr long word) DdeQueryString16
24 pascal16 DdeKeepStringHandle(long long) DdeKeepStringHandle16
26 pascal DdeEnableCallback(long word word) DdeEnableCallback16
diff --git a/include/ddeml.h b/include/ddeml.h
index a8f6f3f..0de1c6c 100644
--- a/include/ddeml.h
+++ b/include/ddeml.h
@@ -12,10 +12,23 @@
/* Codepage Constants
*/
+
#define CP_WINANSI 1004
#define CP_WINUNICODE 1200
+/* DDE synchronisation constants
+ */
+
#define MSGF_DDEMGR 0x8001
+
+#define QID_SYNC16 -1L
+#define QID_SYNC 0xFFFFFFFF
+
+/* Type variation for MS deliberate departures from ANSI standards
+ */
+
+#define EXPENTRY CALLBACK
+
/***************************************************
FLAGS Section - copied from Microsoft SDK as must be standard, probably Copyright Microsoft Corporation
@@ -40,6 +53,8 @@
#define CBF_SKIP_DISCONNECTS 0x00200000
#define CBF_SKIP_ALLNOTIFICATIONS 0x003c0000
+#define CBR_BLOCK 0xFFFFFFFFL
+
/*
* Application command flags
*/
@@ -87,6 +102,57 @@
/****************************************************
+ Message Types Section
+
+****************************************************/
+
+#define XTYPF_NOBLOCK 0x0002 /* CBR_NOBLOCK will not work */
+#define XTYPF_NODATA 0x0004 /* DDE_FDEFERUPD */
+#define XTYPF_ACKREQ 0x0008 /* DDE_FACKREQ */
+
+#define XCLASS_MASK 0xFC00
+#define XCLASS_BOOL 0x1000
+#define XCLASS_DATA 0x2000
+#define XCLASS_FLAGS 0x4000
+#define XCLASS_NOTIFICATION 0x8000
+
+#define XTYP_ADVDATA (0x0010 | XCLASS_FLAGS)
+#define XTYP_XACT_COMPLETE (0x0080 | XCLASS_NOTIFICATION )
+#define XTYP_REGISTER (0x00A0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )
+#define XTYP_REQUEST (0x00B0 | XCLASS_DATA )
+#define XTYP_DISCONNECT (0x00C0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )
+#define XTYP_UNREGISTER (0x00D0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )
+
+/**************************************************
+
+ End of Message Types Section
+
+****************************************************/
+
+/*****************************************************
+
+ DDE Codes for wStatus field
+
+*****************************************************/
+
+#define DDE_FACK 0x8000
+#define DDE_FBUSY 0x4000
+#define DDE_FDEFERUPD 0x4000
+#define DDE_FACKREQ 0x8000
+#define DDE_FRELEASE 0x2000
+#define DDE_FREQUESTED 0x1000
+#define DDE_FAPPSTATUS 0x00FF
+#define DDE_FNOTPROCESSED 0x0000
+
+
+/*****************************************************
+
+ End of wStatus codes
+
+*****************************************************/
+
+/****************************************************
+
Return Codes section again copied from SDK as must be same
*****************************************************/
@@ -130,6 +196,13 @@
typedef DWORD HDDEDATA;
typedef CHAR *LPTSTR;
+
+/*******************************************************
+
+ API Entry Points
+
+*******************************************************/
+
typedef HDDEDATA (CALLBACK *PFNCALLBACK16)(UINT16,UINT16,HCONV,HSZ,HSZ,
HDDEDATA,DWORD,DWORD);
typedef HDDEDATA (CALLBACK *PFNCALLBACK)(UINT,UINT,HCONV,HSZ,HSZ,
@@ -161,6 +234,43 @@
DWORD dwSecurity;
} CONVCONTEXT, *LPCONVCONTEXT;
+typedef struct
+{
+ DWORD cb;
+ DWORD hUser;
+ HCONV hConvPartner;
+ HSZ hszSvcPartner;
+ HSZ hszServiceReq;
+ HSZ hszTopic;
+ HSZ hszItem;
+ UINT16 wFmt;
+ UINT16 wType;
+ UINT16 wStatus;
+ UINT16 wConvst;
+ UINT16 wLastError;
+ HCONVLIST hConvList;
+ CONVCONTEXT16 ConvCtxt;
+} CONVINFO16, *LPCONVINFO16;
+
+typedef struct
+{
+ DWORD cb;
+ DWORD hUser;
+ HCONV hConvPartner;
+ HSZ hszSvcPartner;
+ HSZ hszServiceReq;
+ HSZ hszTopic;
+ HSZ hszItem;
+ UINT wFmt;
+ UINT wType;
+ UINT wStatus;
+ UINT wConvst;
+ UINT wLastError;
+ HCONVLIST hConvList;
+ CONVCONTEXT ConvCtxt;
+ HWND hwnd;
+ HWND hwndPartner;
+} CONVINFO, *LPCONVINFO;
// Internal data structures
/* entry for handle table */
@@ -169,7 +279,7 @@
BOOL16 Client_only; // bit wasteful of space but it will be faster
BOOL16 Unicode; /* Flag to indicate Win32 API used to initialise */
BOOL16 Win16; /* flag to indicate Win16 API used to initialize */
- LPDWORD Instance_id; // needed to track monitor usage
+ DWORD Instance_id; // needed to track monitor usage
struct DDE_HANDLE_ENTRY *Next_Entry;
PFNCALLBACK CallBack;
DWORD CBF_Flags;
diff --git a/include/winnt.h b/include/winnt.h
index 216e4a2..35e02c3 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -556,6 +556,18 @@
} SECURITY_IMPERSONATION_LEVEL;
+typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,
+ * PSECURITY_CONTEXT_TRACKING_MODE;
+//
+// Quality of Service
+//
+
+typedef struct _SECURITY_QUALITY_OF_SERVICE {
+ DWORD Length;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
+ BOOL EffectiveOnly;
+} SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
/*
* TOKEN_STATISTICS
diff --git a/misc/ddeml.c b/misc/ddeml.c
index 6ab81cc..8432b4b 100644
--- a/misc/ddeml.c
+++ b/misc/ddeml.c
@@ -17,6 +17,7 @@
#include "heap.h"
#include "shm_semaph.h"
#include "debug.h"
+#include "winnt.h"
/* Has defined in atom.c file.
*/
@@ -28,7 +29,7 @@
static DDE_HANDLE_ENTRY *DDE_Handle_Table_Base = NULL;
-static LPDWORD DDE_Max_Assigned_Instance = 0; // OK for present, may have to worry about wrap-around later
+static DWORD DDE_Max_Assigned_Instance = 0; // OK for present, may have to worry about wrap-around later
static const char inst_string[]= "DDEMaxInstance";
static LPCWSTR DDEInstanceAccess = (LPCWSTR)&inst_string;
static const char handle_string[] = "DDEHandleAccess";
@@ -42,7 +43,7 @@
/* typedef struct {
DWORD nLength;
LPVOID lpSecurityDescriptor;
- BOOL32 bInheritHandle;
+ BOOL bInheritHandle;
} SECURITY_ATTRIBUTES; */
#define TRUE 1
@@ -206,6 +207,7 @@
* Vn Date Author Comment
*
* 1.0 Jan 1999 Keith Matthews Initial version
+ * 1.1 Mar 1999 Keith Matthews Corrected Heap handling.
*
*/
DWORD Release_reserved_mutex (HANDLE mutex, LPTSTR mutex_name, BOOL release_handle_m, BOOL release_this_i )
@@ -214,7 +216,7 @@
if ( (err_no=GetLastError()) != 0 )
{
ERR(ddeml,"ReleaseMutex failed - %s mutex %li\n",mutex_name,err_no);
- HeapFree(GetProcessHeap(), 0, this_instance);
+ HeapFree(SystemHeap, 0, this_instance);
if ( release_handle_m )
{
ReleaseMutex(handle_mutex);
@@ -223,7 +225,7 @@
}
if ( release_this_i )
{
- HeapFree(GetProcessHeap(), 0, this_instance);
+ HeapFree(SystemHeap, 0, this_instance);
}
return DMLERR_NO_ERROR;
}
@@ -257,7 +259,7 @@
WaitForSingleObject(inst_count_mutex,1000); // subsequent calls
/* FIXME - needs refinement with popup for timeout, also is timeout interval OK */
}
- if ( (err_no=GetLastError()) == ERROR_INVALID_HANDLE )
+ if ( (err_no=GetLastError()) != 0 )
{
ERR(ddeml,"CreateMutex failed - inst_count %li\n",err_no);
err_no=Release_reserved_mutex (handle_mutex,"handle_mutex",0,1);
@@ -275,23 +277,25 @@
UINT16 WINAPI DdeInitialize16( LPDWORD pidInst, PFNCALLBACK16 pfnCallback,
DWORD afCmd, DWORD ulRes)
{
+ TRACE(ddeml,"DdeInitialize16 called - calling DdeInitializeA\n");
return (UINT16)DdeInitializeA(pidInst,(PFNCALLBACK)pfnCallback,
afCmd, ulRes);
}
/******************************************************************************
- * DdeInitialize32A (USER32.106)
+ * DdeInitializeA (USER32.106)
*/
UINT WINAPI DdeInitializeA( LPDWORD pidInst, PFNCALLBACK pfnCallback,
DWORD afCmd, DWORD ulRes )
{
+ TRACE(ddeml,"DdeInitializeA called - calling DdeInitializeW\n");
return DdeInitializeW(pidInst,pfnCallback,afCmd,ulRes);
}
/******************************************************************************
- * DdeInitialize32W [USER32.107]
+ * DdeInitializeW [USER32.107]
* Registers an application with the DDEML
*
* PARAMS
@@ -312,6 +316,7 @@
*
* 1.0 Pre 1998 Alexandre/Len Initial Stub
* 1.1 Jan 1999 Keith Matthews Initial (near-)complete version
+ * 1.2 Mar 1999 Keith Matthews Corrected Heap handling, CreateMutex failure handling
*
*/
UINT WINAPI DdeInitializeW( LPDWORD pidInst, PFNCALLBACK pfnCallback,
@@ -333,6 +338,9 @@
}
if (!pfnCallback )
{
+ /* this one may be wrong - MS dll seems to accept the condition, leave this until we find out more !! */
+
+
/* can't set up the instance with nothing to act as a callback */
TRACE(ddeml,"No callback provided\n");
return DMLERR_INVALIDPARAMETER; /* might be DMLERR_DLL_USAGE */
@@ -353,7 +361,7 @@
// messy bit, spec implies that 'Client Only' can be set in 2 different ways, catch 1 here
this_instance->Client_only=afCmd&APPCMD_CLIENTONLY;
- this_instance->Instance_id = pidInst; // May need to add calling proc Id
+ this_instance->Instance_id = *pidInst; // May need to add calling proc Id
this_instance->CallBack=*pfnCallback;
this_instance->Txn_count=0;
this_instance->Unicode = TRUE;
@@ -383,10 +391,10 @@
s_att->lpSecurityDescriptor = NULL;
s_att->nLength = sizeof(s_att);
handle_mutex = CreateMutexW(s_att,1,DDEHandleAccess);
- if ( (err_no=GetLastError()) == ERROR_INVALID_HANDLE )
+ if ( (err_no=GetLastError()) != 0 )
{
ERR(ddeml,"CreateMutex failed - handle list %li\n",err_no);
- HeapFree(GetProcessHeap(), 0, this_instance);
+ HeapFree(SystemHeap, 0, this_instance);
return DMLERR_SYS_ERROR;
}
TRACE(ddeml,"Handle Mutex created/reserved\n");
@@ -472,7 +480,7 @@
/* FIXME - needs refinement with popup for timeout, also is timeout interval OK */
ERR(ddeml,"WaitForSingleObject failed - handle list %li\n",err_no);
- HeapFree(GetProcessHeap(), 0, this_instance);
+ HeapFree(SystemHeap, 0, this_instance);
return DMLERR_SYS_ERROR;
}
if (DDE_Handle_Table_Base == NULL )
@@ -480,13 +488,13 @@
if ( Release_reserved_mutex(handle_mutex,"handle_mutex",0,1)) return DMLERR_SYS_ERROR;
return DMLERR_DLL_USAGE;
}
- HeapFree(GetProcessHeap(), 0, this_instance); // finished - release heap space used as work store
+ HeapFree(SystemHeap, 0, this_instance); // finished - release heap space used as work store
// can't reinitialise if we have initialised nothing !!
reference_inst = DDE_Handle_Table_Base;
/* must first check if we have been given a valid instance to re-initialise !! how do we do that ? */
while ( reference_inst->Next_Entry != NULL )
{
- if ( pidInst == reference_inst->Instance_id && pfnCallback == reference_inst->CallBack )
+ if ( *pidInst == reference_inst->Instance_id && pfnCallback == reference_inst->CallBack )
{
// Check 1 - cannot change client-only mode if set via APPCMD_CLIENTONLY
@@ -546,7 +554,7 @@
/*****************************************************************
- * DdeUninitialize32 [USER32.119] Frees DDEML resources
+ * DdeUninitialize [USER32.119] Frees DDEML resources
*
* PARAMS
* idInst [I] Instance identifier
@@ -581,7 +589,7 @@
/******************************************************************************
- * DdeConnectList32 [USER32.93] Establishes conversation with DDE servers
+ * DdeConnectList [USER32.93] Establishes conversation with DDE servers
*
* PARAMS
* idInst [I] Instance identifier
@@ -613,7 +621,7 @@
/*****************************************************************
- * DdeQueryNextServer32 [USER32.112]
+ * DdeQueryNextServer [USER32.112]
*/
HCONV WINAPI DdeQueryNextServer( HCONVLIST hConvList, HCONV hConvPrev )
{
@@ -622,7 +630,16 @@
}
/*****************************************************************
- * DdeQueryString32A [USER32.113]
+ * DdeQueryStringA [USER32.113]
+ *
+ *****************************************************************
+ *
+ * Change History
+ *
+ * Vn Date Author Comment
+ *
+ * 1.0 Dec 1998 Corel/Macadamian Initial version
+ *
*/
DWORD WINAPI DdeQueryStringA(DWORD idInst, HSZ hsz, LPSTR psz, DWORD cchMax, INT iCodePage)
{
@@ -655,7 +672,16 @@
}
/*****************************************************************
- * DdeQueryString32W [USER32.114]
+ * DdeQueryStringW [USER32.114]
+ *
+ *****************************************************************
+ *
+ * Change History
+ *
+ * Vn Date Author Comment
+ *
+ * 1.0 Dec 1998 Corel/Macadamian Initial version
+ *
*/
DWORD WINAPI DdeQueryStringW(DWORD idInst, HSZ hsz, LPWSTR psz, DWORD cchMax, INT iCodePage)
{
@@ -690,6 +716,30 @@
return ret;
}
+/*****************************************************************
+*
+* DdeQueryString16 (DDEML.23)
+*
+******************************************************************
+ *
+ * Change History
+ *
+ * Vn Date Author Comment
+ *
+ * 1.0 March 1999 K Matthews stub only
+ */
+
+DWORD DdeQueryString16(DWORD idInst, HSZ hsz, LPSTR lpsz, DWORD cchMax, int codepage)
+{
+ FIXME(ddeml,"(%ld, 0x%lx, %p, %ld, %d): stub \n",
+ idInst,
+ hsz,
+ lpsz,
+ cchMax,
+ codepage);
+ return 0;
+}
+
/*****************************************************************
* DdeDisconnectList (DDEML.6)
@@ -701,7 +751,7 @@
/******************************************************************************
- * DdeDisconnectList32 [USER32.98] Destroys list and terminates conversations
+ * DdeDisconnectList [USER32.98] Destroys list and terminates conversations
*
* RETURNS
* Success: TRUE
@@ -727,7 +777,7 @@
/*****************************************************************
- * DdeConnect32 (USER32.92)
+ * DdeConnect (USER32.92)
*/
HCONV WINAPI DdeConnect( DWORD idInst, HSZ hszService, HSZ hszTopic,
LPCONVCONTEXT pCC )
@@ -747,7 +797,7 @@
}
/*****************************************************************
- * DdeSetUserHandle (DDEML.10)
+ * DdeSetUserHandle16 (DDEML.10)
*/
BOOL16 WINAPI DdeSetUserHandle16( HCONV hConv, DWORD id, DWORD hUser )
{
@@ -772,7 +822,7 @@
}
/*****************************************************************
- * DdeCreateDataHandle32 (USER32.94)
+ * DdeCreateDataHandle (USER32.94)
*/
HDDEDATA WINAPI DdeCreateDataHandle( DWORD idInst, LPBYTE pSrc, DWORD cb,
DWORD cbOff, HSZ hszItem, UINT wFmt,
@@ -792,7 +842,7 @@
}
/*****************************************************************
- * DdeDisconnect32 (USER32.97)
+ * DdeDisconnect (USER32.97)
*/
BOOL WINAPI DdeDisconnect( HCONV hConv )
{
@@ -821,7 +871,7 @@
/*****************************************************************
- * DdeCreateStringHandle32A [USER32.95]
+ * DdeCreateStringHandleA [USER32.95]
*
* RETURNS
* Success: String handle
@@ -846,7 +896,7 @@
/******************************************************************************
- * DdeCreateStringHandle32W [USER32.96] Creates handle to identify string
+ * DdeCreateStringHandleW [USER32.96] Creates handle to identify string
*
* RETURNS
* Success: String handle
@@ -884,7 +934,7 @@
/*****************************************************************
- * DdeFreeStringHandle32 (USER32.101)
+ * DdeFreeStringHandle (USER32.101)
* RETURNS: success: nonzero
* fail: zero
*/
@@ -910,7 +960,7 @@
/*****************************************************************
- * DdeFreeDataHandle32 (USER32.100)
+ * DdeFreeDataHandle (USER32.100)
*/
BOOL WINAPI DdeFreeDataHandle( HDDEDATA hData )
{
@@ -931,7 +981,7 @@
/*****************************************************************
- * DdeKeepStringHandle32 (USER32.108)
+ * DdeKeepStringHandle (USER32.108)
*/
BOOL WINAPI DdeKeepStringHandle( DWORD idInst, HSZ hsz )
{
@@ -954,7 +1004,7 @@
/*****************************************************************
- * DdeClientTransaction32 (USER32.90)
+ * DdeClientTransaction (USER32.90)
*/
HDDEDATA WINAPI DdeClientTransaction( LPBYTE pData, DWORD cbData,
HCONV hConv, HSZ hszItem, UINT wFmt,
@@ -966,17 +1016,38 @@
}
/*****************************************************************
- * DdeAbandonTransaction (DDEML.12)
+ *
+ * DdeAbandonTransaction16 (DDEML.12)
+ *
*/
BOOL16 WINAPI DdeAbandonTransaction16( DWORD idInst, HCONV hConv,
DWORD idTransaction )
{
FIXME( ddeml, "empty stub\n" );
- return 0;
+ return TRUE;
}
/*****************************************************************
+ *
+ * DdeAbandonTransaction (USER32.87)
+ *
+******************************************************************
+ *
+ * Change History
+ *
+ * Vn Date Author Comment
+ *
+ * 1.0 March 1999 K Matthews stub only
+ */
+BOOL WINAPI DdeAbandonTransaction( DWORD idInst, HCONV hConv,
+ DWORD idTransaction )
+{
+ FIXME( ddeml, "empty stub\n" );
+ return TRUE;
+}
+
+/*****************************************************************
* DdePostAdvise16 [DDEML.13]
*/
BOOL16 WINAPI DdePostAdvise16( DWORD idInst, HSZ hszTopic, HSZ hszItem )
@@ -986,7 +1057,7 @@
/******************************************************************************
- * DdePostAdvise32 [USER32.110] Send transaction to DDE callback function.
+ * DdePostAdvise [USER32.110] Send transaction to DDE callback function.
*
* RETURNS
* Success: TRUE
@@ -1003,7 +1074,7 @@
/*****************************************************************
- * DdeAddData (DDEML.15)
+ * DdeAddData16 (DDEML.15)
*/
HDDEDATA WINAPI DdeAddData16( HDDEDATA hData, LPBYTE pSrc, DWORD cb,
DWORD cbOff )
@@ -1012,9 +1083,87 @@
return 0;
}
+/*****************************************************************
+ *
+ * DdeAddData (USER32.89)
+ *
+******************************************************************
+ *
+ * Change History
+ *
+ * Vn Date Author Comment
+ *
+ * 1.0 March 1999 K Matthews stub only
+ */
+HDDEDATA WINAPI DdeAddData( HDDEDATA hData, LPBYTE pSrc, DWORD cb,
+ DWORD cbOff )
+{
+ FIXME( ddeml, "empty stub\n" );
+ return 0;
+}
+
+
+/*****************************************************************
+ *
+ * DdeImpersonateClient (USER32.105)
+ *
+******************************************************************
+ *
+ * Change History
+ *
+ * Vn Date Author Comment
+ *
+ * 1.0 March 1999 K Matthews stub only
+ */
+
+BOOL WINAPI DdeImpersonateClient( HCONV hConv)
+{
+ FIXME( ddeml, "empty stub\n" );
+ return TRUE;
+}
+
+
+/*****************************************************************
+ *
+ * DdeSetQualityOfService (USER32.116)
+ *
+******************************************************************
+ *
+ * Change History
+ *
+ * Vn Date Author Comment
+ *
+ * 1.0 March 1999 K Matthews stub only
+ */
+
+BOOL WINAPI DdeSetQualityOfService( HWND hwndClient, CONST SECURITY_QUALITY_OF_SERVICE *pqosNew,
+ PSECURITY_QUALITY_OF_SERVICE pqosPrev)
+{
+ FIXME( ddeml, "empty stub\n" );
+ return TRUE;
+}
+
+/*****************************************************************
+ *
+ * DdeSetUserHandle (USER32.117)
+ *
+******************************************************************
+ *
+ * Change History
+ *
+ * Vn Date Author Comment
+ *
+ * 1.0 March 1999 K Matthews stub only
+ */
+
+BOOL WINAPI DdeSetUserHandle( HCONV hConv, DWORD id, DWORD hUser)
+{
+ FIXME( ddeml, "empty stub\n" );
+ return TRUE;
+}
/******************************************************************************
- * DdeGetData32 [USER32.102] Copies data from DDE object ot local buffer
+ * DdeGetData [USER32.102] Copies data from DDE object ot local buffer
*
* RETURNS
* Size of memory object associated with handle
@@ -1052,7 +1201,7 @@
}
/*****************************************************************
- * DdeAccessData32 (USER32.88)
+ * DdeAccessData (USER32.88)
*/
LPBYTE WINAPI DdeAccessData( HDDEDATA hData, LPDWORD pcbDataSize )
{
@@ -1069,7 +1218,7 @@
}
/*****************************************************************
- * DdeUnaccessData32 (USER32.118)
+ * DdeUnaccessData (USER32.118)
*/
BOOL WINAPI DdeUnaccessData( HDDEDATA hData )
{
@@ -1087,7 +1236,7 @@
}
/*****************************************************************
- * DdeEnableCallback32 (USER32.99)
+ * DdeEnableCallback (USER32.99)
*/
BOOL WINAPI DdeEnableCallback( DWORD idInst, HCONV hConv, UINT wCmd )
{
@@ -1107,7 +1256,7 @@
/******************************************************************************
- * DdeNameService32 [USER32.109] {Un}registers service name of DDE server
+ * DdeNameService [USER32.109] {Un}registers service name of DDE server
*
* PARAMS
* idInst [I] Instance identifier
@@ -1137,7 +1286,7 @@
/******************************************************************************
- * DdeGetLastError32 [USER32.103] Gets most recent error code
+ * DdeGetLastError [USER32.103] Gets most recent error code
*
* PARAMS
* idInst [I] Instance identifier
@@ -1161,7 +1310,7 @@
}
/*****************************************************************
- * DdeCmpStringHandles32 (USER32.91)
+ * DdeCmpStringHandles (USER32.91)
*
* Compares the value of two string handles. This comparison is
* not case sensitive.
@@ -1277,3 +1426,24 @@
FIXME(ddeml, "stub.\n");
return 0;
}
+
+/******************************************************************
+ * DdeQueryConvInfo16 (DDEML.9)
+ *
+ */
+UINT16 WINAPI DdeQueryConvInfo16( HCONV hconv, DWORD idTransaction , LPCONVINFO16 lpConvInfo)
+{
+ FIXME(ddeml,"stub.\n");
+ return 0;
+}
+
+
+/******************************************************************
+ * DdeQueryConvInfo (USER32.111)
+ *
+ */
+UINT WINAPI DdeQueryConvInfo( HCONV hconv, DWORD idTransaction , LPCONVINFO lpConvInfo)
+{
+ FIXME(ddeml,"stub.\n");
+ return 0;
+}
diff --git a/relay32/user32.spec b/relay32/user32.spec
index 559720c..d33151f 100644
--- a/relay32/user32.spec
+++ b/relay32/user32.spec
@@ -88,9 +88,9 @@
84 stdcall CreateWindowExW(long wstr wstr long long long long long long long long ptr) CreateWindowExW
85 stub CreateWindowStationA
86 stdcall CreateWindowStationW(wstr long long ptr) CreateWindowStationW
- 87 stub DdeAbandonTransaction
+ 87 stdcall DdeAbandonTransaction(long long long)DdeAbandonTransaction
88 stdcall DdeAccessData(long ptr) DdeAccessData
- 89 stub DdeAddData
+ 89 stdcall DdeAddData(long ptr long long) DdeAddData
90 stdcall DdeClientTransaction(ptr long long long long long long ptr) DdeClientTransaction
91 stdcall DdeCmpStringHandles(long long) DdeCmpStringHandles
92 stdcall DdeConnect(long long long ptr) DdeConnect
@@ -106,19 +106,19 @@
102 stdcall DdeGetData(long ptr long long) DdeGetData
103 stdcall DdeGetLastError(long) DdeGetLastError
104 stub DdeGetQualityOfService
-105 stub DdeImpersonateClient
+105 stdcall DdeImpersonateClient(long) DdeImpersonateClient
106 stdcall DdeInitializeA(ptr ptr long long) DdeInitializeA
107 stdcall DdeInitializeW(ptr ptr long long) DdeInitializeW
108 stdcall DdeKeepStringHandle(long long) DdeKeepStringHandle
109 stdcall DdeNameService(long long long long) DdeNameService
110 stdcall DdePostAdvise(long long long) DdePostAdvise
-111 stub DdeQueryConvInfo
+111 stdcall DdeQueryConvInfo(long long ptr) DdeQueryConvInfo
112 stdcall DdeQueryNextServer(long long) DdeQueryNextServer
113 stdcall DdeQueryStringA(long long ptr long long) DdeQueryStringA
114 stdcall DdeQueryStringW(long long ptr long long) DdeQueryStringW
115 stdcall DdeReconnect(long) DdeReconnect
-116 stub DdeSetQualityOfService
-117 stub DdeSetUserHandle
+116 stdcall DdeSetQualityOfService(long ptr ptr) DdeSetQualityOfService
+117 stdcall DdeSetUserHandle (long long long) DdeSetUserHandle
118 stdcall DdeUnaccessData(long) DdeUnaccessData
119 stdcall DdeUninitialize(long) DdeUninitialize
120 stdcall DefDlgProcA(long long long long) DefDlgProcA