mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 21:06:17 +00:00
[IMM32] ImmCreateContext, ImmDestroyContext, DllMain etc. (#3867)
- Rewrite ImmCreateContext, ImmDestroyContext, and DllMain functions. - Add g_hImm32Inst, g_bClientRegd, and g_SharedInfo global variables. Delete g_dwImm32Flags (that was g_psi->dwSRVIFlags). - Implement ImmLoadIME and ImmRegisterClient functions. - Modify CLIENTIMC and IMEDPI structures. Move CLIENTIMC definition into ntuser.h. - Add file win32ss/include/imetable.h. - Rename SRVINFO_METRICS macro as SRVINFO_CICERO_ENABLED. CORE-11700
This commit is contained in:
parent
c23ce9dfad
commit
692a30a84a
10 changed files with 586 additions and 296 deletions
22
win32ss/include/imetable.h
Normal file
22
win32ss/include/imetable.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* DEFINE_IME_ENTRY(type, name, params, extended) */
|
||||
DEFINE_IME_ENTRY(BOOL, ImeInquire, (LPIMEINFO lpIMEInfo, LPWSTR lpszWndClass, DWORD dwSystemInfoFlags), FALSE)
|
||||
DEFINE_IME_ENTRY(DWORD, ImeConversionList, (HIMC hIMC, LPCWSTR lpSrc, LPCANDIDATELIST lpDst, DWORD dwBufLen, UINT uFlag), FALSE)
|
||||
DEFINE_IME_ENTRY(BOOL, ImeRegisterWord, (LPCWSTR lpszReading, DWORD dwStyle, LPCWSTR lpszString), FALSE)
|
||||
DEFINE_IME_ENTRY(BOOL, ImeUnregisterWord, (LPCWSTR lpszReading, DWORD dwStyle, LPCWSTR lpszString), FALSE)
|
||||
DEFINE_IME_ENTRY(UINT, ImeGetRegisterWordStyle, (UINT nItem, LPSTYLEBUFW lpStyleBuf), FALSE)
|
||||
DEFINE_IME_ENTRY(UINT, ImeEnumRegisterWord, (HKL hKL, REGISTERWORDENUMPROCW lpfnEnumProc, LPCWSTR lpszReading, DWORD dwStyle, LPCWSTR lpszString, LPVOID lpData), FALSE)
|
||||
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, ImeSelect, (HIMC hIMC, BOOL fSelect), FALSE)
|
||||
DEFINE_IME_ENTRY(BOOL, ImeProcessKey, (HIMC hIMC, UINT uVirKey, DWORD lParam, CONST LPBYTE lpbKeyState), FALSE)
|
||||
DEFINE_IME_ENTRY(BOOL, ImeSetActiveContext, (HIMC hIMC, BOOL fFlag), FALSE)
|
||||
DEFINE_IME_ENTRY(UINT, ImeToAsciiEx, (UINT uVirKey, UINT uScanCode, CONST LPBYTE lpbKeyState, /*FIXME: LPTRANSMSGLIST*/ LPVOID lpTransMsgList, UINT fuState, HIMC hIMC), FALSE)
|
||||
DEFINE_IME_ENTRY(BOOL, NotifyIME, (HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD 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), FALSE)
|
||||
DEFINE_IME_ENTRY(DWORD, CtfImeInquireExW, (VOID /* FIXME: unknown */), TRUE)
|
||||
DEFINE_IME_ENTRY(DWORD, CtfImeSelectEx, (VOID /* FIXME: unknown */), TRUE)
|
||||
DEFINE_IME_ENTRY(DWORD, CtfImeEscapeEx, (VOID /* FIXME: unknown */), TRUE)
|
||||
DEFINE_IME_ENTRY(DWORD, CtfImeGetGuidAtom, (VOID /* FIXME: unknown */), TRUE)
|
||||
DEFINE_IME_ENTRY(DWORD, CtfImeIsGuidMapEnable, (VOID /* FIXME: unknown */), TRUE)
|
|
@ -912,7 +912,7 @@ typedef LONG_PTR
|
|||
#define SRVINFO_DBCSENABLED 0x0002
|
||||
#define SRVINFO_IMM32 0x0004
|
||||
#define SRVINFO_APIHOOK 0x0010
|
||||
#define SRVINFO_METRICS 0x0020
|
||||
#define SRVINFO_CICERO_ENABLED 0x0020
|
||||
#define SRVINFO_KBDPREF 0x0080
|
||||
|
||||
#define NUM_SYSCOLORS 31
|
||||
|
@ -1212,42 +1212,88 @@ typedef struct _IMEWND
|
|||
PIMEUI pimeui;
|
||||
} IMEWND, *PIMEWND;
|
||||
|
||||
typedef BOOL (WINAPI *FN_ImeDestroy)(UINT uReserved);
|
||||
typedef LRESULT (WINAPI *FN_ImeEscape)(HIMC hIMC, UINT uEscape, LPVOID lpData);
|
||||
typedef BOOL (WINAPI *FN_NotifyIME)(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue);
|
||||
#define DEFINE_IME_ENTRY(type, name, params, extended) typedef type (WINAPI *FN_##name) params;
|
||||
#include "imetable.h"
|
||||
#undef DEFINE_IME_ENTRY
|
||||
|
||||
typedef struct IMEDPI /* unconfirmed */
|
||||
typedef struct IMEDPI
|
||||
{
|
||||
struct IMEDPI *pNext;
|
||||
HINSTANCE hInst;
|
||||
HKL hKL;
|
||||
DWORD dwUnknown0;
|
||||
DWORD dwUnknown1;
|
||||
DWORD dwUnknown2[14];
|
||||
IMEINFO ImeInfo;
|
||||
UINT uCodePage;
|
||||
WCHAR szUIClass[16];
|
||||
DWORD cLockObj;
|
||||
DWORD dwFlags;
|
||||
DWORD dwUnknown3[7];
|
||||
FN_ImeDestroy ImeDestroy;
|
||||
FN_ImeEscape ImeEscape;
|
||||
DWORD dwUnknown4[4];
|
||||
FN_NotifyIME NotifyIME;
|
||||
/* ... */
|
||||
#define DEFINE_IME_ENTRY(type, name, params, extended) FN_##name name;
|
||||
#include "imetable.h"
|
||||
#undef DEFINE_IME_ENTRY
|
||||
} IMEDPI, *PIMEDPI;
|
||||
|
||||
#ifndef _WIN64
|
||||
C_ASSERT(offsetof(IMEDPI, pNext) == 0x0);
|
||||
C_ASSERT(offsetof(IMEDPI, hInst) == 0x4);
|
||||
C_ASSERT(offsetof(IMEDPI, hKL) == 0x8);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeInfo) == 0xc);
|
||||
C_ASSERT(offsetof(IMEDPI, uCodePage) == 0x28);
|
||||
C_ASSERT(offsetof(IMEDPI, szUIClass) == 0x2c);
|
||||
C_ASSERT(offsetof(IMEDPI, cLockObj) == 0x4c);
|
||||
C_ASSERT(offsetof(IMEDPI, dwFlags) == 0x50);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeInquire) == 0x54);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeConversionList) == 0x58);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeRegisterWord) == 0x5c);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeUnregisterWord) == 0x60);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeGetRegisterWordStyle) == 0x64);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeEnumRegisterWord) == 0x68);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeConfigure) == 0x6c);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeDestroy) == 0x70);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeEscape) == 0x74);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeSelect) == 0x78);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeProcessKey) == 0x7c);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeSetActiveContext) == 0x80);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeToAsciiEx) == 0x84);
|
||||
C_ASSERT(offsetof(IMEDPI, NotifyIME) == 0x88);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeSetCompositionString) == 0x8c);
|
||||
C_ASSERT(offsetof(IMEDPI, ImeGetImeMenuItems) == 0x90);
|
||||
C_ASSERT(offsetof(IMEDPI, CtfImeInquireExW) == 0x94);
|
||||
C_ASSERT(offsetof(IMEDPI, CtfImeSelectEx) == 0x98);
|
||||
C_ASSERT(offsetof(IMEDPI, CtfImeEscapeEx) == 0x9c);
|
||||
C_ASSERT(offsetof(IMEDPI, CtfImeGetGuidAtom) == 0xa0);
|
||||
C_ASSERT(offsetof(IMEDPI, CtfImeIsGuidMapEnable) == 0xa4);
|
||||
C_ASSERT(sizeof(IMEDPI) == 0xa8);
|
||||
#endif
|
||||
|
||||
/* flags for IMEDPI.dwFlags */
|
||||
#define IMEDPI_FLAG_UNKNOWN 1
|
||||
#define IMEDPI_FLAG_UNKNOWN2 2
|
||||
#define IMEDPI_FLAG_UNKNOWN 0x1
|
||||
#define IMEDPI_FLAG_LOCKED 0x2
|
||||
|
||||
/* unconfirmed */
|
||||
typedef struct tagCLIENTIMC
|
||||
{
|
||||
HIMC hImc;
|
||||
LONG cLockObj;
|
||||
DWORD dwFlags;
|
||||
DWORD unknown;
|
||||
RTL_CRITICAL_SECTION cs;
|
||||
DWORD unknown2;
|
||||
HKL hKL;
|
||||
BOOL bUnknown4;
|
||||
} CLIENTIMC, *PCLIENTIMC;
|
||||
|
||||
#ifndef _WIN64
|
||||
C_ASSERT(offsetof(CLIENTIMC, hImc) == 0x0);
|
||||
C_ASSERT(offsetof(CLIENTIMC, cLockObj) == 0x4);
|
||||
C_ASSERT(offsetof(CLIENTIMC, dwFlags) == 0x8);
|
||||
C_ASSERT(offsetof(CLIENTIMC, cs) == 0x10);
|
||||
C_ASSERT(offsetof(CLIENTIMC, hKL) == 0x2c);
|
||||
C_ASSERT(sizeof(CLIENTIMC) == 0x34);
|
||||
#endif
|
||||
|
||||
/* flags for CLIENTIMC */
|
||||
#define CLIENTIMC_WIDE 0x1
|
||||
#define CLIENTIMC_UNKNOWN1 0x40
|
||||
#define CLIENTIMC_UNKNOWN2 0x100
|
||||
|
||||
DWORD
|
||||
NTAPI
|
||||
|
@ -1869,10 +1915,9 @@ NtUserCreateDesktop(
|
|||
DWORD dwFlags,
|
||||
ACCESS_MASK dwDesiredAccess);
|
||||
|
||||
DWORD
|
||||
HIMC
|
||||
NTAPI
|
||||
NtUserCreateInputContext(
|
||||
DWORD dwUnknown1);
|
||||
NtUserCreateInputContext(PCLIENTIMC pClientImc);
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
|
@ -1964,10 +2009,9 @@ NtUserDestroyCursor(
|
|||
_In_ HANDLE Handle,
|
||||
_In_ BOOL bForce);
|
||||
|
||||
DWORD
|
||||
BOOL
|
||||
NTAPI
|
||||
NtUserDestroyInputContext(
|
||||
DWORD dwUnknown1);
|
||||
NtUserDestroyInputContext(HIMC hIMC);
|
||||
|
||||
BOOLEAN
|
||||
NTAPI
|
||||
|
@ -3130,9 +3174,7 @@ NtUserSetImeInfoEx(
|
|||
|
||||
DWORD
|
||||
NTAPI
|
||||
NtUserSetImeOwnerWindow(
|
||||
DWORD Unknown0,
|
||||
DWORD Unknown1);
|
||||
NtUserSetImeOwnerWindow(PIMEINFOEX pImeInfoEx, BOOL fFlag);
|
||||
|
||||
DWORD
|
||||
NTAPI
|
||||
|
|
|
@ -133,11 +133,9 @@ NtUserSetImeInfoEx(
|
|||
}
|
||||
|
||||
DWORD APIENTRY
|
||||
NtUserSetImeOwnerWindow(DWORD Unknown0,
|
||||
DWORD Unknown1)
|
||||
NtUserSetImeOwnerWindow(PIMEINFOEX pImeInfoEx, BOOL fFlag)
|
||||
{
|
||||
STUB
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -169,7 +169,7 @@ InitMetrics(VOID)
|
|||
piSysMet[90] = 0;
|
||||
#endif
|
||||
|
||||
gpsi->dwSRVIFlags |= SRVINFO_METRICS;
|
||||
gpsi->dwSRVIFlags |= SRVINFO_CICERO_ENABLED;
|
||||
Setup = TRUE;
|
||||
|
||||
return TRUE;
|
||||
|
|
|
@ -419,22 +419,20 @@ NtUserYieldTask(VOID)
|
|||
return 0;
|
||||
}
|
||||
|
||||
DWORD
|
||||
HIMC
|
||||
APIENTRY
|
||||
NtUserCreateInputContext(
|
||||
DWORD dwUnknown1)
|
||||
NtUserCreateInputContext(PCLIENTIMC pClientImc)
|
||||
{
|
||||
STUB;
|
||||
return 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
DWORD
|
||||
BOOL
|
||||
APIENTRY
|
||||
NtUserDestroyInputContext(
|
||||
DWORD dwUnknown1)
|
||||
NtUserDestroyInputContext(HIMC hIMC)
|
||||
{
|
||||
STUB;
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DWORD
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue