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