ReactOS 0.4.16-dev-1247-g7d8d8a6
utils.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS msctf.dll
3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4 * PURPOSE: Text Framework Services
5 * COPYRIGHT: Copyright 2023-2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 */
7
8#include <stdlib.h>
9
10#define WIN32_LEAN_AND_MEAN
11#define WIN32_NO_STATUS
12#define COBJMACROS
13#define INITGUID
14#define _EXTYPES_H
15
16#include <windows.h>
17#include <sddl.h>
18#include <imm.h>
19#include <cguid.h>
20#include <tchar.h>
21#include <msctf.h>
22#include <msctf_undoc.h>
23#include <ctffunc.h>
24#include <shlwapi.h>
25#include <strsafe.h>
26
27#include <cicarray.h>
28#include <cicreg.h>
29#include <cicmutex.h>
30#include <cicfmap.h>
31
32#include "mlng.h"
33
34#include <wine/debug.h>
35
37
45UINT g_uACP = CP_ACP; // Active Code Page
46DWORD g_dwOSInfo = 0; // See cicGetOSInfo
55
56// Messages
69
70// Unique names
77
78// Mutexes
84
85// File mapping
87
88// Hot-Keys
95
100{
101 HANDLE hToken = NULL;
103 if (!hToken)
104 return NULL;
105
106 DWORD dwLengthNeeded = 0;
107 GetTokenInformation(hToken, TokenUser, NULL, 0, &dwLengthNeeded);
108 PTOKEN_USER pTokenUser = (PTOKEN_USER)cicMemAllocClear(dwLengthNeeded);
109 if (!pTokenUser)
110 {
111 CloseHandle(hToken);
112 return NULL;
113 }
114
115 LPTSTR StringSid = NULL;
116 if (!GetTokenInformation(hToken, TokenUser, pTokenUser, dwLengthNeeded, &dwLengthNeeded) ||
117 !ConvertSidToStringSid(pTokenUser->User.Sid, &StringSid))
118 {
119 if (StringSid)
120 {
121 LocalFree(StringSid);
122 StringSid = NULL;
123 }
124 }
125
126 cicMemFree(pTokenUser);
127 CloseHandle(hToken);
128 return StringSid;
129}
130
135{
137 return TRUE;
138
139 LPTSTR pszUserSID = GetUserSIDString();
140 if (!pszUserSID)
141 return FALSE;
142
145 LocalFree(pszUserSID);
146 return TRUE;
147}
148
153{
154 g_szUserUnique[0] = TEXT('\0');
155
157 HDESK hDesk = GetThreadDesktop(dwThreadId);
158
159 DWORD nLengthNeeded;
161 if (hDesk && GetUserObjectInformation(hDesk, UOI_NAME, szName, _countof(szName), &nLengthNeeded))
163
164 if (!InitUserSidString())
165 return FALSE;
166
168 return TRUE;
169}
170
171void
173 _In_ LPCTSTR pszName,
174 _Out_ LPTSTR pszBuff,
175 _In_ UINT cchBuff)
176{
177 StringCchCopy(pszBuff, cchBuff, pszName);
178 StringCchCat(pszBuff, cchBuff, g_szUserUnique);
179}
180
181BOOL StringFromGUID2A(REFGUID rguid, LPSTR pszGUID, INT cchGUID)
182{
183 pszGUID[0] = ANSI_NULL;
184
185 WCHAR szWide[40];
186 szWide[0] = UNICODE_NULL;
187 BOOL ret = StringFromGUID2(rguid, szWide, _countof(szWide));
188 ::WideCharToMultiByte(CP_ACP, 0, szWide, -1, pszGUID, cchGUID, NULL, NULL);
189 return ret;
190}
191
192#ifdef UNICODE
193 #define StringFromGUID2T StringFromGUID2
194 #define debugstr_t debugstr_w
195#else
196 #define StringFromGUID2T StringFromGUID2A
197 #define debugstr_t debugstr_a
198#endif
199
200BOOL FullPathExec(LPCTSTR pszExeFile, LPCTSTR pszCmdLine, UINT nCmdShow, BOOL bSysWinDir)
201{
202 STARTUPINFO si;
204 CicSystemModulePath ModPath;
205 TCHAR szCommandLine[2 * MAX_PATH];
206
207 ModPath.Init(pszExeFile, bSysWinDir);
208 if (!ModPath.m_cchPath)
209 {
210 ERR("%s\n", debugstr_t(pszExeFile));
211 return FALSE;
212 }
213
214 StringCchCopy(szCommandLine, _countof(szCommandLine), pszCmdLine);
215
216 ZeroMemory(&si, sizeof(si));
217 si.cb = sizeof(si);
218 si.wShowWindow = nCmdShow;
220 if (!CreateProcess(ModPath.m_szPath, szCommandLine, NULL, NULL, FALSE,
222 {
223 ERR("%s, %s\n", debugstr_t(ModPath.m_szPath), debugstr_t(szCommandLine));
224 return FALSE;
225 }
226
227 CloseHandle(pi.hProcess);
228 CloseHandle(pi.hThread);
229 return TRUE;
230}
231
232static inline BOOL
234{
235 if (!pszCmdLine)
236 return FALSE;
237
238 return FullPathExec(TEXT("rundll32.exe"), pszCmdLine, SW_SHOWMINNOACTIVE, FALSE);
239}
240
241/***********************************************************************
242 * TF_GetThreadFlags (MSCTF.@)
243 *
244 * @unimplemented
245 */
249 _Out_ LPDWORD pdwFlags1,
250 _Out_ LPDWORD pdwFlags2,
251 _Out_ LPDWORD pdwFlags3)
252{
253 FIXME("(%lu, %p, %p, %p)\n", dwThreadId, pdwFlags1, pdwFlags2, pdwFlags3);
254 *pdwFlags1 = *pdwFlags2 = *pdwFlags3 = 0;
255 return FALSE;
256}
257
258/***********************************************************************
259 * TF_CreateCategoryMgr (MSCTF.@)
260 *
261 * @unimplemented
262 */
265{
266 FIXME("(%p)\n", ppcat);
267 if (ppcat)
268 *ppcat = NULL;
269 return E_NOTIMPL;
270}
271
272/***********************************************************************
273 * TF_CreateCicLoadMutex (MSCTF.@)
274 *
275 * @unimplemented
276 */
279{
280 FIXME("(%p)\n", pfWinLogon);
281 if (pfWinLogon == NULL)
282 return NULL;
283 *pfWinLogon = FALSE;
284 return NULL;
285}
286
287/***********************************************************************
288 * TF_CreateDisplayAttributeMgr (MSCTF.@)
289 *
290 * @unimplemented
291 */
294{
295 FIXME("(%p)\n", ppdam);
296 *ppdam = NULL;
297 return E_NOTIMPL;
298}
299
300/***********************************************************************
301 * TF_DllDetachInOther (MSCTF.@)
302 *
303 * @unimplemented
304 */
307{
308 FIXME("()\n");
309 return TRUE;
310}
311
312/***********************************************************************
313 * TF_GetGlobalCompartment (MSCTF.@)
314 *
315 * @unimplemented
316 */
319{
320 FIXME("(%p)\n", ppCompMgr);
321 *ppCompMgr = NULL;
322 return E_NOTIMPL;
323}
324
325/***********************************************************************
326 * TF_GetLangIcon (MSCTF.@)
327 *
328 * @unimplemented
329 */
332{
333 FIXME("(0x%X, %p, %d)\n", LangID, pszText, cchText);
334 return NULL;
335}
336
337/***********************************************************************
338 * TF_IsFullScreenWindowAcitvated (MSCTF.@)
339 *
340 * Yes, this function name is misspelled by MS.
341 * @unimplemented
342 */
345{
346 FIXME("()\n");
347 return FALSE;
348}
349
350/***********************************************************************
351 * TF_GetInputScope (MSCTF.@)
352 *
353 * @unimplemented
354 */
357{
358 FIXME("(%p, %p)\n", hWnd, ppInputScope);
359 *ppInputScope = NULL;
360 return E_NOTIMPL;
361}
362
363/***********************************************************************
364 * SetInputScopeXML (MSCTF.@)
365 *
366 * @unimplemented
367 */
370{
371 FIXME("(%p, %p)\n", hwnd, pszXML);
372 return E_NOTIMPL;
373}
374
375/***********************************************************************
376 * TF_CUASAppFix (MSCTF.@)
377 *
378 * @implemented
379 */
382{
383 if (!pszName || lstrcmpiA(pszName, "DelayFirstActivateKeyboardLayout") != 0)
384 return E_INVALIDARG;
386 return S_OK;
387}
388
389/***********************************************************************
390 * TF_CheckThreadInputIdle (MSCTF.@)
391 *
392 * @unimplemented
393 */
396{
397 FIXME("(%lu, %lu)\n", dwThreadId, dwMilliseconds);
398 return -1;
399}
400
401/***********************************************************************
402 * TF_ClearLangBarAddIns (MSCTF.@)
403 *
404 * @unimplemented
405 */
408{
409 FIXME("(%p)\n", guid);
410 return E_NOTIMPL;
411}
412
413/***********************************************************************
414 * TF_InvalidAssemblyListCache (MSCTF.@)
415 *
416 * @unimplemented
417 */
420{
421 FIXME("()\n");
422 return E_NOTIMPL;
423}
424
425/***********************************************************************
426 * TF_IsInMarshaling (MSCTF.@)
427 *
428 * @unimplemented
429 */
432{
433 FIXME("(%lu)\n", dwThreadId);
434 return FALSE;
435}
436
437/***********************************************************************
438 * TF_PostAllThreadMsg (MSCTF.@)
439 *
440 * @unimplemented
441 */
444{
445 FIXME("(%p, 0x%X)\n", wParam, dwFlags);
446 return E_NOTIMPL;
447}
448
449/***********************************************************************
450 * TF_InitSystem (MSCTF.@)
451 *
452 * @unimplemented
453 */
456{
457 FIXME("()\n");
458 return FALSE;
459}
460
461/***********************************************************************
462 * TF_UninitSystem (MSCTF.@)
463 *
464 * @unimplemented
465 */
468{
469 FIXME("()\n");
470 return FALSE;
471}
472
473/***********************************************************************
474 * TF_RegisterLangBarAddIn (MSCTF.@)
475 *
476 * @implemented
477 */
480 _In_ REFGUID rguid,
481 _In_ LPCWSTR pszFilePath,
483{
484 TRACE("(%s, %s, 0x%lX)\n", debugstr_guid(&rguid), debugstr_w(pszFilePath), dwFlags);
485
486 if (!pszFilePath || IsEqualGUID(rguid, GUID_NULL))
487 {
488 ERR("E_INVALIDARG\n");
489 return E_INVALIDARG;
490 }
491
492 TCHAR szBuff[MAX_PATH], szGUID[40];
493 StringCchCopy(szBuff, _countof(szBuff), TEXT("SOFTWARE\\Microsoft\\CTF\\LangBarAddIn\\"));
494 StringFromGUID2T(rguid, szGUID, _countof(szGUID));
495 StringCchCat(szBuff, _countof(szBuff), szGUID);
496
497 CicRegKey regKey;
498 HKEY hBaseKey = ((dwFlags & 1) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER);
499 LSTATUS error = regKey.Create(hBaseKey, szBuff);
500 if (error == ERROR_SUCCESS)
501 {
502 error = regKey.SetSzW(L"FilePath", pszFilePath);
503 if (error == ERROR_SUCCESS)
504 error = regKey.SetDword(TEXT("Enable"), !!(dwFlags & 4));
505 }
506
507 return ((error == ERROR_SUCCESS) ? S_OK : E_FAIL);
508}
509
510/***********************************************************************
511 * TF_UnregisterLangBarAddIn (MSCTF.@)
512 *
513 * @implemented
514 */
517 _In_ REFGUID rguid,
519{
520 TRACE("(%s, 0x%lX)\n", debugstr_guid(&rguid), dwFlags);
521
522 if (IsEqualGUID(rguid, GUID_NULL))
523 {
524 ERR("E_INVALIDARG\n");
525 return E_INVALIDARG;
526 }
527
528 TCHAR szSubKey[MAX_PATH];
529 StringCchCopy(szSubKey, _countof(szSubKey), TEXT("SOFTWARE\\Microsoft\\CTF\\LangBarAddIn\\"));
530
531 CicRegKey regKey;
532 HKEY hBaseKey = ((dwFlags & 1) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER);
533 LSTATUS error = regKey.Open(hBaseKey, szSubKey, KEY_ALL_ACCESS);
534 HRESULT hr = E_FAIL;
535 if (error == ERROR_SUCCESS)
536 {
537 TCHAR szGUID[40];
538 StringFromGUID2T(rguid, szGUID, _countof(szGUID));
539 regKey.RecurseDeleteKey(szGUID);
540 hr = S_OK;
541 }
542
543 return hr;
544}
545
546/***********************************************************************
547 * TF_RunInputCPL (MSCTF.@)
548 *
549 * @implemented
550 */
553{
554 CicSystemModulePath ModPath;
555 TCHAR szCmdLine[2 * MAX_PATH];
556
557 TRACE("()\n");
558
559 // NOTE: We don't support Win95/98/Me
561 ModPath.Init(TEXT("input.dll"), FALSE);
562 else
563 ModPath.Init(TEXT("input.cpl"), FALSE);
564
565 if (!ModPath.m_cchPath)
566 return E_FAIL;
567
568 StringCchPrintf(szCmdLine, _countof(szCmdLine),
569 TEXT("rundll32.exe shell32.dll,Control_RunDLL %s"), ModPath.m_szPath);
570 if (!RunCPLSetting(szCmdLine))
571 return E_FAIL;
572
573 return S_OK;
574}
575
576/***********************************************************************
577 * TF_IsCtfmonRunning (MSCTF.@)
578 *
579 * @implemented
580 */
583{
585 GetDesktopUniqueName(TEXT("CtfmonInstMutex"), szName, _countof(szName));
586
588 if (!hMutex)
589 return FALSE;
590
592 return TRUE;
593}
594
599{
600 CicRegKey regKey;
601 TCHAR szLanguage[2], szLayout[2];
603
604 szLanguage[0] = szLayout[0] = TEXT('3');
605 szLanguage[1] = szLayout[1] = TEXT('\0');
606
607 error = regKey.Open(HKEY_CURRENT_USER, TEXT("Keyboard Layout\\Toggle"));
608 if (error == ERROR_SUCCESS)
609 {
610 error = regKey.QuerySz(TEXT("Language Hotkey"), szLanguage, _countof(szLanguage));
611 if (error != ERROR_SUCCESS)
612 {
614 {
615 error = regKey.QuerySz(TEXT("Hotkey"), szLanguage, _countof(szLanguage));
616 if (error != ERROR_SUCCESS)
617 szLanguage[0] = TEXT('1');
618 }
619 else
620 {
621 error = regKey.QuerySz(NULL, szLanguage, _countof(szLanguage));
622 if (error != ERROR_SUCCESS)
623 szLanguage[0] = TEXT('1');
624 }
625
627 szLanguage[0] = TEXT('1');
628 }
629
630 error = regKey.QuerySz(TEXT("Layout Hotkey"), szLayout, _countof(szLayout));
631 if (error != ERROR_SUCCESS)
632 {
633 szLayout[0] = TEXT('1');
634 if (szLanguage[0] != TEXT('2'))
635 szLayout[0] = TEXT('2');
637 szLayout[0] = TEXT('3');
638 }
639
640 szLanguage[1] = TEXT('\0');
641 szLayout[1] = TEXT('\0');
642 }
643
644 if (szLanguage[0] == szLayout[0])
645 {
646 if (szLanguage[0] == TEXT('1'))
647 szLayout[0] = TEXT('2');
648 else if (szLanguage[0] == TEXT('2'))
649 szLayout[0] = TEXT('1');
650 else
651 szLayout[0] = TEXT('3');
652 }
653
655
656 switch (szLanguage[0])
657 {
658 case TEXT('2'):
662 break;
663
664 case TEXT('3'):
668 break;
669
670 case TEXT('4'):
674 break;
675
676 case TEXT('1'):
677 default:
681 break;
682 }
683
684 switch (szLayout[0])
685 {
686 case TEXT('2'):
690 break;
691
692 case TEXT('3'):
696 break;
697
698 case TEXT('4'):
702 break;
703
704 case TEXT('1'):
705 default:
709 break;
710 }
711
713
714 TRACE("HotKey: %c, %c\n", szLanguage[0], szLayout[0]);
715 return TRUE;
716}
717
722{
723 HKEY hKey;
725 error = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\CTF"), 0, KEY_READ, &hKey);
726 if (error != ERROR_SUCCESS)
727 return;
728
729 DWORD dwData = 0, cbData = sizeof(dwData);
730 error = RegQueryValueEx(hKey, TEXT("EnableAnchorContext"), NULL, NULL, (PBYTE)&dwData, &cbData);
731 if (error == ERROR_SUCCESS && cbData == sizeof(DWORD) && dwData == 1)
733
735}
736
738{
739 CicRegKey regKey1;
741
742 error = regKey1.Open(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\CTF\\SystemShared\\"));
743 if (error == ERROR_SUCCESS)
744 {
745 DWORD dwValue;
746 error = regKey1.QueryDword(TEXT("CUAS"), &dwValue);
747 if (error == ERROR_SUCCESS)
748 g_fCUAS = !!dwValue;
749 }
750
751 g_szCUASImeFile[0] = TEXT('\0');
752
753 if (!g_fCUAS)
754 return;
755
756 TCHAR szImeFile[16];
757 CicRegKey regKey2;
758 error = regKey2.Open(HKEY_LOCAL_MACHINE,
759 TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\IMM"));
760 if (error == ERROR_SUCCESS)
761 {
762 error = regKey2.QuerySz(TEXT("IME File"), szImeFile, _countof(szImeFile));
763 if (error == ERROR_SUCCESS)
764 {
765 g_szCUASImeFile[_countof(g_szCUASImeFile) - 1] = TEXT('\0'); // Avoid buffer overrun
767 }
768 }
769}
770
772{
773 // Do nothing
774}
775
779BOOL ProcessAttach(HINSTANCE hinstDLL) // FIXME: Call me from DllMain
780{
782
786
788 g_hInst = hinstDLL;
791 if (g_dwTLSIndex == (DWORD)-1)
792 return FALSE;
793
794 g_msgPrivate = ::RegisterWindowMessageA("MSUIM.Msg.Private");
795 g_msgSetFocus = ::RegisterWindowMessageA("MSUIM.Msg.SetFocus");
796 g_msgThreadTerminate = ::RegisterWindowMessageA("MSUIM.Msg.ThreadTerminate");
797 g_msgThreadItemChange = ::RegisterWindowMessageA("MSUIM.Msg.ThreadItemChange");
798 g_msgLBarModal = ::RegisterWindowMessageA("MSUIM.Msg.LangBarModal");
799 g_msgRpcSendReceive = ::RegisterWindowMessageA("MSUIM.Msg.RpcSendReceive");
800 g_msgThreadMarshal = ::RegisterWindowMessageA("MSUIM.Msg.ThreadMarshal");
801 g_msgCheckThreadInputIdel = ::RegisterWindowMessageA("MSUIM.Msg.CheckThreadInputIdel");
802 g_msgStubCleanUp = ::RegisterWindowMessageA("MSUIM.Msg.StubCleanUp");
803 g_msgShowFloating = ::RegisterWindowMessageA("MSUIM.Msg.ShowFloating");
804 g_msgLBUpdate = ::RegisterWindowMessageA("MSUIM.Msg.LBUpdate");
805 g_msgNuiMgrDirtyUpdate = ::RegisterWindowMessageA("MSUIM.Msg.MuiMgrDirtyUpdate");
806 if (!g_msgPrivate ||
807 !g_msgSetFocus ||
816 !g_msgLBUpdate ||
818 {
819 return FALSE;
820 }
821
823 TRACE("cicGetOSInfo: %u, 0x%lX\n", g_uACP, g_dwOSInfo);
824
826
827 //FIXME
828
830
831 //FIXME
832
833 InitCUASFlag();
834
835 //FIXME
836
840
841 //FIXME
842
844
845 //FIXME
846
848
849 return TRUE;
850}
851
855VOID ProcessDetach(HINSTANCE hinstDLL) // FIXME: Call me from DllMain
856{
857 if (!gf_CRT_INIT)
858 {
860 return;
861 }
862
863 if (gfSharedMemory)
864 {
865 if (g_cRefDll != -1 )
866 TFUninitLib();
867 //FIXME
868 }
869
870 UninitINAT();
871
872 //FIXME
873
874 //TF_UninitThreadSystem();
875
876 //FIXME
877
878 if (g_dwTLSIndex != (DWORD)-1)
879 {
881 g_dwTLSIndex = (DWORD)-1;
882 }
883
884 //FIXME
885
886 if (gfSharedMemory)
887 {
891 //FIXME
894 //FIXME
896 }
897
899
903
905}
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
CicMutex g_mutexLBES
Definition: utils.cpp:79
TCHAR g_szCUASImeFile[16]
Definition: utils.cpp:52
EXTERN_C VOID TFUninitLib(VOID)
Definition: utils.cpp:771
EXTERN_C HRESULT WINAPI TF_InvalidAssemblyListCache(VOID)
Definition: utils.cpp:419
UINT g_msgPrivate
Definition: utils.cpp:57
BOOL StringFromGUID2A(REFGUID rguid, LPSTR pszGUID, INT cchGUID)
Definition: utils.cpp:181
BOOL g_fCUAS
Definition: utils.cpp:51
EXTERN_C HRESULT WINAPI TF_GetGlobalCompartment(_Out_ ITfCompartmentMgr **ppCompMgr)
Definition: utils.cpp:318
EXTERN_C HRESULT WINAPI SetInputScopeXML(_In_opt_ HWND hwnd, _In_opt_ PCWSTR pszXML)
Definition: utils.cpp:369
CicMutex g_mutexLayouts
Definition: utils.cpp:82
DWORD g_dwOSInfo
Definition: utils.cpp:46
EXTERN_C BOOL WINAPI TF_GetThreadFlags(_In_ DWORD dwThreadId, _Out_ LPDWORD pdwFlags1, _Out_ LPDWORD pdwFlags2, _Out_ LPDWORD pdwFlags3)
Definition: utils.cpp:247
VOID InitCUASFlag(VOID)
Definition: utils.cpp:737
UINT g_uKeyTipHotKeyVKey
Definition: utils.cpp:93
VOID CheckAnchorStores(VOID)
Definition: utils.cpp:721
EXTERN_C HRESULT WINAPI TF_UnregisterLangBarAddIn(_In_ REFGUID rguid, _In_ DWORD dwFlags)
Definition: utils.cpp:516
HKL g_hklDefault
Definition: utils.cpp:47
CicMutex g_mutexAsm
Definition: utils.cpp:81
UINT g_msgLBUpdate
Definition: utils.cpp:67
UINT g_uLangHotKeyVKey2
Definition: utils.cpp:91
LONG g_cRefDll
Definition: utils.cpp:50
UINT g_msgCheckThreadInputIdel
Definition: utils.cpp:64
EXTERN_C HRESULT WINAPI TF_PostAllThreadMsg(_In_opt_ WPARAM wParam, _In_ DWORD dwFlags)
Definition: utils.cpp:443
BOOL g_bOnWow64
Definition: utils.cpp:44
UINT g_msgThreadMarshal
Definition: utils.cpp:63
EXTERN_C HRESULT WINAPI TF_CreateCategoryMgr(_Out_ ITfCategoryMgr **ppcat)
Definition: utils.cpp:264
CicMutex g_mutexTMD
Definition: utils.cpp:83
BOOL gfSharedMemory
Definition: utils.cpp:49
EXTERN_C BOOL WINAPI TF_IsFullScreenWindowAcitvated(VOID)
Definition: utils.cpp:344
EXTERN_C HRESULT WINAPI TF_ClearLangBarAddIns(_In_ REFGUID guid)
Definition: utils.cpp:407
LPTSTR GetUserSIDString(void)
Definition: utils.cpp:99
CRITICAL_SECTION g_csDelayLoad
Definition: utils.cpp:42
EXTERN_C LONG WINAPI TF_CheckThreadInputIdle(_In_ DWORD dwThreadId, _In_ DWORD dwMilliseconds)
Definition: utils.cpp:395
EXTERN_C HRESULT WINAPI TF_CreateDisplayAttributeMgr(_Out_ ITfDisplayAttributeMgr **ppdam)
Definition: utils.cpp:293
EXTERN_C BOOL WINAPI TF_UninitSystem(VOID)
Definition: utils.cpp:467
TCHAR g_szUserUnique[MAX_PATH]
Definition: utils.cpp:73
static BOOL RunCPLSetting(LPCTSTR pszCmdLine)
Definition: utils.cpp:233
CRITICAL_SECTION g_cs
Definition: utils.cpp:40
DWORD g_dwAppCompatibility
Definition: utils.cpp:53
BOOL ProcessAttach(HINSTANCE hinstDLL)
Definition: utils.cpp:779
EXTERN_C HRESULT WINAPI TF_RegisterLangBarAddIn(_In_ REFGUID rguid, _In_ LPCWSTR pszFilePath, _In_ DWORD dwFlags)
Definition: utils.cpp:479
UINT g_uLangHotKeyModifiers
Definition: utils.cpp:89
UINT g_msgStubCleanUp
Definition: utils.cpp:65
CicMutex g_mutexCompart
Definition: utils.cpp:80
UINT g_msgShowFloating
Definition: utils.cpp:66
UINT g_msgNuiMgrDirtyUpdate
Definition: utils.cpp:68
UINT g_msgRpcSendReceive
Definition: utils.cpp:62
void GetDesktopUniqueName(_In_ LPCTSTR pszName, _Out_ LPTSTR pszBuff, _In_ UINT cchBuff)
Definition: utils.cpp:172
UINT g_uACP
Definition: utils.cpp:45
EXTERN_C HRESULT WINAPI TF_RunInputCPL(VOID)
Definition: utils.cpp:552
#define debugstr_t
Definition: utils.cpp:197
UINT g_msgThreadTerminate
Definition: utils.cpp:59
BOOL InitLangChangeHotKey(VOID)
Definition: utils.cpp:598
UINT g_uKeyTipHotKeyVKey2
Definition: utils.cpp:94
UINT g_msgSetFocus
Definition: utils.cpp:58
TCHAR g_szAsmListCache[MAX_PATH]
Definition: utils.cpp:74
BOOL InitUserSidString(void)
Definition: utils.cpp:134
BOOL InitUniqueString(void)
Definition: utils.cpp:152
EXTERN_C BOOL WINAPI TF_InitSystem(VOID)
Definition: utils.cpp:455
CicFileMappingStatic g_SharedMemory
Definition: utils.cpp:86
TCHAR g_szTimListCache[MAX_PATH]
Definition: utils.cpp:75
UINT g_uKeyTipHotKeyModifiers
Definition: utils.cpp:92
BOOL g_fNoITextStoreAnchor
Definition: utils.cpp:54
UINT g_msgThreadItemChange
Definition: utils.cpp:60
EXTERN_C BOOL WINAPI TF_IsCtfmonRunning(VOID)
Definition: utils.cpp:582
BOOL FullPathExec(LPCTSTR pszExeFile, LPCTSTR pszCmdLine, UINT nCmdShow, BOOL bSysWinDir)
Definition: utils.cpp:200
EXTERN_C HICON WINAPI TF_GetLangIcon(_In_ LANGID LangID, _Out_ PWSTR pszText, _In_ INT cchText)
Definition: utils.cpp:331
EXTERN_C BOOL WINAPI TF_IsInMarshaling(_In_ DWORD dwThreadId)
Definition: utils.cpp:431
EXTERN_C HRESULT WINAPI TF_CUASAppFix(_In_ LPCSTR pszName)
Definition: utils.cpp:381
BOOL gf_CRT_INIT
Definition: utils.cpp:38
EXTERN_C HRESULT WINAPI TF_GetInputScope(_In_opt_ HWND hWnd, _Out_ ITfInputScope **ppInputScope)
Definition: utils.cpp:356
UINT g_uLangHotKeyVKey
Definition: utils.cpp:90
VOID ProcessDetach(HINSTANCE hinstDLL)
Definition: utils.cpp:855
EXTERN_C HANDLE WINAPI TF_CreateCicLoadMutex(_Out_ LPBOOL pfWinLogon)
Definition: utils.cpp:278
BOOL g_fDllProcessDetached
Definition: utils.cpp:39
#define StringFromGUID2T
Definition: utils.cpp:196
CRITICAL_SECTION g_csInDllMain
Definition: utils.cpp:41
DWORD g_dwTLSIndex
Definition: utils.cpp:48
UINT g_msgLBarModal
Definition: utils.cpp:61
BOOL g_fUserSidString
Definition: utils.cpp:71
HINSTANCE g_hInst
Definition: utils.cpp:43
EXTERN_C BOOL WINAPI TF_DllDetachInOther(VOID)
Definition: utils.cpp:306
TCHAR g_szUserSidString[MAX_PATH]
Definition: utils.cpp:72
TCHAR g_szLayoutsCache[MAX_PATH]
Definition: utils.cpp:76
#define FIXME(fmt,...)
Definition: precomp.h:53
#define ERR(fmt,...)
Definition: precomp.h:57
#define EXTERN_C
Definition: basetyps.h:12
#define RegCloseKey(hKey)
Definition: registry.h:49
EXTERN_C BOOL cicIsWow64(VOID)
Definition: cicbase.cpp:58
EXTERN_C void cicGetOSInfo(LPUINT puACP, LPDWORD pdwOSInfo)
Definition: cicbase.cpp:82
static void cicMemFree(LPVOID ptr)
Definition: cicbase.h:27
#define CIC_OSINFO_NT
Definition: cicbase.h:44
#define CIC_OSINFO_XPPLUS
Definition: cicbase.h:51
static LPVOID cicMemAllocClear(SIZE_T size)
Definition: cicbase.h:15
void Uninit()
Definition: cicmutex.h:31
LSTATUS QuerySz(LPCTSTR pszValueName, LPTSTR pszValue, DWORD cchValueMax)
Definition: cicreg.h:84
LSTATUS SetDword(LPCTSTR pszValueName, DWORD dwValue)
Definition: cicreg.h:67
LSTATUS Open(HKEY hKey, LPCTSTR lpSubKey, REGSAM samDesired=KEY_READ)
Definition: cicreg.h:51
LSTATUS RecurseDeleteKey(LPCTSTR lpSubKey)
Definition: cicreg.h:113
LSTATUS Create(HKEY hKey, LPCTSTR lpSubKey)
Definition: cicreg.h:56
LSTATUS SetSzW(LPCWSTR pszValueName, LPCWSTR pszValue)
Definition: cicreg.h:78
LSTATUS QueryDword(LPCTSTR pszValueName, LPDWORD pdwValue)
Definition: cicreg.h:61
WPARAM wParam
Definition: combotst.c:138
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define ERROR_SUCCESS
Definition: deptool.c:10
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
Definition: security.c:411
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
Definition: security.c:294
#define CloseHandle
Definition: compat.h:739
#define CP_ACP
Definition: compat.h:109
#define GetCurrentProcess()
Definition: compat.h:759
#define MAX_PATH
Definition: compat.h:34
#define WideCharToMultiByte
Definition: compat.h:111
BOOL WINAPI TlsFree(IN DWORD Index)
Definition: thread.c:1166
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4224
LCID WINAPI GetSystemDefaultLCID(void)
Definition: locale.c:1230
DWORD WINAPI DECLSPEC_HOTPATCH TlsAlloc(void)
Definition: thread.c:657
GUID guid
Definition: version.c:147
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
DWORD dwThreadId
Definition: fdebug.c:31
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define MOD_ALT
Definition: imm.h:184
#define MOD_SHIFT
Definition: imm.h:186
#define MOD_CONTROL
Definition: imm.h:185
#define S_OK
Definition: intsafe.h:52
#define TEXT(s)
Definition: k32.h:28
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
#define GUID_NULL
Definition: ks.h:106
USHORT LANGID
Definition: mui.h:9
#define error(str)
Definition: mkdosfs.c:1605
VOID UninitINAT(VOID)
@implemented
Definition: mlng.cpp:355
#define CTF_COMPAT_DELAY_FIRST_ACTIVATE
Definition: mlng.h:10
HANDLE hMutex
Definition: mutex.c:11
static HICON
Definition: imagelist.c:80
static HANDLE ULONG_PTR dwData
Definition: file.c:35
static refpint_t pi[]
Definition: server.c:96
UINT_PTR HKL
Definition: msctf.idl:125
unsigned int UINT
Definition: ndis.h:50
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
#define KEY_ALL_ACCESS
Definition: nt_native.h:1041
#define KEY_READ
Definition: nt_native.h:1023
#define DWORD
Definition: nt_native.h:44
#define UNICODE_NULL
#define ANSI_NULL
#define L(x)
Definition: ntvdm.h:50
BYTE * PBYTE
Definition: pedump.c:66
long LONG
Definition: pedump.c:60
static const WCHAR szName[]
Definition: powrprof.c:45
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define ConvertSidToStringSid
Definition: sddl.h:160
#define LANG_CHINESE
Definition: nls.h:42
#define PRIMARYLANGID(l)
Definition: nls.h:16
HRESULT hr
Definition: shlfolder.c:183
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
#define StringCchCopy
Definition: strsafe.h:139
#define StringCchPrintf
Definition: strsafe.h:517
#define StringCchCat
Definition: strsafe.h:317
Definition: scsiwmi.h:51
DWORD dwFlags
Definition: winbase.h:877
DWORD cb
Definition: winbase.h:866
WORD wShowWindow
Definition: winbase.h:878
SID_AND_ATTRIBUTES User
Definition: setypes.h:1022
BOOL WINAPI InitializeCriticalSectionAndSpinCount(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount)
Definition: synch.c:765
uint16_t * PWSTR
Definition: typedefs.h:56
const uint16_t * PCWSTR
Definition: typedefs.h:57
uint32_t * LPDWORD
Definition: typedefs.h:59
int32_t INT
Definition: typedefs.h:58
int ret
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
Definition: wdfusb.h:1083
#define CreateProcess
Definition: winbase.h:3799
#define NORMAL_PRIORITY_CLASS
Definition: winbase.h:191
#define ZeroMemory
Definition: winbase.h:1753
#define STARTF_USESHOWWINDOW
Definition: winbase.h:524
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define MUTEX_ALL_ACCESS
Definition: winbase.h:166
#define OpenMutex
Definition: winbase.h:3929
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
BOOL * LPBOOL
Definition: windef.h:162
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define RegOpenKeyEx
Definition: winreg.h:520
#define RegQueryValueEx
Definition: winreg.h:524
HDESK WINAPI GetThreadDesktop(_In_ DWORD)
HKL WINAPI GetKeyboardLayout(_In_ DWORD)
UINT WINAPI RegisterWindowMessageA(_In_ LPCSTR)
#define SM_MIDEASTENABLED
Definition: winuser.h:1045
#define UOI_NAME
Definition: winuser.h:1095
#define VK_CONTROL
Definition: winuser.h:2222
#define VK_NUMPAD0
Definition: winuser.h:2258
_In_ int cchText
Definition: winuser.h:4541
#define VK_SHIFT
Definition: winuser.h:2221
#define VK_OEM_3
Definition: winuser.h:2335
int WINAPI GetSystemMetrics(_In_ int)
#define SW_SHOWMINNOACTIVE
Definition: winuser.h:788
#define GetUserObjectInformation
Definition: winuser.h:5880
#define VK_MENU
Definition: winuser.h:2223
struct _TOKEN_USER * PTOKEN_USER
#define TOKEN_QUERY
Definition: setypes.h:940
@ TokenUser
Definition: setypes.h:978
char TCHAR
Definition: xmlstorage.h:189
const char * LPCSTR
Definition: xmlstorage.h:183
char * LPSTR
Definition: xmlstorage.h:182
__wchar_t WCHAR
Definition: xmlstorage.h:180
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
CHAR * LPTSTR
Definition: xmlstorage.h:192
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185