https://git.reactos.org/?p=reactos.git;a=commitdiff;h=17617221ce3b488d1c8ec…
commit 17617221ce3b488d1c8ec2f24cfd5fc0eabcf627
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Mon Dec 11 22:37:25 2023 +0900
Commit: GitHub <noreply(a)github.com>
CommitDate: Mon Dec 11 22:37:25 2023 +0900
[MSCTFIME][SDK][USER32] Add msctfime.ime (stub) (#6141)
## Overview
1. msctfime.ime is an IME file interface
for new-style IMEs a.k.a. "Text Input
Processors" (TIPs).
2. msctfime.ime is loaded as old-style
IME file at ImmLoadLayout in specific
condition.
3. msctfime.ime communicates with
the current TIP (This feature is not
implemented yet).
## Proposed changes
- Add msctfime module at dll/ime/msctfime.
- The functions in this module are currently
stub.
- Move IME file interface declarations from
<imm.h> to <ddk/immdev.h>.
- Modify ImmNotifyIME, NotifyIME, and
ImeProcessKey prototypes for x64
compliance.
CORE-19360
---
dll/CMakeLists.txt | 1 +
dll/ime/CMakeLists.txt | 2 +
dll/ime/msctfime/CMakeLists.txt | 21 ++
dll/ime/msctfime/lang/en-US.rc | 23 +++
dll/ime/msctfime/msctfime.c | 350 +++++++++++++++++++++++++++++++++
dll/ime/msctfime/msctfime.h | 24 +++
dll/ime/msctfime/msctfime.rc | 32 +++
dll/ime/msctfime/msctfime.spec | 30 +++
dll/ime/msctfime/res/down.ico | Bin 0 -> 3438 bytes
dll/ime/msctfime/res/unicode.ico | Bin 0 -> 326 bytes
dll/ime/msctfime/resource.h | 16 ++
dll/win32/imm32/ime.c | 2 +-
dll/win32/imm32/imm32.spec | 4 +-
sdk/include/ddk/immdev.h | 109 ++++++++++
sdk/include/psdk/imm.h | 19 +-
sdk/include/reactos/imetable.h | 4 +-
win32ss/user/user32/include/immtable.h | 2 +-
17 files changed, 615 insertions(+), 24 deletions(-)
diff --git a/dll/CMakeLists.txt b/dll/CMakeLists.txt
index 08458544df7..7fd670b6b6d 100644
--- a/dll/CMakeLists.txt
+++ b/dll/CMakeLists.txt
@@ -4,6 +4,7 @@ add_subdirectory(apisets)
add_subdirectory(appcompat)
add_subdirectory(cpl)
add_subdirectory(directx)
+add_subdirectory(ime)
add_subdirectory(keyboard)
add_subdirectory(nls)
add_subdirectory(np)
diff --git a/dll/ime/CMakeLists.txt b/dll/ime/CMakeLists.txt
new file mode 100644
index 00000000000..1c5abaad63a
--- /dev/null
+++ b/dll/ime/CMakeLists.txt
@@ -0,0 +1,2 @@
+
+add_subdirectory(msctfime)
diff --git a/dll/ime/msctfime/CMakeLists.txt b/dll/ime/msctfime/CMakeLists.txt
new file mode 100644
index 00000000000..3925158f4a3
--- /dev/null
+++ b/dll/ime/msctfime/CMakeLists.txt
@@ -0,0 +1,21 @@
+
+include_directories(
+ ${REACTOS_SOURCE_DIR}/win32ss/include)
+
+spec2def(msctfime.ime msctfime.spec)
+
+list(APPEND SOURCE
+ msctfime.c)
+
+file(GLOB msctfime_rc_deps res/*.*)
+add_rc_deps(msctfime.rc ${msctfime_rc_deps})
+
+add_library(msctfime MODULE
+ ${SOURCE}
+ msctfime.rc
+ ${CMAKE_CURRENT_BINARY_DIR}/msctfime.def)
+set_module_type(msctfime win32dll UNICODE)
+set_target_properties(msctfime PROPERTIES SUFFIX ".ime")
+target_link_libraries(msctfime wine uuid)
+add_importlibs(msctfime user32 gdi32 advapi32 comctl32 msvcrt kernel32 ntdll)
+add_cd_file(TARGET msctfime DESTINATION reactos/system32 FOR all)
diff --git a/dll/ime/msctfime/lang/en-US.rc b/dll/ime/msctfime/lang/en-US.rc
new file mode 100644
index 00000000000..584b75546ee
--- /dev/null
+++ b/dll/ime/msctfime/lang/en-US.rc
@@ -0,0 +1,23 @@
+/*
+ * PROJECT: ReactOS msctfime.ime
+ * LICENSE: LGPL-2.1-or-later (
https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE: English (United States) resource file
+ * TRANSLATOR: Copyright 2023 Katayama Hirofumi MZ
<katayama.hirofumi.mz(a)gmail.com>
+ */
+
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+STRINGTABLE
+BEGIN
+ IDS_OK "OK"
+ IDS_CANCEL "Cancel"
+ IDS_ABORT "&Abort"
+ IDS_RETRY "&Retry"
+ IDS_IGNORE "&Ignore"
+ IDS_YES "&Yes"
+ IDS_NO "&No"
+
+ IDS_ENTER "Enter"
+ IDS_FINALIZE_STRING "Finalize the string"
+ IDS_CONVERSION "Conversion"
+END
diff --git a/dll/ime/msctfime/msctfime.c b/dll/ime/msctfime/msctfime.c
new file mode 100644
index 00000000000..93865f49255
--- /dev/null
+++ b/dll/ime/msctfime/msctfime.c
@@ -0,0 +1,350 @@
+/*
+ * PROJECT: ReactOS msctfime.ime
+ * LICENSE: LGPL-2.1-or-later (
https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE: Supporting IME interface of Text Input Processors (TIPs)
+ * COPYRIGHT: Copyright 2023 Katayama Hirofumi MZ
<katayama.hirofumi.mz(a)gmail.com>
+ */
+
+#include "msctfime.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(msctfime);
+
+HINSTANCE g_hInst = NULL; /* The instance of this module */
+
+BOOL WINAPI
+ImeInquire(
+ _Out_ LPIMEINFO lpIMEInfo,
+ _Out_ LPWSTR lpszWndClass,
+ _In_ DWORD dwSystemInfoFlags)
+{
+ FIXME("stub:(%p, %p, 0x%lX)\n", lpIMEInfo, lpszWndClass,
dwSystemInfoFlags);
+ return FALSE;
+}
+
+DWORD WINAPI
+ImeConversionList(
+ _In_ HIMC hIMC,
+ _In_ LPCWSTR lpSrc,
+ _Out_ LPCANDIDATELIST lpDst,
+ _In_ DWORD dwBufLen,
+ _In_ UINT uFlag)
+{
+ FIXME("stub:(%p, %s, %p, 0x%lX, %u)\n", hIMC, debugstr_w(lpSrc), lpDst,
dwBufLen, uFlag);
+ return 0;
+}
+
+BOOL WINAPI
+ImeRegisterWord(
+ _In_ LPCWSTR lpszReading,
+ _In_ DWORD dwStyle,
+ _In_ LPCWSTR lpszString)
+{
+ FIXME("stub:(%s, 0x%lX, %s)\n", debugstr_w(lpszReading), dwStyle,
debugstr_w(lpszString));
+ return FALSE;
+}
+
+BOOL WINAPI
+ImeUnregisterWord(
+ _In_ LPCWSTR lpszReading,
+ _In_ DWORD dwStyle,
+ _In_ LPCWSTR lpszString)
+{
+ FIXME("stub:(%s, 0x%lX, %s)\n", debugstr_w(lpszReading), dwStyle,
debugstr_w(lpszString));
+ return FALSE;
+}
+
+UINT WINAPI
+ImeGetRegisterWordStyle(
+ _In_ UINT nItem,
+ _Out_ LPSTYLEBUFW lpStyleBuf)
+{
+ FIXME("stub:(%u, %p)\n", nItem, lpStyleBuf);
+ return 0;
+}
+
+UINT WINAPI
+ImeEnumRegisterWord(
+ _In_ REGISTERWORDENUMPROCW lpfnEnumProc,
+ _In_opt_ LPCWSTR lpszReading,
+ _In_ DWORD dwStyle,
+ _In_opt_ LPCWSTR lpszString,
+ _In_opt_ LPVOID lpData)
+{
+ FIXME("stub:(%p, %s, %lu, %s, %p)\n", lpfnEnumProc,
debugstr_w(lpszReading),
+ dwStyle, debugstr_w(lpszString), lpData);
+ return 0;
+}
+
+BOOL WINAPI
+ImeConfigure(
+ _In_ HKL hKL,
+ _In_ HWND hWnd,
+ _In_ DWORD dwMode,
+ _Inout_opt_ LPVOID lpData)
+{
+ FIXME("stub:(%p, %p, %lu, %p)\n", hKL, hWnd, dwMode, lpData);
+ return FALSE;
+}
+
+BOOL WINAPI
+ImeDestroy(
+ _In_ UINT uReserved)
+{
+ FIXME("stub:(%u)\n", uReserved);
+ return FALSE;
+}
+
+LRESULT WINAPI
+ImeEscape(
+ _In_ HIMC hIMC,
+ _In_ UINT uEscape,
+ _Inout_opt_ LPVOID lpData)
+{
+ FIXME("stub:(%p, %u, %p)\n", hIMC, uEscape, lpData);
+ return 0;
+}
+
+BOOL WINAPI
+ImeProcessKey(
+ _In_ HIMC hIMC,
+ _In_ UINT uVirKey,
+ _In_ LPARAM lParam,
+ _In_ CONST LPBYTE lpbKeyState)
+{
+ FIXME("stub:(%p, %u, %p, lpbKeyState)\n", hIMC, uVirKey, lParam,
lpbKeyState);
+ return FALSE;
+}
+
+BOOL WINAPI
+ImeSelect(
+ _In_ HIMC hIMC,
+ _In_ BOOL fSelect)
+{
+ FIXME("stub:(%p, %u)\n", hIMC, fSelect);
+ return FALSE;
+}
+
+BOOL WINAPI
+ImeSetActiveContext(
+ _In_ HIMC hIMC,
+ _In_ BOOL fFlag)
+{
+ FIXME("stub:(%p, %u)\n", hIMC, fFlag);
+ return FALSE;
+}
+
+UINT WINAPI
+ImeToAsciiEx(
+ _In_ UINT uVirKey,
+ _In_ UINT uScanCode,
+ _In_ CONST LPBYTE lpbKeyState,
+ _Out_ LPTRANSMSGLIST lpTransMsgList,
+ _In_ UINT fuState,
+ _In_ HIMC hIMC)
+{
+ FIXME("stub:(%u, %u, %p, %p, %u, %p)\n", uVirKey, uScanCode, lpbKeyState,
lpTransMsgList,
+ fuState, hIMC);
+ return 0;
+}
+
+BOOL WINAPI
+NotifyIME(
+ _In_ HIMC hIMC,
+ _In_ DWORD dwAction,
+ _In_ DWORD dwIndex,
+ _In_ DWORD_PTR dwValue)
+{
+ FIXME("stub:(%p, 0x%lX, 0x%lX, %p)\n", hIMC, dwAction, dwIndex, dwValue);
+ return FALSE;
+}
+
+BOOL WINAPI
+ImeSetCompositionString(
+ _In_ HIMC hIMC,
+ _In_ DWORD dwIndex,
+ _In_opt_ LPCVOID lpComp,
+ _In_ DWORD dwCompLen,
+ _In_opt_ LPCVOID lpRead,
+ _In_ DWORD dwReadLen)
+{
+ FIXME("stub:(%p, 0x%lX, %p, 0x%lX, %p, 0x%lX)\n", hIMC, dwIndex, lpComp,
dwCompLen,
+ lpRead, dwReadLen);
+ return FALSE;
+}
+
+DWORD WINAPI
+ImeGetImeMenuItems(
+ _In_ HIMC hIMC,
+ _In_ DWORD dwFlags,
+ _In_ DWORD dwType,
+ _Inout_opt_ LPIMEMENUITEMINFOW lpImeParentMenu,
+ _Inout_opt_ LPIMEMENUITEMINFOW lpImeMenu,
+ _In_ DWORD dwSize)
+{
+ FIXME("stub:(%p, 0x%lX, 0x%lX, %p, %p, 0x%lX)\n", hIMC, dwFlags, dwType,
lpImeParentMenu,
+ lpImeMenu, dwSize);
+ return 0;
+}
+
+BOOL WINAPI
+CtfImeInquireExW(
+ _Out_ LPIMEINFO lpIMEInfo,
+ _Out_ LPWSTR lpszWndClass,
+ _In_ DWORD dwSystemInfoFlags,
+ _In_ HKL hKL)
+{
+ FIXME("stub:(%p, %p, 0x%lX, %p)\n", lpIMEInfo, lpszWndClass,
dwSystemInfoFlags, hKL);
+ return FALSE;
+}
+
+BOOL WINAPI
+CtfImeSelectEx(
+ _In_ HIMC hIMC,
+ _In_ BOOL fSelect,
+ _In_ HKL hKL)
+{
+ FIXME("stub:(%p, %d, %p)\n", hIMC, fSelect, hKL);
+ return FALSE;
+}
+
+LRESULT WINAPI
+CtfImeEscapeEx(
+ _In_ HIMC hIMC,
+ _In_ UINT uSubFunc,
+ _Inout_opt_ LPVOID lpData,
+ _In_ HKL hKL)
+{
+ FIXME("stub:(%p, %u, %p, %p)\n", hIMC, uSubFunc, lpData, hKL);
+ return 0;
+}
+
+HRESULT WINAPI
+CtfImeGetGuidAtom(
+ _In_ HIMC hIMC,
+ _In_ DWORD dwUnknown,
+ _Out_opt_ LPDWORD pdwGuidAtom)
+{
+ FIXME("stub:(%p, 0x%lX, %p)\n", hIMC, dwUnknown, pdwGuidAtom);
+ return E_FAIL;
+}
+
+BOOL WINAPI
+CtfImeIsGuidMapEnable(
+ _In_ HIMC hIMC)
+{
+ FIXME("stub:(%p)\n", hIMC);
+ return FALSE;
+}
+
+HRESULT WINAPI
+CtfImeCreateThreadMgr(VOID)
+{
+ FIXME("stub:()\n");
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI
+CtfImeDestroyThreadMgr(VOID)
+{
+ FIXME("stub:()\n");
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI
+CtfImeCreateInputContext(
+ _In_ HIMC hIMC)
+{
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI
+CtfImeDestroyInputContext(
+ _In_ HIMC hIMC)
+{
+ FIXME("stub:(%p)\n", hIMC);
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI
+CtfImeSetActiveContextAlways(
+ _In_ HIMC hIMC,
+ _In_ BOOL fActive,
+ _In_ HWND hWnd,
+ _In_ HKL hKL)
+{
+ FIXME("stub:(%p, %d, %p, %p)\n", hIMC, fActive, hWnd, hKL);
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI
+CtfImeProcessCicHotkey(
+ _In_ HIMC hIMC,
+ _In_ UINT vKey,
+ _In_ LPARAM lParam)
+{
+ FIXME("stub:(%p, %u, %p)\n", hIMC, vKey, lParam);
+ return E_NOTIMPL;
+}
+
+LRESULT WINAPI
+CtfImeDispatchDefImeMessage(
+ _In_ HWND hWnd,
+ _In_ UINT uMsg,
+ _In_ WPARAM wParam,
+ _In_ LPARAM lParam)
+{
+ FIXME("stub:(%p, %u, %p, %p)\n", hWnd, uMsg, wParam, lParam);
+ return 0;
+}
+
+BOOL WINAPI
+CtfImeIsIME(
+ _In_ HKL hKL)
+{
+ FIXME("stub:(%p)\n", hKL);
+ return FALSE;
+}
+
+HRESULT WINAPI
+CtfImeThreadDetach(VOID)
+{
+ ImeDestroy(0);
+ return S_OK;
+}
+
+LRESULT CALLBACK
+UIWndProc(
+ _In_ HWND hWnd,
+ _In_ UINT uMsg,
+ _In_ WPARAM wParam,
+ _In_ LPARAM lParam)
+{
+ if (uMsg == WM_CREATE)
+ {
+ FIXME("stub\n");
+ return -1;
+ }
+ return 0;
+}
+
+BOOL WINAPI
+DllMain(
+ _In_ HINSTANCE hinstDLL,
+ _In_ DWORD dwReason,
+ _Inout_opt_ LPVOID lpvReserved)
+{
+ switch (dwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ {
+ TRACE("(%p, %lu, %p)\n", hinstDLL, dwReason, lpvReserved);
+ g_hInst = hinstDLL;
+ break;
+ }
+ case DLL_PROCESS_DETACH:
+ {
+ break;
+ }
+ }
+ return TRUE;
+}
diff --git a/dll/ime/msctfime/msctfime.h b/dll/ime/msctfime/msctfime.h
new file mode 100644
index 00000000000..bdabd0f2e31
--- /dev/null
+++ b/dll/ime/msctfime/msctfime.h
@@ -0,0 +1,24 @@
+/*
+ * PROJECT: ReactOS msctfime.ime
+ * LICENSE: LGPL-2.1-or-later (
https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE: Supporting IME interface of Text Input Processors (TIPs)
+ * COPYRIGHT: Copyright 2023 Katayama Hirofumi MZ
<katayama.hirofumi.mz(a)gmail.com>
+ */
+
+#pragma once
+
+#include <stdlib.h>
+
+#define WIN32_NO_STATUS
+#define COBJMACROS
+
+#include <windows.h>
+#include <imm.h>
+#include <ddk/immdev.h>
+#include <strsafe.h>
+
+#include <wine/debug.h>
+
+#include "resource.h"
+
+extern HINSTANCE g_hInst;
diff --git a/dll/ime/msctfime/msctfime.rc b/dll/ime/msctfime/msctfime.rc
new file mode 100644
index 00000000000..1f75b36dd37
--- /dev/null
+++ b/dll/ime/msctfime/msctfime.rc
@@ -0,0 +1,32 @@
+/*
+ * PROJECT: ReactOS msctfime.ime
+ * LICENSE: LGPL-2.1-or-later (
https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE: Resource of msctfime.ime
+ * COPYRIGHT: Copyright 2023 Katayama Hirofumi MZ
<katayama.hirofumi.mz(a)gmail.com>
+ */
+
+#include <windef.h>
+#include <winuser.rh>
+
+#include "resource.h"
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "ReactOS msctfime.ime"
+#define REACTOS_STR_INTERNAL_NAME "msctfime"
+#define REACTOS_STR_ORIGINAL_FILENAME "msctfime.ime"
+#include <reactos/version.rc>
+
+#include <reactos/manifest_hosted.rc>
+
+/* Icons */
+IDI_UNICODE ICON "res/unicode.ico"
+IDI_DOWN ICON "res/down.ico"
+
+/* UTF-8 */
+#pragma code_page(65001)
+
+#ifdef LANGUAGE_EN_US
+ #include "lang/en-US.rc"
+#endif
diff --git a/dll/ime/msctfime/msctfime.spec b/dll/ime/msctfime/msctfime.spec
new file mode 100644
index 00000000000..2e9b8708e09
--- /dev/null
+++ b/dll/ime/msctfime/msctfime.spec
@@ -0,0 +1,30 @@
+@ stdcall CtfImeDispatchDefImeMessage(ptr long ptr ptr)
+@ stdcall CtfImeCreateInputContext(ptr)
+@ stdcall CtfImeCreateThreadMgr()
+@ stdcall CtfImeDestroyInputContext(ptr)
+@ stdcall CtfImeDestroyThreadMgr()
+@ stdcall CtfImeEscapeEx(ptr long ptr ptr)
+@ stdcall CtfImeGetGuidAtom(ptr long ptr)
+@ stdcall CtfImeInquireExW(ptr ptr long ptr)
+@ stdcall CtfImeIsGuidMapEnable(ptr)
+@ stdcall CtfImeIsIME(ptr)
+@ stdcall CtfImeProcessCicHotkey(ptr long ptr)
+@ stdcall CtfImeSelectEx(ptr long ptr)
+@ stdcall CtfImeSetActiveContextAlways(ptr long ptr ptr)
+@ stdcall CtfImeThreadDetach()
+@ stdcall ImeConfigure(ptr ptr long ptr)
+@ stdcall ImeConversionList(ptr wstr ptr long long)
+@ stdcall ImeDestroy(long)
+@ stdcall ImeEnumRegisterWord(ptr wstr long wstr ptr)
+@ stdcall ImeEscape(ptr long ptr)
+@ stdcall ImeGetRegisterWordStyle(long ptr)
+@ stdcall ImeInquire(ptr ptr long)
+@ stdcall ImeProcessKey(ptr long long ptr)
+@ stdcall ImeRegisterWord(wstr long wstr)
+@ stdcall ImeSelect(ptr long)
+@ stdcall ImeSetActiveContext(ptr long)
+@ stdcall ImeSetCompositionString(ptr long ptr long ptr long)
+@ stdcall ImeToAsciiEx(long long ptr ptr long ptr)
+@ stdcall ImeUnregisterWord(wstr long wstr)
+@ stdcall NotifyIME(ptr long long long)
+@ stdcall UIWndProc(ptr long ptr ptr)
diff --git a/dll/ime/msctfime/res/down.ico b/dll/ime/msctfime/res/down.ico
new file mode 100644
index 00000000000..5aa5db9b758
Binary files /dev/null and b/dll/ime/msctfime/res/down.ico differ
diff --git a/dll/ime/msctfime/res/unicode.ico b/dll/ime/msctfime/res/unicode.ico
new file mode 100644
index 00000000000..59a1ac7b59a
Binary files /dev/null and b/dll/ime/msctfime/res/unicode.ico differ
diff --git a/dll/ime/msctfime/resource.h b/dll/ime/msctfime/resource.h
new file mode 100644
index 00000000000..dd8cc32caf0
--- /dev/null
+++ b/dll/ime/msctfime/resource.h
@@ -0,0 +1,16 @@
+#pragma once
+
+#define IDI_UNICODE 256
+#define IDI_DOWN 257
+
+#define IDS_OK 100
+#define IDS_CANCEL 101
+#define IDS_ABORT 102
+#define IDS_RETRY 103
+#define IDS_IGNORE 104
+#define IDS_YES 105
+#define IDS_NO 106
+
+#define IDS_ENTER 512
+#define IDS_FINALIZE_STRING 513
+#define IDS_CONVERSION 514
diff --git a/dll/win32/imm32/ime.c b/dll/win32/imm32/ime.c
index a30b86af31b..f198f7112c1 100644
--- a/dll/win32/imm32/ime.c
+++ b/dll/win32/imm32/ime.c
@@ -904,7 +904,7 @@ HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd)
/***********************************************************************
* ImmNotifyIME (IMM32.@)
*/
-BOOL WINAPI ImmNotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
+BOOL WINAPI ImmNotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD_PTR dwValue)
{
HKL hKL;
PIMEDPI pImeDpi;
diff --git a/dll/win32/imm32/imm32.spec b/dll/win32/imm32/imm32.spec
index 3bd4c297f44..03ba666c074 100644
--- a/dll/win32/imm32/imm32.spec
+++ b/dll/win32/imm32/imm32.spec
@@ -93,8 +93,8 @@
@ stdcall ImmLockIMC(ptr)
@ stdcall ImmLockIMCC(ptr)
@ stdcall ImmLockImeDpi(ptr)
-@ stdcall ImmNotifyIME(ptr long long long)
-@ stdcall ImmProcessKey(ptr long long long long)
+@ stdcall ImmNotifyIME(ptr long long ptr)
+@ stdcall ImmProcessKey(ptr long long ptr long)
@ stdcall ImmPutImeMenuItemsIntoMappedFile(ptr)
@ stdcall ImmReSizeIMCC(ptr long)
@ stdcall ImmRegisterClient(ptr ptr)
diff --git a/sdk/include/ddk/immdev.h b/sdk/include/ddk/immdev.h
index e36ff688666..7dd67cdb013 100644
--- a/sdk/include/ddk/immdev.h
+++ b/sdk/include/ddk/immdev.h
@@ -341,6 +341,115 @@ C_ASSERT(sizeof(CLIENTIMC) == 0x34);
#define CLIENTIMC_DISABLEIME 0x80
#define CLIENTIMC_UNKNOWN2 0x100
+/* IME file interface */
+
+BOOL WINAPI
+ImeInquire(
+ _Out_ LPIMEINFO lpIMEInfo,
+ _Out_ LPWSTR lpszWndClass,
+ _In_ DWORD dwSystemInfoFlags);
+
+DWORD WINAPI
+ImeConversionList(
+ _In_ HIMC hIMC,
+ _In_ LPCWSTR lpSrc,
+ _Out_ LPCANDIDATELIST lpDst,
+ _In_ DWORD dwBufLen,
+ _In_ UINT uFlag);
+
+BOOL WINAPI
+ImeRegisterWord(
+ _In_ LPCWSTR lpszReading,
+ _In_ DWORD dwStyle,
+ _In_ LPCWSTR lpszString);
+
+BOOL WINAPI
+ImeUnregisterWord(
+ _In_ LPCWSTR lpszReading,
+ _In_ DWORD dwStyle,
+ _In_ LPCWSTR lpszString);
+
+UINT WINAPI
+ImeGetRegisterWordStyle(
+ _In_ UINT nItem,
+ _Out_ LPSTYLEBUFW lpStyleBuf);
+
+UINT WINAPI
+ImeEnumRegisterWord(
+ _In_ REGISTERWORDENUMPROCW lpfnEnumProc,
+ _In_opt_ LPCWSTR lpszReading,
+ _In_ DWORD dwStyle,
+ _In_opt_ LPCWSTR lpszString,
+ _In_opt_ LPVOID lpData);
+
+BOOL WINAPI
+ImeConfigure(
+ _In_ HKL hKL,
+ _In_ HWND hWnd,
+ _In_ DWORD dwMode,
+ _Inout_opt_ LPVOID lpData);
+
+BOOL WINAPI
+ImeDestroy(
+ _In_ UINT uReserved);
+
+LRESULT WINAPI
+ImeEscape(
+ _In_ HIMC hIMC,
+ _In_ UINT uEscape,
+ _Inout_opt_ LPVOID lpData);
+
+BOOL WINAPI
+ImeProcessKey(
+ _In_ HIMC hIMC,
+ _In_ UINT uVirKey,
+ _In_ LPARAM lParam,
+ _In_ CONST LPBYTE lpbKeyState);
+
+BOOL WINAPI
+ImeSelect(
+ _In_ HIMC hIMC,
+ _In_ BOOL fSelect);
+
+BOOL WINAPI
+ImeSetActiveContext(
+ _In_ HIMC hIMC,
+ _In_ BOOL fFlag);
+
+UINT WINAPI
+ImeToAsciiEx(
+ _In_ UINT uVirKey,
+ _In_ UINT uScanCode,
+ _In_ CONST LPBYTE lpbKeyState,
+ _Out_ LPTRANSMSGLIST lpTransMsgList,
+ _In_ UINT fuState,
+ _In_ HIMC hIMC);
+
+BOOL WINAPI
+NotifyIME(
+ _In_ HIMC hIMC,
+ _In_ DWORD dwAction,
+ _In_ DWORD dwIndex,
+ _In_ DWORD_PTR dwValue);
+
+BOOL WINAPI
+ImeSetCompositionString(
+ _In_ HIMC hIMC,
+ _In_ DWORD dwIndex,
+ _In_opt_ LPCVOID lpComp,
+ _In_ DWORD dwCompLen,
+ _In_opt_ LPCVOID lpRead,
+ _In_ DWORD dwReadLen);
+
+DWORD WINAPI
+ImeGetImeMenuItems(
+ _In_ HIMC hIMC,
+ _In_ DWORD dwFlags,
+ _In_ DWORD dwType,
+ _Inout_opt_ LPIMEMENUITEMINFOW lpImeParentMenu,
+ _Inout_opt_ LPIMEMENUITEMINFOW lpImeMenu,
+ _In_ DWORD dwSize);
+
#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/sdk/include/psdk/imm.h b/sdk/include/psdk/imm.h
index 9ec9e3cfb18..7d63409ad5f 100644
--- a/sdk/include/psdk/imm.h
+++ b/sdk/include/psdk/imm.h
@@ -270,23 +270,6 @@ BOOL WINAPI
ImmDestroySoftKeyboard(
_In_ HWND hwndSoftKBD);
-BOOL WINAPI ImeInquire(LPIMEINFO, LPWSTR, LPCWSTR lpszOptions);
-BOOL WINAPI ImeConfigure (HKL, HWND, DWORD, LPVOID);
-DWORD WINAPI ImeConversionList(HIMC, LPCWSTR, LPCANDIDATELIST,DWORD,UINT);
-BOOL WINAPI ImeDestroy(UINT);
-LRESULT WINAPI ImeEscape(HIMC, UINT, LPVOID);
-BOOL WINAPI ImeProcessKey(HIMC, UINT, LPARAM, CONST LPBYTE);
-BOOL WINAPI ImeSelect(HIMC, BOOL);
-BOOL WINAPI ImeSetActiveContext(HIMC, BOOL);
-UINT WINAPI ImeToAsciiEx(UINT, UINT, CONST LPBYTE, LPDWORD, UINT, HIMC);
-BOOL WINAPI NotifyIME(HIMC, DWORD, DWORD, DWORD);
-BOOL WINAPI ImeRegisterWord(LPCWSTR, DWORD, LPCWSTR);
-BOOL WINAPI ImeUnregisterWord(LPCWSTR, DWORD, LPCWSTR);
-UINT WINAPI ImeGetRegisterWordStyle(UINT, LPSTYLEBUFW);
-UINT WINAPI ImeEnumRegisterWord(REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID);
-BOOL WINAPI ImeSetCompositionString(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD);
-DWORD WINAPI ImeGetImeMenuItems(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW,
LPIMEMENUITEMINFOW, DWORD);
-
/* wParam for WM_IME_CONTROL */
#define IMC_GETCANDIDATEPOS 0x0007
#define IMC_SETCANDIDATEPOS 0x0008
@@ -870,7 +853,7 @@ BOOL WINAPI ImmIsUIMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_
LPARAM);
BOOL WINAPI ImmIsUIMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM);
#define ImmIsUIMessage WINELIB_NAME_AW(ImmIsUIMessage)
-BOOL WINAPI ImmNotifyIME(_In_ HIMC, _In_ DWORD, _In_ DWORD, _In_ DWORD);
+BOOL WINAPI ImmNotifyIME(_In_ HIMC, _In_ DWORD, _In_ DWORD, _In_ DWORD_PTR);
DWORD WINAPI ImmProcessKey(HWND, HKL, UINT, LPARAM, DWORD);
diff --git a/sdk/include/reactos/imetable.h b/sdk/include/reactos/imetable.h
index d41c5af653d..88f1f59f485 100644
--- a/sdk/include/reactos/imetable.h
+++ b/sdk/include/reactos/imetable.h
@@ -8,11 +8,11 @@ DEFINE_IME_ENTRY(UINT, ImeEnumRegisterWord, (LPVOID lpfnEnumProc,
LPCVOID lpszRe
DEFINE_IME_ENTRY(BOOL, ImeConfigure, (HKL hKL, HWND hWnd, DWORD dwMode, LPVOID lpData),
FALSE)
DEFINE_IME_ENTRY(BOOL, ImeDestroy, (UINT uReserved), FALSE)
DEFINE_IME_ENTRY(LRESULT, ImeEscape, (HIMC hIMC, UINT uEscape, LPVOID lpData), FALSE)
-DEFINE_IME_ENTRY(BOOL, ImeProcessKey, (HIMC hIMC, UINT uVirKey, DWORD lParam, CONST
LPBYTE lpbKeyState), FALSE)
+DEFINE_IME_ENTRY(BOOL, ImeProcessKey, (HIMC hIMC, UINT uVirKey, LPARAM lParam, CONST
LPBYTE lpbKeyState), FALSE)
DEFINE_IME_ENTRY(BOOL, ImeSelect, (HIMC hIMC, BOOL fSelect), FALSE)
DEFINE_IME_ENTRY(BOOL, ImeSetActiveContext, (HIMC hIMC, BOOL fFlag), FALSE)
DEFINE_IME_ENTRY(UINT, ImeToAsciiEx, (UINT uVirKey, UINT uScanCode, CONST LPBYTE
lpbKeyState, LPTRANSMSGLIST lpTransMsgList, UINT fuState, HIMC hIMC), FALSE)
-DEFINE_IME_ENTRY(BOOL, NotifyIME, (HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD
dwValue), FALSE)
+DEFINE_IME_ENTRY(BOOL, NotifyIME, (HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD_PTR
dwValue), FALSE)
DEFINE_IME_ENTRY(BOOL, ImeSetCompositionString, (HIMC hIMC, DWORD dwIndex, LPCVOID
lpComp, DWORD dwCompLen, LPCVOID lpRead, DWORD dwReadLen), FALSE)
DEFINE_IME_ENTRY(DWORD, ImeGetImeMenuItems, (HIMC hIMC, DWORD dwFlags, DWORD dwType,
LPIMEMENUITEMINFOW lpImeParentMenu, LPIMEMENUITEMINFOW lpImeMenu, DWORD dwSize), TRUE)
DEFINE_IME_ENTRY(BOOL, CtfImeInquireExW, (LPIMEINFO lpIMEInfo, LPVOID lpszWndClass, DWORD
dwSystemInfoFlags, HKL hKL), TRUE)
diff --git a/win32ss/user/user32/include/immtable.h
b/win32ss/user/user32/include/immtable.h
index b9acde65ab7..ad178c8282d 100644
--- a/win32ss/user/user32/include/immtable.h
+++ b/win32ss/user/user32/include/immtable.h
@@ -25,7 +25,7 @@ DEFINE_IMM_ENTRY(BOOL, ImmGetCompositionFontA, (HIMC hIMC, LPLOGFONTA
plf), 0, N
DEFINE_IMM_ENTRY(BOOL, ImmSetCompositionFontW, (HIMC hIMC, LPLOGFONTW plf), 0, NONVOID)
DEFINE_IMM_ENTRY(BOOL, ImmSetCompositionFontA, (HIMC hIMC, LPLOGFONTA plf), 0, NONVOID)
DEFINE_IMM_ENTRY(BOOL, ImmSetCompositionWindow, (HIMC hIMC, LPCOMPOSITIONFORM
lpCompForm), 0, NONVOID)
-DEFINE_IMM_ENTRY(BOOL, ImmNotifyIME, (HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD
dwValue), 0, NONVOID)
+DEFINE_IMM_ENTRY(BOOL, ImmNotifyIME, (HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD_PTR
dwValue), 0, NONVOID)
DEFINE_IMM_ENTRY(/*PINPUTCONTEXT*/ LPVOID, ImmLockIMC, (HIMC hIMC), 0, NONVOID)
DEFINE_IMM_ENTRY(BOOL, ImmUnlockIMC, (HIMC hIMC), 0, NONVOID)
DEFINE_IMM_ENTRY(BOOL, ImmLoadIME, (HKL hKL), 0, NONVOID)