mirror of
https://github.com/reactos/reactos.git
synced 2025-05-03 12:50:05 +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);
|
||||
|
||||
if (!ValidateHwndNoErr(hWnd) || Imm32IsCrossProcessAccess(hWnd))
|
||||
if (!ValidateHwnd(hWnd) || Imm32IsCrossProcessAccess(hWnd))
|
||||
return FALSE;
|
||||
|
||||
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);
|
||||
|
||||
if (!ValidateHwndNoErr(hWnd) || Imm32IsCrossProcessAccess(hWnd))
|
||||
if (!ValidateHwnd(hWnd) || Imm32IsCrossProcessAccess(hWnd))
|
||||
return FALSE;
|
||||
|
||||
pImeDpi = Imm32FindOrLoadImeDpi(hKL);
|
||||
|
|
|
@ -509,7 +509,7 @@ HIMC WINAPI ImmAssociateContext(HWND hWnd, HIMC hIMC)
|
|||
if (!IS_IMM_MODE())
|
||||
return NULL;
|
||||
|
||||
pWnd = ValidateHwndNoErr(hWnd);
|
||||
pWnd = ValidateHwnd(hWnd);
|
||||
if (!pWnd)
|
||||
return NULL;
|
||||
|
||||
|
@ -555,7 +555,7 @@ BOOL WINAPI ImmAssociateContextEx(HWND hWnd, HIMC hIMC, DWORD dwFlags)
|
|||
return FALSE;
|
||||
|
||||
hwndFocus = (HWND)NtUserQueryWindow(hWnd, QUERY_WINDOW_FOCUS);
|
||||
pFocusWnd = ValidateHwndNoErr(hwndFocus);
|
||||
pFocusWnd = ValidateHwnd(hwndFocus);
|
||||
if (pFocusWnd)
|
||||
hOldIMC = pFocusWnd->hImc;
|
||||
|
||||
|
@ -566,7 +566,7 @@ BOOL WINAPI ImmAssociateContextEx(HWND hWnd, HIMC hIMC, DWORD dwFlags)
|
|||
return TRUE;
|
||||
|
||||
case 1:
|
||||
pFocusWnd = ValidateHwndNoErr(hwndFocus);
|
||||
pFocusWnd = ValidateHwnd(hwndFocus);
|
||||
if (pFocusWnd)
|
||||
{
|
||||
hIMC = pFocusWnd->hImc;
|
||||
|
@ -647,7 +647,7 @@ BOOL APIENTRY Imm32DestroyInputContext(HIMC hIMC, HKL hKL, BOOL bKeep)
|
|||
if (!hIMC || !IS_IMM_MODE())
|
||||
return FALSE;
|
||||
|
||||
pIMC = ValidateHandleNoErr(hIMC, TYPE_INPUTCONTEXT);
|
||||
pIMC = ValidateHandle(hIMC, TYPE_INPUTCONTEXT);
|
||||
if (!pIMC || pIMC->head.pti != Imm32CurrentPti())
|
||||
{
|
||||
ERR("invalid pIMC: %p\n", pIMC);
|
||||
|
@ -916,7 +916,7 @@ PCLIENTIMC WINAPI ImmLockClientImc(HIMC hImc)
|
|||
if (!hImc)
|
||||
return NULL;
|
||||
|
||||
pIMC = ValidateHandleNoErr(hImc, TYPE_INPUTCONTEXT);
|
||||
pIMC = ValidateHandle(hImc, TYPE_INPUTCONTEXT);
|
||||
if (!pIMC || !Imm32CheckImcProcess(pIMC))
|
||||
return NULL;
|
||||
|
||||
|
@ -986,7 +986,7 @@ static HIMC APIENTRY ImmGetSaveContext(HWND hWnd, DWORD dwContextFlags)
|
|||
goto Quit;
|
||||
}
|
||||
|
||||
pWnd = ValidateHwndNoErr(hWnd);
|
||||
pWnd = ValidateHwnd(hWnd);
|
||||
if (!pWnd || Imm32IsCrossProcessAccess(hWnd))
|
||||
return NULL;
|
||||
|
||||
|
|
|
@ -574,7 +574,7 @@ LRESULT APIENTRY ImmRequestMessageAW(HIMC hIMC, WPARAM wParam, LPARAM lParam, BO
|
|||
|
||||
hWnd = pIC->hWnd;
|
||||
if (hWnd)
|
||||
pWnd = ValidateHwndNoErr(hWnd);
|
||||
pWnd = ValidateHwnd(hWnd);
|
||||
|
||||
if (pWnd && pWnd->head.pti == Imm32CurrentPti())
|
||||
ret = Imm32ProcessRequest(hIMC, pWnd, (DWORD)wParam, (LPVOID)lParam, bAnsi);
|
||||
|
|
|
@ -79,8 +79,10 @@ extern HANDLE ghImmHeap;
|
|||
BOOL Imm32GetSystemLibraryPath(LPWSTR pszPath, DWORD cchPath, LPCWSTR pszFileName);
|
||||
VOID APIENTRY LogFontAnsiToWide(const LOGFONTA *plfA, LPLOGFONTW plfW);
|
||||
VOID APIENTRY LogFontWideToAnsi(const LOGFONTW *plfW, LPLOGFONTA plfA);
|
||||
PWND FASTCALL ValidateHwndNoErr(HWND hwnd);
|
||||
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);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
// Win: HMValidateHandle
|
||||
// Win: HMValidateHandleNoRip
|
||||
LPVOID FASTCALL ValidateHandleNoErr(HANDLE hObject, UINT uType)
|
||||
{
|
||||
UINT index;
|
||||
|
@ -203,14 +203,18 @@ LPVOID FASTCALL ValidateHandleNoErr(HANDLE hObject, UINT uType)
|
|||
return ptr;
|
||||
}
|
||||
|
||||
PWND FASTCALL ValidateHwndNoErr(HWND hwnd)
|
||||
// Win: HMValidateHandle
|
||||
LPVOID FASTCALL ValidateHandle(HANDLE hObject, UINT uType)
|
||||
{
|
||||
/* See if the window is cached */
|
||||
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||
if (hwnd == ClientInfo->CallbackWnd.hWnd)
|
||||
return ClientInfo->CallbackWnd.pWnd;
|
||||
LPVOID pvObj = ValidateHandleNoErr(hObject, uType);
|
||||
if (pvObj)
|
||||
return pvObj;
|
||||
|
||||
return ValidateHandleNoErr(hwnd, TYPE_WINDOW);
|
||||
if (uType == TYPE_WINDOW)
|
||||
SetLastError(ERROR_INVALID_WINDOW_HANDLE);
|
||||
else
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Win: TestInputContextProcess
|
||||
|
|
Loading…
Reference in a new issue