mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 17:16:43 +00:00
[IMM32] Add ValidateHandle function (#4467)
Set the last error on failure of handle validation. CORE-11700
This commit is contained in:
parent
e9df3176f7
commit
b0b925d2b0
5 changed files with 23 additions and 17 deletions
|
@ -1692,7 +1692,7 @@ BOOL WINAPI ImmConfigureIMEA(HKL hKL, HWND hWnd, DWORD dwMode, LPVOID lpData)
|
||||||
|
|
||||||
TRACE("(%p, %p, 0x%lX, %p)", hKL, hWnd, dwMode, lpData);
|
TRACE("(%p, %p, 0x%lX, %p)", hKL, hWnd, dwMode, lpData);
|
||||||
|
|
||||||
if (!ValidateHwndNoErr(hWnd) || Imm32IsCrossProcessAccess(hWnd))
|
if (!ValidateHwnd(hWnd) || Imm32IsCrossProcessAccess(hWnd))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
pImeDpi = Imm32FindOrLoadImeDpi(hKL);
|
pImeDpi = Imm32FindOrLoadImeDpi(hKL);
|
||||||
|
@ -1746,7 +1746,7 @@ BOOL WINAPI ImmConfigureIMEW(HKL hKL, HWND hWnd, DWORD dwMode, LPVOID lpData)
|
||||||
|
|
||||||
TRACE("(%p, %p, 0x%lX, %p)", hKL, hWnd, dwMode, lpData);
|
TRACE("(%p, %p, 0x%lX, %p)", hKL, hWnd, dwMode, lpData);
|
||||||
|
|
||||||
if (!ValidateHwndNoErr(hWnd) || Imm32IsCrossProcessAccess(hWnd))
|
if (!ValidateHwnd(hWnd) || Imm32IsCrossProcessAccess(hWnd))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
pImeDpi = Imm32FindOrLoadImeDpi(hKL);
|
pImeDpi = Imm32FindOrLoadImeDpi(hKL);
|
||||||
|
|
|
@ -509,7 +509,7 @@ HIMC WINAPI ImmAssociateContext(HWND hWnd, HIMC hIMC)
|
||||||
if (!IS_IMM_MODE())
|
if (!IS_IMM_MODE())
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
pWnd = ValidateHwndNoErr(hWnd);
|
pWnd = ValidateHwnd(hWnd);
|
||||||
if (!pWnd)
|
if (!pWnd)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -555,7 +555,7 @@ BOOL WINAPI ImmAssociateContextEx(HWND hWnd, HIMC hIMC, DWORD dwFlags)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
hwndFocus = (HWND)NtUserQueryWindow(hWnd, QUERY_WINDOW_FOCUS);
|
hwndFocus = (HWND)NtUserQueryWindow(hWnd, QUERY_WINDOW_FOCUS);
|
||||||
pFocusWnd = ValidateHwndNoErr(hwndFocus);
|
pFocusWnd = ValidateHwnd(hwndFocus);
|
||||||
if (pFocusWnd)
|
if (pFocusWnd)
|
||||||
hOldIMC = pFocusWnd->hImc;
|
hOldIMC = pFocusWnd->hImc;
|
||||||
|
|
||||||
|
@ -566,7 +566,7 @@ BOOL WINAPI ImmAssociateContextEx(HWND hWnd, HIMC hIMC, DWORD dwFlags)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
pFocusWnd = ValidateHwndNoErr(hwndFocus);
|
pFocusWnd = ValidateHwnd(hwndFocus);
|
||||||
if (pFocusWnd)
|
if (pFocusWnd)
|
||||||
{
|
{
|
||||||
hIMC = pFocusWnd->hImc;
|
hIMC = pFocusWnd->hImc;
|
||||||
|
@ -647,7 +647,7 @@ BOOL APIENTRY Imm32DestroyInputContext(HIMC hIMC, HKL hKL, BOOL bKeep)
|
||||||
if (!hIMC || !IS_IMM_MODE())
|
if (!hIMC || !IS_IMM_MODE())
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
pIMC = ValidateHandleNoErr(hIMC, TYPE_INPUTCONTEXT);
|
pIMC = ValidateHandle(hIMC, TYPE_INPUTCONTEXT);
|
||||||
if (!pIMC || pIMC->head.pti != Imm32CurrentPti())
|
if (!pIMC || pIMC->head.pti != Imm32CurrentPti())
|
||||||
{
|
{
|
||||||
ERR("invalid pIMC: %p\n", pIMC);
|
ERR("invalid pIMC: %p\n", pIMC);
|
||||||
|
@ -916,7 +916,7 @@ PCLIENTIMC WINAPI ImmLockClientImc(HIMC hImc)
|
||||||
if (!hImc)
|
if (!hImc)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
pIMC = ValidateHandleNoErr(hImc, TYPE_INPUTCONTEXT);
|
pIMC = ValidateHandle(hImc, TYPE_INPUTCONTEXT);
|
||||||
if (!pIMC || !Imm32CheckImcProcess(pIMC))
|
if (!pIMC || !Imm32CheckImcProcess(pIMC))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -986,7 +986,7 @@ static HIMC APIENTRY ImmGetSaveContext(HWND hWnd, DWORD dwContextFlags)
|
||||||
goto Quit;
|
goto Quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
pWnd = ValidateHwndNoErr(hWnd);
|
pWnd = ValidateHwnd(hWnd);
|
||||||
if (!pWnd || Imm32IsCrossProcessAccess(hWnd))
|
if (!pWnd || Imm32IsCrossProcessAccess(hWnd))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -574,7 +574,7 @@ LRESULT APIENTRY ImmRequestMessageAW(HIMC hIMC, WPARAM wParam, LPARAM lParam, BO
|
||||||
|
|
||||||
hWnd = pIC->hWnd;
|
hWnd = pIC->hWnd;
|
||||||
if (hWnd)
|
if (hWnd)
|
||||||
pWnd = ValidateHwndNoErr(hWnd);
|
pWnd = ValidateHwnd(hWnd);
|
||||||
|
|
||||||
if (pWnd && pWnd->head.pti == Imm32CurrentPti())
|
if (pWnd && pWnd->head.pti == Imm32CurrentPti())
|
||||||
ret = Imm32ProcessRequest(hIMC, pWnd, (DWORD)wParam, (LPVOID)lParam, bAnsi);
|
ret = Imm32ProcessRequest(hIMC, pWnd, (DWORD)wParam, (LPVOID)lParam, bAnsi);
|
||||||
|
|
|
@ -79,8 +79,10 @@ extern HANDLE ghImmHeap;
|
||||||
BOOL Imm32GetSystemLibraryPath(LPWSTR pszPath, DWORD cchPath, LPCWSTR pszFileName);
|
BOOL Imm32GetSystemLibraryPath(LPWSTR pszPath, DWORD cchPath, LPCWSTR pszFileName);
|
||||||
VOID APIENTRY LogFontAnsiToWide(const LOGFONTA *plfA, LPLOGFONTW plfW);
|
VOID APIENTRY LogFontAnsiToWide(const LOGFONTA *plfA, LPLOGFONTW plfW);
|
||||||
VOID APIENTRY LogFontWideToAnsi(const LOGFONTW *plfW, LPLOGFONTA plfA);
|
VOID APIENTRY LogFontWideToAnsi(const LOGFONTW *plfW, LPLOGFONTA plfA);
|
||||||
PWND FASTCALL ValidateHwndNoErr(HWND hwnd);
|
|
||||||
LPVOID FASTCALL ValidateHandleNoErr(HANDLE hObject, UINT uType);
|
LPVOID FASTCALL ValidateHandleNoErr(HANDLE hObject, UINT uType);
|
||||||
|
LPVOID FASTCALL ValidateHandle(HANDLE hObject, UINT uType);
|
||||||
|
#define ValidateHwndNoErr(hwnd) ValidateHandleNoErr((hwnd), TYPE_WINDOW)
|
||||||
|
#define ValidateHwnd(hwnd) ValidateHandle((hwnd), TYPE_WINDOW)
|
||||||
BOOL APIENTRY Imm32CheckImcProcess(PIMC pIMC);
|
BOOL APIENTRY Imm32CheckImcProcess(PIMC pIMC);
|
||||||
|
|
||||||
LPVOID APIENTRY ImmLocalAlloc(DWORD dwFlags, DWORD dwBytes);
|
LPVOID APIENTRY ImmLocalAlloc(DWORD dwFlags, DWORD dwBytes);
|
||||||
|
|
|
@ -167,7 +167,7 @@ static PVOID FASTCALL DesktopPtrToUser(PVOID ptr)
|
||||||
return (PVOID)NtUserCallOneParam((DWORD_PTR)ptr, ONEPARAM_ROUTINE_GETDESKTOPMAPPING);
|
return (PVOID)NtUserCallOneParam((DWORD_PTR)ptr, ONEPARAM_ROUTINE_GETDESKTOPMAPPING);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: HMValidateHandle
|
// Win: HMValidateHandleNoRip
|
||||||
LPVOID FASTCALL ValidateHandleNoErr(HANDLE hObject, UINT uType)
|
LPVOID FASTCALL ValidateHandleNoErr(HANDLE hObject, UINT uType)
|
||||||
{
|
{
|
||||||
UINT index;
|
UINT index;
|
||||||
|
@ -203,14 +203,18 @@ LPVOID FASTCALL ValidateHandleNoErr(HANDLE hObject, UINT uType)
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
PWND FASTCALL ValidateHwndNoErr(HWND hwnd)
|
// Win: HMValidateHandle
|
||||||
|
LPVOID FASTCALL ValidateHandle(HANDLE hObject, UINT uType)
|
||||||
{
|
{
|
||||||
/* See if the window is cached */
|
LPVOID pvObj = ValidateHandleNoErr(hObject, uType);
|
||||||
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
if (pvObj)
|
||||||
if (hwnd == ClientInfo->CallbackWnd.hWnd)
|
return pvObj;
|
||||||
return ClientInfo->CallbackWnd.pWnd;
|
|
||||||
|
|
||||||
return ValidateHandleNoErr(hwnd, TYPE_WINDOW);
|
if (uType == TYPE_WINDOW)
|
||||||
|
SetLastError(ERROR_INVALID_WINDOW_HANDLE);
|
||||||
|
else
|
||||||
|
SetLastError(ERROR_INVALID_HANDLE);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: TestInputContextProcess
|
// Win: TestInputContextProcess
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue