https://git.reactos.org/?p=reactos.git;a=commitdiff;h=17617221ce3b488d1c8ec2f24cfd5fc0eabcf627

commit 17617221ce3b488d1c8ec2f24cfd5fc0eabcf627
Author:     Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com>
AuthorDate: Mon Dec 11 22:37:25 2023 +0900
Commit:     GitHub <nore...@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...@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...@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...@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...@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)

Reply via email to