mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 20:05:41 +00:00
[NTUSER] ime.c: Add SAL2 annotations and tracing (#8070)
Refactoring and improving trace. JIRA issue: CORE-19455 - Add SAL2 annotations to function parameters. - Add and improve tracing (TRACE and ERR) for easier debugging.
This commit is contained in:
parent
0947a64a90
commit
67a4cf93be
5 changed files with 277 additions and 151 deletions
|
@ -1244,11 +1244,18 @@ typedef struct _IMEWND
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserAssociateInputContext(HWND hWnd, HIMC hIMC, DWORD dwFlags);
|
NtUserAssociateInputContext(
|
||||||
|
_In_ HWND hWnd,
|
||||||
|
_In_opt_ HIMC hIMC,
|
||||||
|
_In_ DWORD dwFlags);
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserBuildHimcList(DWORD dwThreadId, DWORD dwCount, HIMC *phList, LPDWORD pdwCount);
|
NtUserBuildHimcList(
|
||||||
|
_In_ DWORD dwThreadId,
|
||||||
|
_In_ DWORD dwCount,
|
||||||
|
_Out_ HIMC *phList,
|
||||||
|
_Out_ PDWORD pdwCount);
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -1768,8 +1775,8 @@ NtUserCheckWindowThreadDesktop(
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserCheckImeHotKey(
|
NtUserCheckImeHotKey(
|
||||||
UINT uVirtualKey,
|
_In_ UINT uVirtualKey,
|
||||||
LPARAM lParam);
|
_In_ LPARAM lParam);
|
||||||
|
|
||||||
HWND NTAPI
|
HWND NTAPI
|
||||||
NtUserChildWindowFromPointEx(
|
NtUserChildWindowFromPointEx(
|
||||||
|
@ -1861,7 +1868,7 @@ NtUserCreateDesktop(
|
||||||
|
|
||||||
HIMC
|
HIMC
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserCreateInputContext(ULONG_PTR dwClientImcData);
|
NtUserCreateInputContext(_In_ ULONG_PTR dwClientImcData);
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -1955,7 +1962,7 @@ NtUserDestroyCursor(
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserDestroyInputContext(HIMC hIMC);
|
NtUserDestroyInputContext(_In_ HIMC hIMC);
|
||||||
|
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -1965,7 +1972,7 @@ NtUserDestroyWindow(
|
||||||
BOOL
|
BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserDisableThreadIme(
|
NtUserDisableThreadIme(
|
||||||
DWORD dwThreadID);
|
_In_ DWORD dwThreadID);
|
||||||
|
|
||||||
LRESULT
|
LRESULT
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -2148,7 +2155,7 @@ NtUserGetAncestor(
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserGetAppImeLevel(HWND hWnd);
|
NtUserGetAppImeLevel(_In_ HWND hWnd);
|
||||||
|
|
||||||
SHORT
|
SHORT
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -2312,16 +2319,17 @@ NtUserGetIconSize(
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserGetImeHotKey(DWORD dwHotKeyId,
|
NtUserGetImeHotKey(
|
||||||
LPUINT lpuModifiers,
|
_In_ DWORD dwHotKeyId,
|
||||||
LPUINT lpuVirtualKey,
|
_Out_ PUINT lpuModifiers,
|
||||||
LPHKL lphKL);
|
_Out_ PUINT lpuVirtualKey,
|
||||||
|
_Out_ LPHKL lphKL);
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserGetImeInfoEx(
|
NtUserGetImeInfoEx(
|
||||||
PIMEINFOEX pImeInfoEx,
|
_Inout_ PIMEINFOEX pImeInfoEx,
|
||||||
IMEINFOEXCLASS SearchType);
|
_In_ IMEINFOEXCLASS SearchType);
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -2703,7 +2711,10 @@ NtUserMoveWindow(
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserNotifyIMEStatus(HWND hwnd, BOOL fOpen, DWORD dwConversion);
|
NtUserNotifyIMEStatus(
|
||||||
|
_In_ HWND hwnd,
|
||||||
|
_In_ BOOL fOpen,
|
||||||
|
_In_ DWORD dwConversion);
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -3120,20 +3131,20 @@ NtUserSetFocus(
|
||||||
BOOL
|
BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserSetImeHotKey(
|
NtUserSetImeHotKey(
|
||||||
DWORD dwHotKeyId,
|
_In_ DWORD dwHotKeyId,
|
||||||
UINT uModifiers,
|
_In_ UINT uModifiers,
|
||||||
UINT uVirtualKey,
|
_In_ UINT uVirtualKey,
|
||||||
HKL hKL,
|
_In_ HKL hKL,
|
||||||
DWORD dwAction);
|
_In_ DWORD dwAction);
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserSetImeInfoEx(
|
NtUserSetImeInfoEx(
|
||||||
PIMEINFOEX pImeInfoEx);
|
_In_ const IMEINFOEX *pImeInfoEx);
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserSetImeOwnerWindow(HWND hImeWnd, HWND hwndFocus);
|
NtUserSetImeOwnerWindow(_In_ HWND hImeWnd, _In_opt_ HWND hwndFocus);
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -3257,7 +3268,9 @@ NtUserSetSystemTimer(
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserSetThreadLayoutHandles(HKL hNewKL, HKL hOldKL);
|
NtUserSetThreadLayoutHandles(
|
||||||
|
_In_ HKL hNewKL,
|
||||||
|
_In_ HKL hOldKL);
|
||||||
|
|
||||||
UINT_PTR
|
UINT_PTR
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
|
@ -37,11 +37,11 @@ typedef struct tagIMEHOTKEY
|
||||||
HKL hKL;
|
HKL hKL;
|
||||||
} IMEHOTKEY, *PIMEHOTKEY;
|
} IMEHOTKEY, *PIMEHOTKEY;
|
||||||
|
|
||||||
PIMEHOTKEY gpImeHotKeyList = NULL; // Win: gpImeHotKeyListHeader
|
PIMEHOTKEY gpImeHotKeyList = NULL;
|
||||||
LCID glcidSystem = 0; // Win: glcidSystem
|
LCID glcidSystem = 0;
|
||||||
|
|
||||||
// Win: GetAppImeCompatFlags
|
static DWORD FASTCALL
|
||||||
DWORD FASTCALL IntGetImeCompatFlags(PTHREADINFO pti)
|
IntGetImeCompatFlags(_In_opt_ PTHREADINFO pti)
|
||||||
{
|
{
|
||||||
if (!pti)
|
if (!pti)
|
||||||
pti = PsGetCurrentThreadWin32Thread();
|
pti = PsGetCurrentThreadWin32Thread();
|
||||||
|
@ -49,8 +49,10 @@ DWORD FASTCALL IntGetImeCompatFlags(PTHREADINFO pti)
|
||||||
return pti->ppi->dwImeCompatFlags;
|
return pti->ppi->dwImeCompatFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: GetLangIdMatchLevel
|
UINT FASTCALL
|
||||||
UINT FASTCALL IntGetImeHotKeyLanguageScore(HKL hKL, LANGID HotKeyLangId)
|
IntGetImeHotKeyLanguageScore(
|
||||||
|
_In_ HKL hKL,
|
||||||
|
_In_ LANGID HotKeyLangId)
|
||||||
{
|
{
|
||||||
LCID lcid;
|
LCID lcid;
|
||||||
|
|
||||||
|
@ -63,7 +65,7 @@ UINT FASTCALL IntGetImeHotKeyLanguageScore(HKL hKL, LANGID HotKeyLangId)
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p\n", NtCurrentTeb());
|
ERR("Exception in IntGetImeHotKeyLanguageScore: TEB=%p, hKL=%p, HotKeyLangId=0x%04x\n", NtCurrentTeb(), hKL, HotKeyLangId);
|
||||||
lcid = MAKELCID(LANGID_NEUTRAL, SORT_DEFAULT);
|
lcid = MAKELCID(LANGID_NEUTRAL, SORT_DEFAULT);
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
@ -80,8 +82,8 @@ UINT FASTCALL IntGetImeHotKeyLanguageScore(HKL hKL, LANGID HotKeyLangId)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: GetActiveHKL
|
HKL FASTCALL
|
||||||
HKL FASTCALL IntGetActiveKeyboardLayout(VOID)
|
IntGetActiveKeyboardLayout(VOID)
|
||||||
{
|
{
|
||||||
PTHREADINFO pti;
|
PTHREADINFO pti;
|
||||||
|
|
||||||
|
@ -95,8 +97,8 @@ HKL FASTCALL IntGetActiveKeyboardLayout(VOID)
|
||||||
return UserGetKeyboardLayout(0);
|
return UserGetKeyboardLayout(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: GetHotKeyLangID
|
static LANGID FASTCALL
|
||||||
static LANGID FASTCALL IntGetImeHotKeyLangId(DWORD dwHotKeyId)
|
IntGetImeHotKeyLangId(_In_ DWORD dwHotKeyId)
|
||||||
{
|
{
|
||||||
#define IME_CHOTKEY 0x10
|
#define IME_CHOTKEY 0x10
|
||||||
#define IME_JHOTKEY 0x30
|
#define IME_JHOTKEY 0x30
|
||||||
|
@ -121,8 +123,10 @@ static LANGID FASTCALL IntGetImeHotKeyLangId(DWORD dwHotKeyId)
|
||||||
return LANGID_NEUTRAL;
|
return LANGID_NEUTRAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: AddImeHotKey
|
static VOID FASTCALL
|
||||||
static VOID FASTCALL IntAddImeHotKey(PIMEHOTKEY *ppList, PIMEHOTKEY pHotKey)
|
IntAddImeHotKey(
|
||||||
|
_In_ PIMEHOTKEY *ppList,
|
||||||
|
_In_ PIMEHOTKEY pHotKey)
|
||||||
{
|
{
|
||||||
PIMEHOTKEY pNode;
|
PIMEHOTKEY pNode;
|
||||||
|
|
||||||
|
@ -142,8 +146,10 @@ static VOID FASTCALL IntAddImeHotKey(PIMEHOTKEY *ppList, PIMEHOTKEY pHotKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: FindImeHotKeyByID
|
static PIMEHOTKEY FASTCALL
|
||||||
static PIMEHOTKEY FASTCALL IntGetImeHotKeyById(PIMEHOTKEY pList, DWORD dwHotKeyId)
|
IntGetImeHotKeyById(
|
||||||
|
_In_ PIMEHOTKEY pList,
|
||||||
|
_In_ DWORD dwHotKeyId)
|
||||||
{
|
{
|
||||||
PIMEHOTKEY pNode;
|
PIMEHOTKEY pNode;
|
||||||
for (pNode = pList; pNode; pNode = pNode->pNext)
|
for (pNode = pList; pNode; pNode = pNode->pNext)
|
||||||
|
@ -154,10 +160,13 @@ static PIMEHOTKEY FASTCALL IntGetImeHotKeyById(PIMEHOTKEY pList, DWORD dwHotKeyI
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: FindImeHotKeyByKeyWithLang
|
|
||||||
static PIMEHOTKEY APIENTRY
|
static PIMEHOTKEY APIENTRY
|
||||||
IntGetImeHotKeyByKeyAndLang(PIMEHOTKEY pList, UINT uModKeys, UINT uLeftRight,
|
IntGetImeHotKeyByKeyAndLang(
|
||||||
UINT uVirtualKey, LANGID TargetLangId)
|
_In_ PIMEHOTKEY pList,
|
||||||
|
_In_ UINT uModKeys,
|
||||||
|
_In_ UINT uLeftRight,
|
||||||
|
_In_ UINT uVirtualKey,
|
||||||
|
_In_ LANGID TargetLangId)
|
||||||
{
|
{
|
||||||
PIMEHOTKEY pNode;
|
PIMEHOTKEY pNode;
|
||||||
LANGID LangID;
|
LANGID LangID;
|
||||||
|
@ -186,8 +195,10 @@ IntGetImeHotKeyByKeyAndLang(PIMEHOTKEY pList, UINT uModKeys, UINT uLeftRight,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: DeleteImeHotKey
|
static VOID FASTCALL
|
||||||
static VOID FASTCALL IntDeleteImeHotKey(PIMEHOTKEY *ppList, PIMEHOTKEY pHotKey)
|
IntDeleteImeHotKey(
|
||||||
|
_Inout_ PIMEHOTKEY *ppList,
|
||||||
|
_In_ PIMEHOTKEY pHotKey)
|
||||||
{
|
{
|
||||||
PIMEHOTKEY pNode;
|
PIMEHOTKEY pNode;
|
||||||
|
|
||||||
|
@ -209,9 +220,12 @@ static VOID FASTCALL IntDeleteImeHotKey(PIMEHOTKEY *ppList, PIMEHOTKEY pHotKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: FindImeHotKeyByKey
|
static PIMEHOTKEY
|
||||||
PIMEHOTKEY
|
IntGetImeHotKeyByKey(
|
||||||
IntGetImeHotKeyByKey(PIMEHOTKEY pList, UINT uModKeys, UINT uLeftRight, UINT uVirtualKey)
|
_In_ PIMEHOTKEY pList,
|
||||||
|
_In_ UINT uModKeys,
|
||||||
|
_In_ UINT uLeftRight,
|
||||||
|
_In_ UINT uVirtualKey)
|
||||||
{
|
{
|
||||||
PIMEHOTKEY pNode, ret = NULL;
|
PIMEHOTKEY pNode, ret = NULL;
|
||||||
PTHREADINFO pti = GetW32ThreadInfo();
|
PTHREADINFO pti = GetW32ThreadInfo();
|
||||||
|
@ -271,8 +285,11 @@ IntGetImeHotKeyByKey(PIMEHOTKEY pList, UINT uModKeys, UINT uLeftRight, UINT uVir
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: CheckImeHotKey
|
static PIMEHOTKEY
|
||||||
PIMEHOTKEY IntCheckImeHotKey(PUSER_MESSAGE_QUEUE MessageQueue, UINT uVirtualKey, LPARAM lParam)
|
IntCheckImeHotKey(
|
||||||
|
_In_ const USER_MESSAGE_QUEUE *MessageQueue,
|
||||||
|
_In_ UINT uVirtualKey,
|
||||||
|
_In_ LPARAM lParam)
|
||||||
{
|
{
|
||||||
PIMEHOTKEY pHotKey;
|
PIMEHOTKEY pHotKey;
|
||||||
UINT uModifiers;
|
UINT uModifiers;
|
||||||
|
@ -322,8 +339,8 @@ PIMEHOTKEY IntCheckImeHotKey(PUSER_MESSAGE_QUEUE MessageQueue, UINT uVirtualKey,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: FreeImeHotKeys
|
VOID FASTCALL
|
||||||
VOID FASTCALL IntFreeImeHotKeys(VOID)
|
IntFreeImeHotKeys(VOID)
|
||||||
{
|
{
|
||||||
PIMEHOTKEY pNode, pNext;
|
PIMEHOTKEY pNode, pNext;
|
||||||
for (pNode = gpImeHotKeyList; pNode; pNode = pNext)
|
for (pNode = gpImeHotKeyList; pNode; pNode = pNext)
|
||||||
|
@ -334,9 +351,13 @@ VOID FASTCALL IntFreeImeHotKeys(VOID)
|
||||||
gpImeHotKeyList = NULL;
|
gpImeHotKeyList = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: SetImeHotKey
|
|
||||||
static BOOL APIENTRY
|
static BOOL APIENTRY
|
||||||
IntSetImeHotKey(DWORD dwHotKeyId, UINT uModifiers, UINT uVirtualKey, HKL hKL, DWORD dwAction)
|
IntSetImeHotKey(
|
||||||
|
_In_ DWORD dwHotKeyId,
|
||||||
|
_In_ UINT uModifiers,
|
||||||
|
_In_ UINT uVirtualKey,
|
||||||
|
_In_ HKL hKL,
|
||||||
|
_In_ DWORD dwAction)
|
||||||
{
|
{
|
||||||
PIMEHOTKEY pNode;
|
PIMEHOTKEY pNode;
|
||||||
LANGID LangId;
|
LANGID LangId;
|
||||||
|
@ -403,7 +424,11 @@ IntSetImeHotKey(DWORD dwHotKeyId, UINT uModifiers, UINT uVirtualKey, HKL hKL, DW
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL NTAPI
|
BOOL NTAPI
|
||||||
NtUserGetImeHotKey(DWORD dwHotKeyId, LPUINT lpuModifiers, LPUINT lpuVirtualKey, LPHKL lphKL)
|
NtUserGetImeHotKey(
|
||||||
|
_In_ DWORD dwHotKeyId,
|
||||||
|
_Out_ PUINT lpuModifiers,
|
||||||
|
_Out_ PUINT lpuVirtualKey,
|
||||||
|
_Out_ LPHKL lphKL)
|
||||||
{
|
{
|
||||||
PIMEHOTKEY pNode = NULL;
|
PIMEHOTKEY pNode = NULL;
|
||||||
|
|
||||||
|
@ -418,7 +443,7 @@ NtUserGetImeHotKey(DWORD dwHotKeyId, LPUINT lpuModifiers, LPUINT lpuVirtualKey,
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p, %p, %p\n", lpuModifiers, lpuVirtualKey, lphKL);
|
ERR("Exception in NtUserGetImeHotKey: %p, %p, %p\n", lpuModifiers, lpuVirtualKey, lphKL);
|
||||||
_SEH2_YIELD(goto Quit);
|
_SEH2_YIELD(goto Quit);
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
@ -436,7 +461,7 @@ NtUserGetImeHotKey(DWORD dwHotKeyId, LPUINT lpuModifiers, LPUINT lpuVirtualKey,
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p, %p, %p, %p\n", pNode, lpuModifiers, lpuVirtualKey, lphKL);
|
ERR("Exception in NtUserGetImeHotKey: %p, %p, %p, %p\n", pNode, lpuModifiers, lpuVirtualKey, lphKL);
|
||||||
pNode = NULL;
|
pNode = NULL;
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
@ -449,11 +474,11 @@ Quit:
|
||||||
BOOL
|
BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserSetImeHotKey(
|
NtUserSetImeHotKey(
|
||||||
DWORD dwHotKeyId,
|
_In_ DWORD dwHotKeyId,
|
||||||
UINT uModifiers,
|
_In_ UINT uModifiers,
|
||||||
UINT uVirtualKey,
|
_In_ UINT uVirtualKey,
|
||||||
HKL hKL,
|
_In_ HKL hKL,
|
||||||
DWORD dwAction)
|
_In_ DWORD dwAction)
|
||||||
{
|
{
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
UserEnterExclusive();
|
UserEnterExclusive();
|
||||||
|
@ -464,7 +489,9 @@ NtUserSetImeHotKey(
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserCheckImeHotKey(UINT uVirtualKey, LPARAM lParam)
|
NtUserCheckImeHotKey(
|
||||||
|
_In_ UINT uVirtualKey,
|
||||||
|
_In_ LPARAM lParam)
|
||||||
{
|
{
|
||||||
PIMEHOTKEY pNode;
|
PIMEHOTKEY pNode;
|
||||||
DWORD ret = INVALID_HOTKEY;
|
DWORD ret = INVALID_HOTKEY;
|
||||||
|
@ -483,8 +510,8 @@ Quit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: GetTopLevelWindow
|
PWND FASTCALL
|
||||||
PWND FASTCALL IntGetTopLevelWindow(PWND pwnd)
|
IntGetTopLevelWindow(_In_ PWND pwnd)
|
||||||
{
|
{
|
||||||
if (!pwnd)
|
if (!pwnd)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -495,8 +522,8 @@ PWND FASTCALL IntGetTopLevelWindow(PWND pwnd)
|
||||||
return pwnd;
|
return pwnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: AssociateInputContext
|
static HIMC FASTCALL
|
||||||
HIMC FASTCALL IntAssociateInputContext(PWND pWnd, PIMC pImc)
|
IntAssociateInputContext(_Inout_ PWND pWnd, _In_ PIMC pImc)
|
||||||
{
|
{
|
||||||
HIMC hOldImc = pWnd->hImc;
|
HIMC hOldImc = pWnd->hImc;
|
||||||
pWnd->hImc = (pImc ? UserHMGetHandle(pImc) : NULL);
|
pWnd->hImc = (pImc ? UserHMGetHandle(pImc) : NULL);
|
||||||
|
@ -505,7 +532,9 @@ HIMC FASTCALL IntAssociateInputContext(PWND pWnd, PIMC pImc)
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserSetThreadLayoutHandles(HKL hNewKL, HKL hOldKL)
|
NtUserSetThreadLayoutHandles(
|
||||||
|
_In_ HKL hNewKL,
|
||||||
|
_In_ HKL hOldKL)
|
||||||
{
|
{
|
||||||
PTHREADINFO pti;
|
PTHREADINFO pti;
|
||||||
PKL pOldKL, pNewKL;
|
PKL pOldKL, pNewKL;
|
||||||
|
@ -532,8 +561,11 @@ Quit:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: BuildHimcList
|
DWORD FASTCALL
|
||||||
DWORD FASTCALL UserBuildHimcList(PTHREADINFO pti, DWORD dwCount, HIMC *phList)
|
UserBuildHimcList(
|
||||||
|
_Inout_ PTHREADINFO pti,
|
||||||
|
_In_ DWORD dwCount,
|
||||||
|
_Inout_ HIMC *phList)
|
||||||
{
|
{
|
||||||
PIMC pIMC;
|
PIMC pIMC;
|
||||||
DWORD dwRealCount = 0;
|
DWORD dwRealCount = 0;
|
||||||
|
@ -566,8 +598,12 @@ DWORD FASTCALL UserBuildHimcList(PTHREADINFO pti, DWORD dwCount, HIMC *phList)
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT FASTCALL
|
UINT FASTCALL
|
||||||
IntImmProcessKey(PUSER_MESSAGE_QUEUE MessageQueue, PWND pWnd, UINT uMsg,
|
IntImmProcessKey(
|
||||||
WPARAM wParam, LPARAM lParam)
|
_In_ PUSER_MESSAGE_QUEUE MessageQueue,
|
||||||
|
_In_ PWND pWnd,
|
||||||
|
_In_ UINT uMsg,
|
||||||
|
_In_ WPARAM wParam,
|
||||||
|
_In_ LPARAM lParam)
|
||||||
{
|
{
|
||||||
UINT uVirtualKey, ret;
|
UINT uVirtualKey, ret;
|
||||||
DWORD dwHotKeyId;
|
DWORD dwHotKeyId;
|
||||||
|
@ -626,7 +662,12 @@ IntImmProcessKey(PUSER_MESSAGE_QUEUE MessageQueue, PWND pWnd, UINT uMsg,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!IS_IMM_MODE())
|
if (!IS_IMM_MODE())
|
||||||
|
{
|
||||||
|
if (dwHotKeyId != INVALID_HOTKEY)
|
||||||
|
WARN("!IS_IMM_MODE(): dwHotKeyId 0x%X\n", dwHotKeyId);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (dwHotKeyId == INVALID_HOTKEY)
|
if (dwHotKeyId == INVALID_HOTKEY)
|
||||||
{
|
{
|
||||||
|
@ -687,7 +728,11 @@ IntImmProcessKey(PUSER_MESSAGE_QUEUE MessageQueue, PWND pWnd, UINT uMsg,
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserBuildHimcList(DWORD dwThreadId, DWORD dwCount, HIMC *phList, LPDWORD pdwCount)
|
NtUserBuildHimcList(
|
||||||
|
_In_ DWORD dwThreadId,
|
||||||
|
_In_ DWORD dwCount,
|
||||||
|
_Out_ HIMC *phList,
|
||||||
|
_Out_ PDWORD pdwCount)
|
||||||
{
|
{
|
||||||
NTSTATUS ret = STATUS_UNSUCCESSFUL;
|
NTSTATUS ret = STATUS_UNSUCCESSFUL;
|
||||||
DWORD dwRealCount;
|
DWORD dwRealCount;
|
||||||
|
@ -725,7 +770,7 @@ NtUserBuildHimcList(DWORD dwThreadId, DWORD dwCount, HIMC *phList, LPDWORD pdwCo
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p, %p\n", phList, pdwCount);
|
ERR("Exception in NtUserBuildHimcList: %p, %p\n", phList, pdwCount);
|
||||||
_SEH2_YIELD(goto Quit);
|
_SEH2_YIELD(goto Quit);
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
@ -740,8 +785,8 @@ Quit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: SetConvMode
|
static VOID FASTCALL
|
||||||
static VOID FASTCALL UserSetImeConversionKeyState(PTHREADINFO pti, DWORD dwConversion)
|
UserSetImeConversionKeyState(PTHREADINFO pti, DWORD dwConversion)
|
||||||
{
|
{
|
||||||
HKL hKL;
|
HKL hKL;
|
||||||
LANGID LangID;
|
LANGID LangID;
|
||||||
|
@ -800,7 +845,10 @@ static VOID FASTCALL UserSetImeConversionKeyState(PTHREADINFO pti, DWORD dwConve
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserNotifyIMEStatus(HWND hwnd, BOOL fOpen, DWORD dwConversion)
|
NtUserNotifyIMEStatus(
|
||||||
|
_In_ HWND hwnd,
|
||||||
|
_In_ BOOL fOpen,
|
||||||
|
_In_ DWORD dwConversion)
|
||||||
{
|
{
|
||||||
PWND pwnd;
|
PWND pwnd;
|
||||||
PTHREADINFO pti;
|
PTHREADINFO pti;
|
||||||
|
@ -816,7 +864,10 @@ NtUserNotifyIMEStatus(HWND hwnd, BOOL fOpen, DWORD dwConversion)
|
||||||
|
|
||||||
pwnd = ValidateHwndNoErr(hwnd);
|
pwnd = ValidateHwndNoErr(hwnd);
|
||||||
if (!pwnd)
|
if (!pwnd)
|
||||||
|
{
|
||||||
|
ERR("Invalid HWND %p\n", hwnd);
|
||||||
goto Quit;
|
goto Quit;
|
||||||
|
}
|
||||||
|
|
||||||
pti = pwnd->head.pti;
|
pti = pwnd->head.pti;
|
||||||
if (!pti || !gptiForeground)
|
if (!pti || !gptiForeground)
|
||||||
|
@ -849,8 +900,7 @@ Quit:
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserDisableThreadIme(
|
NtUserDisableThreadIme(_In_ DWORD dwThreadID)
|
||||||
DWORD dwThreadID)
|
|
||||||
{
|
{
|
||||||
PTHREADINFO pti, ptiCurrent;
|
PTHREADINFO pti, ptiCurrent;
|
||||||
PPROCESSINFO ppi;
|
PPROCESSINFO ppi;
|
||||||
|
@ -918,7 +968,7 @@ Quit:
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserGetAppImeLevel(HWND hWnd)
|
NtUserGetAppImeLevel(_In_ HWND hWnd)
|
||||||
{
|
{
|
||||||
DWORD ret = 0;
|
DWORD ret = 0;
|
||||||
PWND pWnd;
|
PWND pWnd;
|
||||||
|
@ -928,7 +978,10 @@ NtUserGetAppImeLevel(HWND hWnd)
|
||||||
|
|
||||||
pWnd = ValidateHwndNoErr(hWnd);
|
pWnd = ValidateHwndNoErr(hWnd);
|
||||||
if (!pWnd)
|
if (!pWnd)
|
||||||
|
{
|
||||||
|
ERR("Invalid HWND %p\n", hWnd);
|
||||||
goto Quit;
|
goto Quit;
|
||||||
|
}
|
||||||
|
|
||||||
if (!IS_IMM_MODE())
|
if (!IS_IMM_MODE())
|
||||||
{
|
{
|
||||||
|
@ -955,7 +1008,10 @@ UserGetImeInfoEx(
|
||||||
PKL pkl, pklHead;
|
PKL pkl, pklHead;
|
||||||
|
|
||||||
if (!pWinSta || !gspklBaseLayout)
|
if (!pWinSta || !gspklBaseLayout)
|
||||||
|
{
|
||||||
|
ERR("pWinSta:%p, gspklBaseLayout:%p\n", pWinSta, gspklBaseLayout);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
pkl = pklHead = gspklBaseLayout;
|
pkl = pklHead = gspklBaseLayout;
|
||||||
|
|
||||||
|
@ -978,6 +1034,8 @@ UserGetImeInfoEx(
|
||||||
|
|
||||||
pkl = pkl->pklNext;
|
pkl = pkl->pklNext;
|
||||||
} while (pkl != pklHead);
|
} while (pkl != pklHead);
|
||||||
|
|
||||||
|
ERR("HKL not found: %p\n", pInfoEx->hkl);
|
||||||
}
|
}
|
||||||
else if (SearchType == ImeInfoExImeFileName)
|
else if (SearchType == ImeInfoExImeFileName)
|
||||||
{
|
{
|
||||||
|
@ -993,6 +1051,8 @@ UserGetImeInfoEx(
|
||||||
|
|
||||||
pkl = pkl->pklNext;
|
pkl = pkl->pklNext;
|
||||||
} while (pkl != pklHead);
|
} while (pkl != pklHead);
|
||||||
|
|
||||||
|
ERR("wszImeFile not found: '%S'\n", pInfoEx->wszImeFile);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1028,7 +1088,7 @@ NtUserGetImeInfoEx(
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p\n", pImeInfoEx);
|
ERR("Exception in NtUserGetImeInfoEx: %p\n", pImeInfoEx);
|
||||||
_SEH2_YIELD(goto Quit);
|
_SEH2_YIELD(goto Quit);
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
@ -1045,7 +1105,7 @@ NtUserGetImeInfoEx(
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p\n", pImeInfoEx);
|
ERR("Exception in NtUserGetImeInfoEx: %p\n", pImeInfoEx);
|
||||||
ret = FALSE;
|
ret = FALSE;
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
@ -1057,7 +1117,9 @@ Quit:
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserSetAppImeLevel(HWND hWnd, DWORD dwLevel)
|
NtUserSetAppImeLevel(
|
||||||
|
_In_ HWND hWnd,
|
||||||
|
_In_ DWORD dwLevel)
|
||||||
{
|
{
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
PWND pWnd;
|
PWND pWnd;
|
||||||
|
@ -1074,7 +1136,10 @@ NtUserSetAppImeLevel(HWND hWnd, DWORD dwLevel)
|
||||||
|
|
||||||
pWnd = ValidateHwndNoErr(hWnd);
|
pWnd = ValidateHwndNoErr(hWnd);
|
||||||
if (!pWnd)
|
if (!pWnd)
|
||||||
|
{
|
||||||
|
ERR("Invalid HWND: %p\n", hWnd);
|
||||||
goto Quit;
|
goto Quit;
|
||||||
|
}
|
||||||
|
|
||||||
pti = PsGetCurrentThreadWin32Thread();
|
pti = PsGetCurrentThreadWin32Thread();
|
||||||
if (pWnd->head.pti->ppi == pti->ppi)
|
if (pWnd->head.pti->ppi == pti->ppi)
|
||||||
|
@ -1085,7 +1150,6 @@ Quit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: SetImeInfoEx
|
|
||||||
BOOL FASTCALL
|
BOOL FASTCALL
|
||||||
UserSetImeInfoEx(
|
UserSetImeInfoEx(
|
||||||
_Inout_ PWINSTATION_OBJECT pWinSta,
|
_Inout_ PWINSTATION_OBJECT pWinSta,
|
||||||
|
@ -1094,7 +1158,10 @@ UserSetImeInfoEx(
|
||||||
PKL pklHead, pkl;
|
PKL pklHead, pkl;
|
||||||
|
|
||||||
if (!pWinSta || !gspklBaseLayout)
|
if (!pWinSta || !gspklBaseLayout)
|
||||||
|
{
|
||||||
|
ERR("pWinSta:%p, gspklBaseLayout:%p\n", pWinSta, gspklBaseLayout);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
pkl = pklHead = gspklBaseLayout;
|
pkl = pklHead = gspklBaseLayout;
|
||||||
|
|
||||||
|
@ -1118,12 +1185,13 @@ UserSetImeInfoEx(
|
||||||
return TRUE;
|
return TRUE;
|
||||||
} while (pkl != pklHead);
|
} while (pkl != pklHead);
|
||||||
|
|
||||||
|
ERR("HKL not found: %p\n", pImeInfoEx->hkl);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserSetImeInfoEx(PIMEINFOEX pImeInfoEx)
|
NtUserSetImeInfoEx(_In_ const IMEINFOEX *pImeInfoEx)
|
||||||
{
|
{
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
IMEINFOEX ImeInfoEx;
|
IMEINFOEX ImeInfoEx;
|
||||||
|
@ -1144,7 +1212,7 @@ NtUserSetImeInfoEx(PIMEINFOEX pImeInfoEx)
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p\n", pImeInfoEx);
|
ERR("Exception in NtUserSetImeInfoEx: pImeInfoEx=%p\n", pImeInfoEx);
|
||||||
_SEH2_YIELD(goto Quit);
|
_SEH2_YIELD(goto Quit);
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
@ -1158,8 +1226,8 @@ Quit:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Choose the preferred owner of the IME window.
|
// Choose the preferred owner of the IME window.
|
||||||
// Win: ImeSetFutureOwner
|
VOID FASTCALL
|
||||||
VOID FASTCALL IntImeSetFutureOwner(PWND pImeWnd, PWND pwndOwner)
|
IntImeSetFutureOwner(PWND pImeWnd, PWND pwndOwner)
|
||||||
{
|
{
|
||||||
PWND pwndNode, pwndNextOwner, pwndParent, pwndSibling;
|
PWND pwndNode, pwndNextOwner, pwndParent, pwndSibling;
|
||||||
PTHREADINFO pti = pImeWnd->head.pti;
|
PTHREADINFO pti = pImeWnd->head.pti;
|
||||||
|
@ -1215,8 +1283,8 @@ VOID FASTCALL IntImeSetFutureOwner(PWND pImeWnd, PWND pwndOwner)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the last non-IME-like top-most window on the desktop.
|
// Get the last non-IME-like top-most window on the desktop.
|
||||||
// Win: GetLastTopMostWindowNoIME
|
static PWND FASTCALL
|
||||||
PWND FASTCALL IntGetLastTopMostWindowNoIME(PWND pImeWnd)
|
IntGetLastTopMostWindowNoIME(_In_ PWND pImeWnd)
|
||||||
{
|
{
|
||||||
PWND pwndNode, pwndOwner, pwndLastTopMost = NULL;
|
PWND pwndNode, pwndOwner, pwndLastTopMost = NULL;
|
||||||
BOOL bFound;
|
BOOL bFound;
|
||||||
|
@ -1252,8 +1320,8 @@ PWND FASTCALL IntGetLastTopMostWindowNoIME(PWND pImeWnd)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adjust the ordering of the windows around the IME window.
|
// Adjust the ordering of the windows around the IME window.
|
||||||
// Win: ImeSetTopMost
|
static VOID FASTCALL
|
||||||
VOID FASTCALL IntImeSetTopMost(PWND pImeWnd, BOOL bTopMost, PWND pwndInsertBefore)
|
IntImeSetTopMost(_In_ PWND pImeWnd, _In_ BOOL bTopMost, _In_ PWND pwndInsertBefore)
|
||||||
{
|
{
|
||||||
PWND pwndParent, pwndChild, pwndNode, pwndNext, pwndInsertAfter = NULL;
|
PWND pwndParent, pwndChild, pwndNode, pwndNext, pwndInsertAfter = NULL;
|
||||||
PWND pwndInsertAfterSave;
|
PWND pwndInsertAfterSave;
|
||||||
|
@ -1342,8 +1410,8 @@ VOID FASTCALL IntImeSetTopMost(PWND pImeWnd, BOOL bTopMost, PWND pwndInsertBefor
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make the IME window top-most if necessary.
|
// Make the IME window top-most if necessary.
|
||||||
// Win: ImeCheckTopmost
|
static VOID FASTCALL
|
||||||
VOID FASTCALL IntImeCheckTopmost(PWND pImeWnd)
|
IntImeCheckTopmost(_In_ PWND pImeWnd)
|
||||||
{
|
{
|
||||||
BOOL bTopMost;
|
BOOL bTopMost;
|
||||||
PWND pwndOwner = pImeWnd->spwndOwner, pwndInsertBefore = NULL;
|
PWND pwndOwner = pImeWnd->spwndOwner, pwndInsertBefore = NULL;
|
||||||
|
@ -1359,7 +1427,9 @@ VOID FASTCALL IntImeCheckTopmost(PWND pImeWnd)
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL NTAPI
|
BOOL NTAPI
|
||||||
NtUserSetImeOwnerWindow(HWND hImeWnd, HWND hwndFocus)
|
NtUserSetImeOwnerWindow(
|
||||||
|
_In_ HWND hImeWnd,
|
||||||
|
_In_opt_ HWND hwndFocus)
|
||||||
{
|
{
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
PWND pImeWnd, pwndFocus, pwndTopLevel, pwndNode, pwndActive;
|
PWND pImeWnd, pwndFocus, pwndTopLevel, pwndNode, pwndActive;
|
||||||
|
@ -1375,7 +1445,10 @@ NtUserSetImeOwnerWindow(HWND hImeWnd, HWND hwndFocus)
|
||||||
|
|
||||||
pImeWnd = ValidateHwndNoErr(hImeWnd);
|
pImeWnd = ValidateHwndNoErr(hImeWnd);
|
||||||
if (!pImeWnd || pImeWnd->fnid != FNID_IME)
|
if (!pImeWnd || pImeWnd->fnid != FNID_IME)
|
||||||
|
{
|
||||||
|
ERR("Not IME window: %p\n", hImeWnd);
|
||||||
goto Quit;
|
goto Quit;
|
||||||
|
}
|
||||||
|
|
||||||
pwndFocus = ValidateHwndNoErr(hwndFocus);
|
pwndFocus = ValidateHwndNoErr(hwndFocus);
|
||||||
if (pwndFocus)
|
if (pwndFocus)
|
||||||
|
@ -1425,10 +1498,11 @@ Quit:
|
||||||
}
|
}
|
||||||
|
|
||||||
PVOID
|
PVOID
|
||||||
AllocInputContextObject(PDESKTOP pDesk,
|
AllocInputContextObject(
|
||||||
PTHREADINFO pti,
|
_In_ PDESKTOP pDesk,
|
||||||
SIZE_T Size,
|
_In_ PTHREADINFO pti,
|
||||||
PVOID* HandleOwner)
|
_In_ SIZE_T Size,
|
||||||
|
_Out_ PVOID* HandleOwner)
|
||||||
{
|
{
|
||||||
PTHRDESKHEAD ObjHead;
|
PTHRDESKHEAD ObjHead;
|
||||||
|
|
||||||
|
@ -1454,7 +1528,8 @@ AllocInputContextObject(PDESKTOP pDesk,
|
||||||
return ObjHead;
|
return ObjHead;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID UserFreeInputContext(PVOID Object)
|
VOID
|
||||||
|
UserFreeInputContext(_In_opt_ PVOID Object)
|
||||||
{
|
{
|
||||||
PTHRDESKHEAD ObjHead = Object;
|
PTHRDESKHEAD ObjHead = Object;
|
||||||
PDESKTOP pDesk = ObjHead->rpdesk;
|
PDESKTOP pDesk = ObjHead->rpdesk;
|
||||||
|
@ -1481,7 +1556,8 @@ VOID UserFreeInputContext(PVOID Object)
|
||||||
IntDereferenceThreadInfo(pti);
|
IntDereferenceThreadInfo(pti);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN UserDestroyInputContext(PVOID Object)
|
BOOLEAN
|
||||||
|
UserDestroyInputContext(_In_opt_ PVOID Object)
|
||||||
{
|
{
|
||||||
PIMC pIMC = Object;
|
PIMC pIMC = Object;
|
||||||
if (!pIMC)
|
if (!pIMC)
|
||||||
|
@ -1492,8 +1568,8 @@ BOOLEAN UserDestroyInputContext(PVOID Object)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: DestroyInputContext
|
static BOOL
|
||||||
BOOL IntDestroyInputContext(PIMC pIMC)
|
IntDestroyInputContext(_In_ PIMC pIMC)
|
||||||
{
|
{
|
||||||
HIMC hIMC = UserHMGetHandle(pIMC);
|
HIMC hIMC = UserHMGetHandle(pIMC);
|
||||||
PTHREADINFO pti = pIMC->head.pti;
|
PTHREADINFO pti = pIMC->head.pti;
|
||||||
|
@ -1532,7 +1608,8 @@ BOOL IntDestroyInputContext(PIMC pIMC)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL NTAPI NtUserDestroyInputContext(HIMC hIMC)
|
BOOL NTAPI
|
||||||
|
NtUserDestroyInputContext(_In_ HIMC hIMC)
|
||||||
{
|
{
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
PIMC pIMC;
|
PIMC pIMC;
|
||||||
|
@ -1554,8 +1631,8 @@ Quit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: CreateInputContext
|
PIMC FASTCALL
|
||||||
PIMC FASTCALL UserCreateInputContext(ULONG_PTR dwClientImcData)
|
UserCreateInputContext(_In_ ULONG_PTR dwClientImcData)
|
||||||
{
|
{
|
||||||
PIMC pIMC;
|
PIMC pIMC;
|
||||||
PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
|
PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
|
||||||
|
@ -1603,7 +1680,7 @@ PIMC FASTCALL UserCreateInputContext(ULONG_PTR dwClientImcData)
|
||||||
|
|
||||||
HIMC
|
HIMC
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserCreateInputContext(ULONG_PTR dwClientImcData)
|
NtUserCreateInputContext(_In_ ULONG_PTR dwClientImcData)
|
||||||
{
|
{
|
||||||
PIMC pIMC;
|
PIMC pIMC;
|
||||||
HIMC ret = NULL;
|
HIMC ret = NULL;
|
||||||
|
@ -1632,8 +1709,8 @@ Quit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: AssociateInputContextEx
|
static DWORD FASTCALL
|
||||||
DWORD FASTCALL IntAssociateInputContextEx(PWND pWnd, PIMC pIMC, DWORD dwFlags)
|
IntAssociateInputContextEx(_In_ PWND pWnd, _In_ PIMC pIMC, _In_ DWORD dwFlags)
|
||||||
{
|
{
|
||||||
DWORD ret = 0;
|
DWORD ret = 0;
|
||||||
PWINDOWLIST pwl;
|
PWINDOWLIST pwl;
|
||||||
|
@ -1699,7 +1776,10 @@ DWORD FASTCALL IntAssociateInputContextEx(PWND pWnd, PIMC pIMC, DWORD dwFlags)
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserAssociateInputContext(HWND hWnd, HIMC hIMC, DWORD dwFlags)
|
NtUserAssociateInputContext(
|
||||||
|
_In_ HWND hWnd,
|
||||||
|
_In_opt_ HIMC hIMC,
|
||||||
|
_In_ DWORD dwFlags)
|
||||||
{
|
{
|
||||||
DWORD ret = 2;
|
DWORD ret = 2;
|
||||||
PWND pWnd;
|
PWND pWnd;
|
||||||
|
@ -1715,7 +1795,10 @@ NtUserAssociateInputContext(HWND hWnd, HIMC hIMC, DWORD dwFlags)
|
||||||
|
|
||||||
pWnd = ValidateHwndNoErr(hWnd);
|
pWnd = ValidateHwndNoErr(hWnd);
|
||||||
if (!pWnd)
|
if (!pWnd)
|
||||||
|
{
|
||||||
|
ERR("Invalid HWND: %p\n", hWnd);
|
||||||
goto Quit;
|
goto Quit;
|
||||||
|
}
|
||||||
|
|
||||||
pIMC = (hIMC ? UserGetObjectNoErr(gHandleTable, hIMC, TYPE_INPUTCONTEXT) : NULL);
|
pIMC = (hIMC ? UserGetObjectNoErr(gHandleTable, hIMC, TYPE_INPUTCONTEXT) : NULL);
|
||||||
ret = IntAssociateInputContextEx(pWnd, pIMC, dwFlags);
|
ret = IntAssociateInputContextEx(pWnd, pIMC, dwFlags);
|
||||||
|
@ -1725,8 +1808,8 @@ Quit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: UpdateInputContext
|
static BOOL FASTCALL
|
||||||
BOOL FASTCALL UserUpdateInputContext(PIMC pIMC, DWORD dwType, DWORD_PTR dwValue)
|
UserUpdateInputContext(_In_ PIMC pIMC, _In_ DWORD dwType, _In_ DWORD_PTR dwValue)
|
||||||
{
|
{
|
||||||
PTHREADINFO pti = GetW32ThreadInfo();
|
PTHREADINFO pti = GetW32ThreadInfo();
|
||||||
PTHREADINFO ptiIMC = pIMC->head.pti;
|
PTHREADINFO ptiIMC = pIMC->head.pti;
|
||||||
|
@ -1751,6 +1834,7 @@ BOOL FASTCALL UserUpdateInputContext(PIMC pIMC, DWORD dwType, DWORD_PTR dwValue)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
ERR("Unhandled dwType: %lu\n", dwType);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1777,7 +1861,10 @@ NtUserUpdateInputContext(
|
||||||
|
|
||||||
pIMC = UserGetObject(gHandleTable, hIMC, TYPE_INPUTCONTEXT);
|
pIMC = UserGetObject(gHandleTable, hIMC, TYPE_INPUTCONTEXT);
|
||||||
if (!pIMC)
|
if (!pIMC)
|
||||||
|
{
|
||||||
|
ERR("Invalid HIMC %p\n", hIMC);
|
||||||
goto Quit;
|
goto Quit;
|
||||||
|
}
|
||||||
|
|
||||||
ret = UserUpdateInputContext(pIMC, dwType, dwValue);
|
ret = UserUpdateInputContext(pIMC, dwType, dwValue);
|
||||||
|
|
||||||
|
@ -1801,7 +1888,10 @@ NtUserQueryInputContext(HIMC hIMC, DWORD dwType)
|
||||||
|
|
||||||
pIMC = UserGetObject(gHandleTable, hIMC, TYPE_INPUTCONTEXT);
|
pIMC = UserGetObject(gHandleTable, hIMC, TYPE_INPUTCONTEXT);
|
||||||
if (!pIMC)
|
if (!pIMC)
|
||||||
|
{
|
||||||
|
ERR("Invalid HIMC %p\n", hIMC);
|
||||||
goto Quit;
|
goto Quit;
|
||||||
|
}
|
||||||
|
|
||||||
ptiIMC = pIMC->head.pti;
|
ptiIMC = pIMC->head.pti;
|
||||||
|
|
||||||
|
@ -1839,8 +1929,6 @@ Quit:
|
||||||
|
|
||||||
// Searchs a non-IME-related window of the same thread of pwndTarget,
|
// Searchs a non-IME-related window of the same thread of pwndTarget,
|
||||||
// other than pwndTarget, around pwndParent. Returns TRUE if found.
|
// other than pwndTarget, around pwndParent. Returns TRUE if found.
|
||||||
//
|
|
||||||
// Win: IsChildSameThread
|
|
||||||
BOOL IntFindNonImeRelatedWndOfSameThread(PWND pwndParent, PWND pwndTarget)
|
BOOL IntFindNonImeRelatedWndOfSameThread(PWND pwndParent, PWND pwndTarget)
|
||||||
{
|
{
|
||||||
PWND pwnd, pwndOwner, pwndNode;
|
PWND pwnd, pwndOwner, pwndNode;
|
||||||
|
@ -1916,8 +2004,8 @@ BOOL IntFindNonImeRelatedWndOfSameThread(PWND pwndParent, PWND pwndTarget)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determines whether the target window needs the IME window.
|
// Determines whether the target window needs the IME window.
|
||||||
// Win: WantImeWindow(pwndParent, pwndTarget)
|
BOOL FASTCALL
|
||||||
BOOL FASTCALL IntWantImeWindow(PWND pwndTarget)
|
IntWantImeWindow(_In_ PWND pwndTarget)
|
||||||
{
|
{
|
||||||
PDESKTOP rpdesk;
|
PDESKTOP rpdesk;
|
||||||
PWINSTATION_OBJECT rpwinstaParent;
|
PWINSTATION_OBJECT rpwinstaParent;
|
||||||
|
@ -1956,8 +2044,10 @@ BOOL FASTCALL IntWantImeWindow(PWND pwndTarget)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the default IME window for the target window.
|
// Create the default IME window for the target window.
|
||||||
// Win: xxxCreateDefaultImeWindow(pwndTarget, ATOM, hInst)
|
PWND FASTCALL
|
||||||
PWND FASTCALL co_IntCreateDefaultImeWindow(PWND pwndTarget, HINSTANCE hInst)
|
co_IntCreateDefaultImeWindow(
|
||||||
|
_In_ PWND pwndTarget,
|
||||||
|
_In_ HINSTANCE hInst)
|
||||||
{
|
{
|
||||||
LARGE_UNICODE_STRING WindowName;
|
LARGE_UNICODE_STRING WindowName;
|
||||||
UNICODE_STRING ClassName;
|
UNICODE_STRING ClassName;
|
||||||
|
@ -2009,7 +2099,7 @@ PWND FASTCALL co_IntCreateDefaultImeWindow(PWND pwndTarget, HINSTANCE hInst)
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p\n", pimeui);
|
ERR("Exception in co_IntCreateDefaultImeWindow: %p\n", pimeui);
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
}
|
}
|
||||||
|
@ -2019,8 +2109,10 @@ PWND FASTCALL co_IntCreateDefaultImeWindow(PWND pwndTarget, HINSTANCE hInst)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determines whether the system can destroy the default IME window for the target child window.
|
// Determines whether the system can destroy the default IME window for the target child window.
|
||||||
// Win: ImeCanDestroyDefIMEforChild
|
BOOL FASTCALL
|
||||||
BOOL FASTCALL IntImeCanDestroyDefIMEforChild(PWND pImeWnd, PWND pwndTarget)
|
IntImeCanDestroyDefIMEforChild(
|
||||||
|
_In_ PWND pImeWnd,
|
||||||
|
_In_ PWND pwndTarget)
|
||||||
{
|
{
|
||||||
PWND pwndNode;
|
PWND pwndNode;
|
||||||
PIMEUI pimeui;
|
PIMEUI pimeui;
|
||||||
|
@ -2040,7 +2132,7 @@ BOOL FASTCALL IntImeCanDestroyDefIMEforChild(PWND pImeWnd, PWND pwndTarget)
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p\n", pimeui);
|
ERR("Exception in IntImeCanDestroyDefIMEforChild: %p\n", pimeui);
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
|
||||||
|
@ -2064,8 +2156,10 @@ BOOL FASTCALL IntImeCanDestroyDefIMEforChild(PWND pImeWnd, PWND pwndTarget)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determines whether the system can destroy the default IME window for the non-child target window.
|
// Determines whether the system can destroy the default IME window for the non-child target window.
|
||||||
// Win: ImeCanDestroyDefIME
|
BOOL FASTCALL
|
||||||
BOOL FASTCALL IntImeCanDestroyDefIME(PWND pImeWnd, PWND pwndTarget)
|
IntImeCanDestroyDefIME(
|
||||||
|
_In_ PWND pImeWnd,
|
||||||
|
_In_ PWND pwndTarget)
|
||||||
{
|
{
|
||||||
PWND pwndNode;
|
PWND pwndNode;
|
||||||
PIMEUI pimeui;
|
PIMEUI pimeui;
|
||||||
|
@ -2085,7 +2179,7 @@ BOOL FASTCALL IntImeCanDestroyDefIME(PWND pImeWnd, PWND pwndTarget)
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p\n", pimeui);
|
ERR("Exception in IntImeCanDestroyDefIME: %p\n", pimeui);
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
|
||||||
|
@ -2128,8 +2222,10 @@ BOOL FASTCALL IntImeCanDestroyDefIME(PWND pImeWnd, PWND pwndTarget)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update IMEUI.fShowStatus flags and Send the WM_IME_NOTIFY messages.
|
// Update IMEUI.fShowStatus flags and Send the WM_IME_NOTIFY messages.
|
||||||
// Win: xxxCheckImeShowStatus
|
BOOL FASTCALL
|
||||||
BOOL FASTCALL IntCheckImeShowStatus(PWND pwndIme, PTHREADINFO pti)
|
IntCheckImeShowStatus(
|
||||||
|
_In_ PWND pwndIme,
|
||||||
|
_In_ PTHREADINFO pti)
|
||||||
{
|
{
|
||||||
BOOL ret = FALSE, bDifferent;
|
BOOL ret = FALSE, bDifferent;
|
||||||
PWINDOWLIST pwl;
|
PWINDOWLIST pwl;
|
||||||
|
@ -2194,7 +2290,7 @@ BOOL FASTCALL IntCheckImeShowStatus(PWND pwndIme, PTHREADINFO pti)
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p\n", pimeui);
|
ERR("Exception in IntCheckImeShowStatus: %p\n", pimeui);
|
||||||
pwndIMC = NULL;
|
pwndIMC = NULL;
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
@ -2225,7 +2321,12 @@ BOOL FASTCALL IntCheckImeShowStatus(PWND pwndIme, PTHREADINFO pti)
|
||||||
|
|
||||||
// Send a UI message.
|
// Send a UI message.
|
||||||
LRESULT FASTCALL
|
LRESULT FASTCALL
|
||||||
IntSendMessageToUI(PTHREADINFO ptiIME, PIMEUI pimeui, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
IntSendMessageToUI(
|
||||||
|
_In_ PTHREADINFO ptiIME,
|
||||||
|
_In_ PIMEUI pimeui,
|
||||||
|
_In_ UINT uMsg,
|
||||||
|
_In_ WPARAM wParam,
|
||||||
|
_In_ LPARAM lParam)
|
||||||
{
|
{
|
||||||
PWND pwndUI;
|
PWND pwndUI;
|
||||||
LRESULT ret = 0;
|
LRESULT ret = 0;
|
||||||
|
@ -2249,7 +2350,7 @@ IntSendMessageToUI(PTHREADINFO ptiIME, PIMEUI pimeui, UINT uMsg, WPARAM wParam,
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p\n", pimeui);
|
ERR("Exception in IntSendMessageToUI: %p\n", pimeui);
|
||||||
pwndUI = NULL;
|
pwndUI = NULL;
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
@ -2266,7 +2367,7 @@ IntSendMessageToUI(PTHREADINFO ptiIME, PIMEUI pimeui, UINT uMsg, WPARAM wParam,
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p\n", pimeui);
|
ERR("Exception in IntSendMessageToUI: %p\n", pimeui);
|
||||||
_SEH2_YIELD(goto Quit);
|
_SEH2_YIELD(goto Quit);
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
@ -2291,7 +2392,7 @@ IntSendMessageToUI(PTHREADINFO ptiIME, PIMEUI pimeui, UINT uMsg, WPARAM wParam,
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p\n", pimeui);
|
ERR("Exception in IntSendMessageToUI: %p\n", pimeui);
|
||||||
_SEH2_YIELD(goto Quit);
|
_SEH2_YIELD(goto Quit);
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
@ -2305,7 +2406,6 @@ Quit:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the open status notification.
|
// Send the open status notification.
|
||||||
// Win: xxxSendOpenStatusNotify
|
|
||||||
VOID FASTCALL
|
VOID FASTCALL
|
||||||
IntSendOpenStatusNotify(PTHREADINFO ptiIME, PIMEUI pimeui, PWND pWnd, BOOL bOpen)
|
IntSendOpenStatusNotify(PTHREADINFO ptiIME, PIMEUI pimeui, PWND pWnd, BOOL bOpen)
|
||||||
{
|
{
|
||||||
|
@ -2326,7 +2426,8 @@ IntSendOpenStatusNotify(PTHREADINFO ptiIME, PIMEUI pimeui, PWND pWnd, BOOL bOpen
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the IME status and send a notification.
|
// Update the IME status and send a notification.
|
||||||
VOID FASTCALL IntNotifyImeShowStatus(PWND pImeWnd)
|
VOID FASTCALL
|
||||||
|
IntNotifyImeShowStatus(_In_ PWND pImeWnd)
|
||||||
{
|
{
|
||||||
PIMEUI pimeui;
|
PIMEUI pimeui;
|
||||||
PWND pWnd;
|
PWND pWnd;
|
||||||
|
@ -2365,7 +2466,8 @@ VOID FASTCALL IntNotifyImeShowStatus(PWND pImeWnd)
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
ERR("%p, %p\n", pImeWnd, pimeui);
|
ERR("Exception in IntNotifyImeShowStatus: %p, %p, %p, %d, %d\n",
|
||||||
|
pImeWnd, pimeui, ptiIME, SafeImeUI.fCtrlShowStatus, gfIMEShowStatus);
|
||||||
|
|
||||||
if (pti != ptiIME)
|
if (pti != ptiIME)
|
||||||
KeDetachProcess();
|
KeDetachProcess();
|
||||||
|
@ -2385,8 +2487,10 @@ VOID FASTCALL IntNotifyImeShowStatus(PWND pImeWnd)
|
||||||
IntCheckImeShowStatus(pImeWnd, NULL);
|
IntCheckImeShowStatus(pImeWnd, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: xxxBroadcastImeShowStatusChange
|
BOOL FASTCALL
|
||||||
BOOL FASTCALL IntBroadcastImeShowStatusChange(PWND pImeWnd, BOOL bShow)
|
IntBroadcastImeShowStatusChange(
|
||||||
|
_In_ PWND pImeWnd,
|
||||||
|
_In_ BOOL bShow)
|
||||||
{
|
{
|
||||||
if (gfIMEShowStatus == bShow || !IS_IMM_MODE())
|
if (gfIMEShowStatus == bShow || !IS_IMM_MODE())
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -2396,11 +2500,9 @@ BOOL FASTCALL IntBroadcastImeShowStatusChange(PWND pImeWnd, BOOL bShow)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Win: xxxCheckImeShowStatusInThread */
|
VOID FASTCALL
|
||||||
VOID FASTCALL IntCheckImeShowStatusInThread(PWND pImeWnd)
|
IntCheckImeShowStatusInThread(_In_ PWND pImeWnd)
|
||||||
{
|
{
|
||||||
if (IS_IMM_MODE() && !(pImeWnd->state2 & WNDS2_INDESTROY))
|
if (IS_IMM_MODE() && !(pImeWnd->state2 & WNDS2_INDESTROY))
|
||||||
IntCheckImeShowStatus(pImeWnd, pImeWnd->head.pti);
|
IntCheckImeShowStatus(pImeWnd, pImeWnd->head.pti);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EOF */
|
|
||||||
|
|
|
@ -83,7 +83,12 @@ VOID NTAPI UserProcessMouseInput(PMOUSE_INPUT_DATA pMouseInputData);
|
||||||
BOOL NTAPI UserSendMouseInput(MOUSEINPUT *pMouseInput, BOOL bInjected);
|
BOOL NTAPI UserSendMouseInput(MOUSEINPUT *pMouseInput, BOOL bInjected);
|
||||||
|
|
||||||
/* IMM */
|
/* IMM */
|
||||||
UINT FASTCALL IntImmProcessKey(PUSER_MESSAGE_QUEUE, PWND, UINT, WPARAM, LPARAM);
|
UINT FASTCALL IntImmProcessKey(
|
||||||
|
_In_ PUSER_MESSAGE_QUEUE MessageQueue,
|
||||||
|
_In_ PWND pWnd,
|
||||||
|
_In_ UINT uMsg,
|
||||||
|
_In_ WPARAM wParam,
|
||||||
|
_In_ LPARAM lParam);
|
||||||
VOID FASTCALL IntFreeImeHotKeys(VOID);
|
VOID FASTCALL IntFreeImeHotKeys(VOID);
|
||||||
|
|
||||||
extern DWORD gSystemFS;
|
extern DWORD gSystemFS;
|
||||||
|
|
|
@ -170,9 +170,15 @@ BOOL FASTCALL GetLayeredStatus(PWND pWnd);
|
||||||
|
|
||||||
/************** INPUT CONTEXT **************/
|
/************** INPUT CONTEXT **************/
|
||||||
|
|
||||||
PIMC FASTCALL UserCreateInputContext(ULONG_PTR dwClientImcData);
|
PIMC FASTCALL UserCreateInputContext(_In_ ULONG_PTR dwClientImcData);
|
||||||
VOID UserFreeInputContext(PVOID Object);
|
VOID UserFreeInputContext(_In_opt_ PVOID Object);
|
||||||
BOOLEAN UserDestroyInputContext(PVOID Object);
|
BOOLEAN UserDestroyInputContext(_In_opt_ PVOID Object);
|
||||||
PVOID AllocInputContextObject(PDESKTOP pDesk, PTHREADINFO pti, SIZE_T Size, PVOID* HandleOwner);
|
|
||||||
|
PVOID
|
||||||
|
AllocInputContextObject(
|
||||||
|
_In_ PDESKTOP pDesk,
|
||||||
|
_In_ PTHREADINFO pti,
|
||||||
|
_In_ SIZE_T Size,
|
||||||
|
_Out_ PVOID* HandleOwner);
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -117,13 +117,13 @@ HWND FASTCALL IntFindWindow(PWND Parent, PWND ChildAfter, RTL_ATOM ClassAtom,
|
||||||
|
|
||||||
extern BOOL gfIMEShowStatus;
|
extern BOOL gfIMEShowStatus;
|
||||||
|
|
||||||
BOOL FASTCALL IntWantImeWindow(PWND pwndTarget);
|
BOOL FASTCALL IntWantImeWindow(_In_ PWND pwndTarget);
|
||||||
PWND FASTCALL co_IntCreateDefaultImeWindow(PWND pwndTarget, HINSTANCE hInst);
|
PWND FASTCALL co_IntCreateDefaultImeWindow(_In_ PWND pwndTarget, _In_ HINSTANCE hInst);
|
||||||
BOOL FASTCALL IntImeCanDestroyDefIMEforChild(PWND pImeWnd, PWND pwndTarget);
|
BOOL FASTCALL IntImeCanDestroyDefIMEforChild(_In_ PWND pImeWnd, _In_ PWND pwndTarget);
|
||||||
BOOL FASTCALL IntImeCanDestroyDefIME(PWND pImeWnd, PWND pwndTarget);
|
BOOL FASTCALL IntImeCanDestroyDefIME(_In_ PWND pImeWnd, _In_ PWND pwndTarget);
|
||||||
BOOL FASTCALL IntBroadcastImeShowStatusChange(PWND pImeWnd, BOOL bShow);
|
BOOL FASTCALL IntBroadcastImeShowStatusChange(_In_ PWND pImeWnd, _In_ BOOL bShow);
|
||||||
VOID FASTCALL IntNotifyImeShowStatus(PWND pImeWnd);
|
VOID FASTCALL IntNotifyImeShowStatus(_In_ PWND pImeWnd);
|
||||||
VOID FASTCALL IntCheckImeShowStatusInThread(PWND pImeWnd);
|
VOID FASTCALL IntCheckImeShowStatusInThread(_In_ PWND pImeWnd);
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
VOID
|
VOID
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue