[IMM32] Improve ImmLockClientImc (#4450)

CORE-11700
This commit is contained in:
Katayama Hirofumi MZ 2022-04-14 14:10:19 +09:00 committed by GitHub
parent e5f637f93f
commit f848343bff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 21 deletions

View file

@ -907,38 +907,37 @@ PCLIENTIMC WINAPI ImmLockClientImc(HIMC hImc)
TRACE("(%p)\n", hImc);
if (hImc == NULL)
if (!hImc)
return NULL;
pIMC = ValidateHandleNoErr(hImc, TYPE_INPUTCONTEXT);
if (pIMC == NULL || !Imm32CheckImcProcess(pIMC))
if (!pIMC || !Imm32CheckImcProcess(pIMC))
return NULL;
pClientImc = (PCLIENTIMC)pIMC->dwClientImcData;
if (!pClientImc)
{
pClientImc = ImmLocalAlloc(HEAP_ZERO_MEMORY, sizeof(CLIENTIMC));
if (!pClientImc)
return NULL;
RtlInitializeCriticalSection(&pClientImc->cs);
pClientImc->dwCompatFlags = (DWORD)NtUserGetThreadState(THREADSTATE_IMECOMPATFLAGS);
if (!NtUserUpdateInputContext(hImc, UIC_CLIENTIMCDATA, (DWORD_PTR)pClientImc))
{
ImmLocalFree(pClientImc);
return NULL;
}
pClientImc->dwFlags |= CLIENTIMC_UNKNOWN2;
}
else
if (pClientImc)
{
if (pClientImc->dwFlags & CLIENTIMC_DESTROY)
return NULL;
goto Finish;
}
pClientImc = ImmLocalAlloc(HEAP_ZERO_MEMORY, sizeof(CLIENTIMC));
if (!pClientImc)
return NULL;
RtlInitializeCriticalSection(&pClientImc->cs);
pClientImc->dwCompatFlags = (DWORD)NtUserGetThreadState(THREADSTATE_IMECOMPATFLAGS);
if (!NtUserUpdateInputContext(hImc, UIC_CLIENTIMCDATA, (DWORD_PTR)pClientImc))
{
ImmLocalFree(pClientImc);
return NULL;
}
pClientImc->dwFlags |= CLIENTIMC_UNKNOWN2;
Finish:
InterlockedIncrement(&pClientImc->cLockObj);
return pClientImc;
}

View file

@ -213,6 +213,7 @@ PWND FASTCALL ValidateHwndNoErr(HWND hwnd)
return ValidateHandleNoErr(hwnd, TYPE_WINDOW);
}
// Win: TestInputContextProcess
BOOL APIENTRY Imm32CheckImcProcess(PIMC pIMC)
{
HIMC hIMC;