From 1f446936572780cfb3d44a6142c44fd104d148d5 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 12 Jan 2022 12:07:31 +0900 Subject: [PATCH] [NTUSER] Implement NtUserSetImeInfoEx (#4276) - Modify NtUserSetImeInfoEx prototype. - Add UserSetImeInfoEx helper function. - Implement NtUserSetImeInfoEx function. CORE-11700 --- win32ss/include/ntuser.h | 2 +- win32ss/user/ntuser/ime.c | 59 +++++++++++++++++++++++++++++++++++---- 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/win32ss/include/ntuser.h b/win32ss/include/ntuser.h index 4519b3a35aa..a53f7012838 100644 --- a/win32ss/include/ntuser.h +++ b/win32ss/include/ntuser.h @@ -3186,7 +3186,7 @@ NtUserSetImeHotKey( DWORD Unknown3, DWORD Unknown4); -DWORD +BOOL NTAPI NtUserSetImeInfoEx( PIMEINFOEX pImeInfoEx); diff --git a/win32ss/user/ntuser/ime.c b/win32ss/user/ntuser/ime.c index ee79b14d60f..e6c6ff150c2 100644 --- a/win32ss/user/ntuser/ime.c +++ b/win32ss/user/ntuser/ime.c @@ -260,13 +260,60 @@ NtUserSetAppImeLevel( return 0; } -DWORD -APIENTRY -NtUserSetImeInfoEx( - PIMEINFOEX pImeInfoEx) +BOOL FASTCALL UserSetImeInfoEx(LPVOID pUnknown, PIMEINFOEX pImeInfoEx) { - STUB; - return 0; + PKL pklHead, pkl; + + pkl = pklHead = gspklBaseLayout; + + do + { + if (pkl->hkl != pImeInfoEx->hkl) + { + pkl = pkl->pklNext; + continue; + } + + if (!pkl->piiex) + return FALSE; + + if (!pkl->piiex->fLoadFlag) + *pkl->piiex = *pImeInfoEx; + + return TRUE; + } while (pkl != pklHead); + + return FALSE; +} + +BOOL +APIENTRY +NtUserSetImeInfoEx(PIMEINFOEX pImeInfoEx) +{ + BOOL ret = FALSE; + IMEINFOEX ImeInfoEx; + + UserEnterExclusive(); + + if (!IS_IMM_MODE()) + goto Quit; + + _SEH2_TRY + { + ProbeForRead(pImeInfoEx, sizeof(*pImeInfoEx), 1); + ImeInfoEx = *pImeInfoEx; + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + goto Quit; + } + _SEH2_END; + + ret = UserSetImeInfoEx(NULL, &ImeInfoEx); + +Quit: + UserLeave(); + return ret; } DWORD APIENTRY