ReactOS 0.4.16-dev-1537-g4e425b5
utils.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS CTF
3 * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
4 * PURPOSE: Text Framework Services
5 * COPYRIGHT: Copyright 2023-2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 */
7
8#include "precomp.h"
9
10#include <sddl.h>
11#include <imm.h>
12#include <ctffunc.h>
13#include <shlwapi.h>
14
15#include <cicmutex.h>
16#include <cicfmap.h>
17
18#include "mlng.h"
19
20#include <wine/debug.h>
22
30UINT g_uACP = CP_ACP; // Active Code Page
31DWORD g_dwOSInfo = 0; // See cicGetOSInfo
40
41// Messages
54
55// Unique names
62
63// Mutexes
69
70// File mapping
72
73// Hot-Keys
80
81// Handle pure virtual function call errors
82extern "C" void __cxa_pure_virtual(void)
83{
84 ERR("__cxa_pure_virtual\n");
85 DebugBreak();
86}
87
92{
93 HANDLE hToken = NULL;
95 if (!hToken)
96 return NULL;
97
98 DWORD dwLengthNeeded = 0;
99 GetTokenInformation(hToken, TokenUser, NULL, 0, &dwLengthNeeded);
100 PTOKEN_USER pTokenUser = (PTOKEN_USER)cicMemAllocClear(dwLengthNeeded);
101 if (!pTokenUser)
102 {
103 CloseHandle(hToken);
104 return NULL;
105 }
106
107 LPTSTR StringSid = NULL;
108 if (!GetTokenInformation(hToken, TokenUser, pTokenUser, dwLengthNeeded, &dwLengthNeeded) ||
109 !ConvertSidToStringSid(pTokenUser->User.Sid, &StringSid))
110 {
111 if (StringSid)
112 {
113 LocalFree(StringSid);
114 StringSid = NULL;
115 }
116 }
117
118 cicMemFree(pTokenUser);
119 CloseHandle(hToken);
120 return StringSid;
121}
122
127{
129 return TRUE;
130
131 LPTSTR pszUserSID = GetUserSIDString();
132 if (!pszUserSID)
133 return FALSE;
134
137 LocalFree(pszUserSID);
138 return TRUE;
139}
140
145{
146 g_szUserUnique[0] = TEXT('\0');
147
149 HDESK hDesk = GetThreadDesktop(dwThreadId);
150
151 DWORD nLengthNeeded;
153 if (hDesk && GetUserObjectInformation(hDesk, UOI_NAME, szName, _countof(szName), &nLengthNeeded))
155
156 if (!InitUserSidString())
157 return FALSE;
158
160 return TRUE;
161}
162
163void
165 _In_ LPCTSTR pszName,
166 _Out_ LPTSTR pszBuff,
167 _In_ UINT cchBuff)
168{
169 StringCchCopy(pszBuff, cchBuff, pszName);
170 StringCchCat(pszBuff, cchBuff, g_szUserUnique);
171}
172
173BOOL StringFromGUID2A(REFGUID rguid, LPSTR pszGUID, INT cchGUID)
174{
175 pszGUID[0] = ANSI_NULL;
176
177 WCHAR szWide[40];
178 szWide[0] = UNICODE_NULL;
179 BOOL ret = StringFromGUID2(rguid, szWide, _countof(szWide));
180 ::WideCharToMultiByte(CP_ACP, 0, szWide, -1, pszGUID, cchGUID, NULL, NULL);
181 return ret;
182}
183
184#ifdef UNICODE
185 #define StringFromGUID2T StringFromGUID2
186 #define debugstr_t debugstr_w
187#else
188 #define StringFromGUID2T StringFromGUID2A
189 #define debugstr_t debugstr_a
190#endif
191
192BOOL FullPathExec(LPCTSTR pszExeFile, LPCTSTR pszCmdLine, UINT nCmdShow, BOOL bSysWinDir)
193{
194 STARTUPINFO si;
196 CicSystemModulePath ModPath;
197 TCHAR szCommandLine[2 * MAX_PATH];
198
199 ModPath.Init(pszExeFile, bSysWinDir);
200 if (!ModPath.m_cchPath)
201 {
202 ERR("%s\n", debugstr_t(pszExeFile));
203 return FALSE;
204 }
205
206 StringCchCopy(szCommandLine, _countof(szCommandLine), pszCmdLine);
207
208 ZeroMemory(&si, sizeof(si));
209 si.cb = sizeof(si);
210 si.wShowWindow = nCmdShow;
212 if (!CreateProcess(ModPath.m_szPath, szCommandLine, NULL, NULL, FALSE,
214 {
215 ERR("%s, %s\n", debugstr_t(ModPath.m_szPath), debugstr_t(szCommandLine));
216 return FALSE;
217 }
218
219 CloseHandle(pi.hProcess);
220 CloseHandle(pi.hThread);
221 return TRUE;
222}
223
224static inline BOOL
226{
227 if (!pszCmdLine)
228 return FALSE;
229
230 return FullPathExec(TEXT("rundll32.exe"), pszCmdLine, SW_SHOWMINNOACTIVE, FALSE);
231}
232
233/***********************************************************************
234 * TF_GetThreadFlags (MSCTF.@)
235 *
236 * @unimplemented
237 */
241 _Out_ LPDWORD pdwFlags1,
242 _Out_ LPDWORD pdwFlags2,
243 _Out_ LPDWORD pdwFlags3)
244{
245 FIXME("(%lu, %p, %p, %p)\n", dwThreadId, pdwFlags1, pdwFlags2, pdwFlags3);
246 *pdwFlags1 = *pdwFlags2 = *pdwFlags3 = 0;
247 return FALSE;
248}
249
250/***********************************************************************
251 * TF_CreateCategoryMgr (MSCTF.@)
252 *
253 * @implemented
254 */
257{
258 TRACE("(%p)\n", ppcat);
259 return CategoryMgr_Constructor(NULL, (IUnknown **)ppcat);
260}
261
262/***********************************************************************
263 * TF_CreateCicLoadMutex (MSCTF.@)
264 *
265 * @unimplemented
266 */
269{
270 FIXME("(%p)\n", pfWinLogon);
271 if (!pfWinLogon)
272 return NULL;
273 *pfWinLogon = FALSE;
274 return NULL;
275}
276
277/***********************************************************************
278 * TF_CreateDisplayAttributeMgr (MSCTF.@)
279 *
280 * @implemented
281 */
284{
285 TRACE("(%p)\n", ppdam);
287}
288
289/***********************************************************************
290 * TF_DllDetachInOther (MSCTF.@)
291 *
292 * @unimplemented
293 */
296{
297 FIXME("()\n");
298 return TRUE;
299}
300
301/***********************************************************************
302 * TF_GetGlobalCompartment (MSCTF.@)
303 *
304 * @unimplemented
305 */
308{
309 FIXME("(%p)\n", ppCompMgr);
310 *ppCompMgr = NULL;
311 return E_NOTIMPL;
312}
313
314/***********************************************************************
315 * TF_GetLangIcon (MSCTF.@)
316 *
317 * @unimplemented
318 */
321{
322 FIXME("(0x%X, %p, %d)\n", LangID, pszText, cchText);
323 return NULL;
324}
325
326/***********************************************************************
327 * TF_IsFullScreenWindowAcitvated (MSCTF.@)
328 *
329 * Yes, this function name is misspelled by MS.
330 * @unimplemented
331 */
334{
335 FIXME("()\n");
336 return FALSE;
337}
338
339/***********************************************************************
340 * TF_GetInputScope (MSCTF.@)
341 *
342 * @unimplemented
343 */
346{
347 FIXME("(%p, %p)\n", hWnd, ppInputScope);
348 *ppInputScope = NULL;
349 return E_NOTIMPL;
350}
351
352/***********************************************************************
353 * SetInputScopeXML (MSCTF.@)
354 *
355 * @unimplemented
356 */
359{
360 FIXME("(%p, %p)\n", hwnd, pszXML);
361 return E_NOTIMPL;
362}
363
364/***********************************************************************
365 * TF_CUASAppFix (MSCTF.@)
366 *
367 * @implemented
368 */
371{
372 if (!pszName || lstrcmpiA(pszName, "DelayFirstActivateKeyboardLayout") != 0)
373 return E_INVALIDARG;
375 return S_OK;
376}
377
378/***********************************************************************
379 * TF_CheckThreadInputIdle (MSCTF.@)
380 *
381 * @unimplemented
382 */
385{
386 FIXME("(%lu, %lu)\n", dwThreadId, dwMilliseconds);
387 return -1;
388}
389
390/***********************************************************************
391 * TF_ClearLangBarAddIns (MSCTF.@)
392 *
393 * @unimplemented
394 */
397{
398 FIXME("(%p)\n", guid);
399 return E_NOTIMPL;
400}
401
402/***********************************************************************
403 * TF_InvalidAssemblyListCache (MSCTF.@)
404 *
405 * @unimplemented
406 */
409{
410 FIXME("()\n");
411 return E_NOTIMPL;
412}
413
414/***********************************************************************
415 * TF_IsInMarshaling (MSCTF.@)
416 *
417 * @unimplemented
418 */
421{
422 FIXME("(%lu)\n", dwThreadId);
423 return FALSE;
424}
425
426/***********************************************************************
427 * TF_PostAllThreadMsg (MSCTF.@)
428 *
429 * @unimplemented
430 */
433{
434 FIXME("(%p, 0x%X)\n", wParam, dwFlags);
435 return E_NOTIMPL;
436}
437
438/***********************************************************************
439 * TF_InitSystem (MSCTF.@)
440 *
441 * @unimplemented
442 */
445{
446 FIXME("()\n");
447 return FALSE;
448}
449
450/***********************************************************************
451 * TF_UninitSystem (MSCTF.@)
452 *
453 * @unimplemented
454 */
457{
458 FIXME("()\n");
459 return FALSE;
460}
461
462/***********************************************************************
463 * TF_RegisterLangBarAddIn (MSCTF.@)
464 *
465 * @implemented
466 */
469 _In_ REFGUID rguid,
470 _In_ LPCWSTR pszFilePath,
472{
473 TRACE("(%s, %s, 0x%lX)\n", debugstr_guid(&rguid), debugstr_w(pszFilePath), dwFlags);
474
475 if (!pszFilePath || rguid == GUID_NULL)
476 {
477 ERR("E_INVALIDARG\n");
478 return E_INVALIDARG;
479 }
480
481 TCHAR szBuff[MAX_PATH], szGUID[40];
482 StringCchCopy(szBuff, _countof(szBuff), TEXT("SOFTWARE\\Microsoft\\CTF\\LangBarAddIn\\"));
483 StringFromGUID2T(rguid, szGUID, _countof(szGUID));
484 StringCchCat(szBuff, _countof(szBuff), szGUID);
485
486 CicRegKey regKey;
487 HKEY hBaseKey = ((dwFlags & 1) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER);
488 LSTATUS error = regKey.Create(hBaseKey, szBuff);
489 if (error == ERROR_SUCCESS)
490 {
491 error = regKey.SetSzW(L"FilePath", pszFilePath);
492 if (error == ERROR_SUCCESS)
493 error = regKey.SetDword(TEXT("Enable"), !!(dwFlags & 4));
494 }
495
496 return ((error == ERROR_SUCCESS) ? S_OK : E_FAIL);
497}
498
499/***********************************************************************
500 * TF_UnregisterLangBarAddIn (MSCTF.@)
501 *
502 * @implemented
503 */
506 _In_ REFGUID rguid,
508{
509 TRACE("(%s, 0x%lX)\n", debugstr_guid(&rguid), dwFlags);
510
511 if (rguid == GUID_NULL)
512 {
513 ERR("E_INVALIDARG\n");
514 return E_INVALIDARG;
515 }
516
517 TCHAR szSubKey[MAX_PATH];
518 StringCchCopy(szSubKey, _countof(szSubKey), TEXT("SOFTWARE\\Microsoft\\CTF\\LangBarAddIn\\"));
519
520 CicRegKey regKey;
521 HKEY hBaseKey = ((dwFlags & 1) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER);
522 LSTATUS error = regKey.Open(hBaseKey, szSubKey, KEY_ALL_ACCESS);
523 HRESULT hr = E_FAIL;
524 if (error == ERROR_SUCCESS)
525 {
526 TCHAR szGUID[40];
527 StringFromGUID2T(rguid, szGUID, _countof(szGUID));
528 regKey.RecurseDeleteKey(szGUID);
529 hr = S_OK;
530 }
531
532 return hr;
533}
534
535/***********************************************************************
536 * TF_RunInputCPL (MSCTF.@)
537 *
538 * @implemented
539 */
542{
543 CicSystemModulePath ModPath;
544 TCHAR szCmdLine[2 * MAX_PATH];
545
546 TRACE("()\n");
547
548 // NOTE: We don't support Win95/98/Me
550 ModPath.Init(TEXT("input.dll"), FALSE);
551 else
552 ModPath.Init(TEXT("input.cpl"), FALSE);
553
554 if (!ModPath.m_cchPath)
555 return E_FAIL;
556
557 StringCchPrintf(szCmdLine, _countof(szCmdLine),
558 TEXT("rundll32.exe shell32.dll,Control_RunDLL %s"), ModPath.m_szPath);
559 if (!RunCPLSetting(szCmdLine))
560 return E_FAIL;
561
562 return S_OK;
563}
564
565/***********************************************************************
566 * TF_IsCtfmonRunning (MSCTF.@)
567 *
568 * @implemented
569 */
572{
574 GetDesktopUniqueName(TEXT("CtfmonInstMutex"), szName, _countof(szName));
575
577 if (!hMutex)
578 return FALSE;
579
581 return TRUE;
582}
583
588{
589 CicRegKey regKey;
590 TCHAR szLanguage[2], szLayout[2];
592
593 szLanguage[0] = szLayout[0] = TEXT('3');
594 szLanguage[1] = szLayout[1] = TEXT('\0');
595
596 error = regKey.Open(HKEY_CURRENT_USER, TEXT("Keyboard Layout\\Toggle"));
597 if (error == ERROR_SUCCESS)
598 {
599 error = regKey.QuerySz(TEXT("Language Hotkey"), szLanguage, _countof(szLanguage));
600 if (error != ERROR_SUCCESS)
601 {
603 {
604 error = regKey.QuerySz(TEXT("Hotkey"), szLanguage, _countof(szLanguage));
605 if (error != ERROR_SUCCESS)
606 szLanguage[0] = TEXT('1');
607 }
608 else
609 {
610 error = regKey.QuerySz(NULL, szLanguage, _countof(szLanguage));
611 if (error != ERROR_SUCCESS)
612 szLanguage[0] = TEXT('1');
613 }
614
616 szLanguage[0] = TEXT('1');
617 }
618
619 error = regKey.QuerySz(TEXT("Layout Hotkey"), szLayout, _countof(szLayout));
620 if (error != ERROR_SUCCESS)
621 {
622 szLayout[0] = TEXT('1');
623 if (szLanguage[0] != TEXT('2'))
624 szLayout[0] = TEXT('2');
626 szLayout[0] = TEXT('3');
627 }
628
629 szLanguage[1] = TEXT('\0');
630 szLayout[1] = TEXT('\0');
631 }
632
633 if (szLanguage[0] == szLayout[0])
634 {
635 if (szLanguage[0] == TEXT('1'))
636 szLayout[0] = TEXT('2');
637 else if (szLanguage[0] == TEXT('2'))
638 szLayout[0] = TEXT('1');
639 else
640 szLayout[0] = TEXT('3');
641 }
642
644
645 switch (szLanguage[0])
646 {
647 case TEXT('2'):
651 break;
652
653 case TEXT('3'):
657 break;
658
659 case TEXT('4'):
663 break;
664
665 case TEXT('1'):
666 default:
670 break;
671 }
672
673 switch (szLayout[0])
674 {
675 case TEXT('2'):
679 break;
680
681 case TEXT('3'):
685 break;
686
687 case TEXT('4'):
691 break;
692
693 case TEXT('1'):
694 default:
698 break;
699 }
700
702
703 TRACE("HotKey: %c, %c\n", szLanguage[0], szLayout[0]);
704 return TRUE;
705}
706
711{
712 HKEY hKey;
714 error = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\CTF"), 0, KEY_READ, &hKey);
715 if (error != ERROR_SUCCESS)
716 return;
717
718 DWORD dwData = 0, cbData = sizeof(dwData);
719 error = RegQueryValueEx(hKey, TEXT("EnableAnchorContext"), NULL, NULL, (PBYTE)&dwData, &cbData);
720 if (error == ERROR_SUCCESS && cbData == sizeof(DWORD) && dwData == 1)
722
724}
725
727{
728 CicRegKey regKey1;
730
731 error = regKey1.Open(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\CTF\\SystemShared\\"));
732 if (error == ERROR_SUCCESS)
733 {
734 DWORD dwValue;
735 error = regKey1.QueryDword(TEXT("CUAS"), &dwValue);
736 if (error == ERROR_SUCCESS)
737 g_fCUAS = !!dwValue;
738 }
739
740 g_szCUASImeFile[0] = TEXT('\0');
741
742 if (!g_fCUAS)
743 return;
744
745 TCHAR szImeFile[16];
746 CicRegKey regKey2;
747 error = regKey2.Open(HKEY_LOCAL_MACHINE,
748 TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\IMM"));
749 if (error == ERROR_SUCCESS)
750 {
751 error = regKey2.QuerySz(TEXT("IME File"), szImeFile, _countof(szImeFile));
752 if (error == ERROR_SUCCESS)
753 {
754 g_szCUASImeFile[_countof(g_szCUASImeFile) - 1] = TEXT('\0'); // Avoid buffer overrun
756 }
757 }
758}
759
761{
762 // Do nothing
763}
764
767{
769
773
775 g_hInst = hinstDLL;
778 if (g_dwTLSIndex == (DWORD)-1)
779 return FALSE;
780
781 g_msgPrivate = ::RegisterWindowMessageA("MSUIM.Msg.Private");
782 g_msgSetFocus = ::RegisterWindowMessageA("MSUIM.Msg.SetFocus");
783 g_msgThreadTerminate = ::RegisterWindowMessageA("MSUIM.Msg.ThreadTerminate");
784 g_msgThreadItemChange = ::RegisterWindowMessageA("MSUIM.Msg.ThreadItemChange");
785 g_msgLBarModal = ::RegisterWindowMessageA("MSUIM.Msg.LangBarModal");
786 g_msgRpcSendReceive = ::RegisterWindowMessageA("MSUIM.Msg.RpcSendReceive");
787 g_msgThreadMarshal = ::RegisterWindowMessageA("MSUIM.Msg.ThreadMarshal");
788 g_msgCheckThreadInputIdel = ::RegisterWindowMessageA("MSUIM.Msg.CheckThreadInputIdel");
789 g_msgStubCleanUp = ::RegisterWindowMessageA("MSUIM.Msg.StubCleanUp");
790 g_msgShowFloating = ::RegisterWindowMessageA("MSUIM.Msg.ShowFloating");
791 g_msgLBUpdate = ::RegisterWindowMessageA("MSUIM.Msg.LBUpdate");
792 g_msgNuiMgrDirtyUpdate = ::RegisterWindowMessageA("MSUIM.Msg.MuiMgrDirtyUpdate");
793 if (!g_msgPrivate ||
794 !g_msgSetFocus ||
803 !g_msgLBUpdate ||
805 {
806 return FALSE;
807 }
808
810 TRACE("cicGetOSInfo: %u, 0x%lX\n", g_uACP, g_dwOSInfo);
811
813
814 //FIXME
815
817
818 //FIXME
819
820 InitCUASFlag();
821
822 //FIXME
823
827
828 //FIXME
829
831
832 //FIXME
833
835
836 return TRUE;
837}
838
841{
842 if (!gf_CRT_INIT)
843 {
845 return;
846 }
847
848 if (gfSharedMemory)
849 {
850 if (g_cRefDll != -1 )
851 TFUninitLib();
852 //FIXME
853 }
854
855 UninitINAT();
856
857 //FIXME
858
859 //TF_UninitThreadSystem();
860
861 //FIXME
862
863 if (g_dwTLSIndex != (DWORD)-1)
864 {
866 g_dwTLSIndex = (DWORD)-1;
867 }
868
869 //FIXME
870
871 if (gfSharedMemory)
872 {
876 //FIXME
879 //FIXME
881 }
882
884
888
890}
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
CicMutex g_mutexLBES
Definition: utils.cpp:64
TCHAR g_szCUASImeFile[16]
Definition: utils.cpp:37
EXTERN_C VOID TFUninitLib(VOID)
Definition: utils.cpp:760
EXTERN_C HRESULT WINAPI TF_InvalidAssemblyListCache(VOID)
Definition: utils.cpp:408
UINT g_msgPrivate
Definition: utils.cpp:42
BOOL StringFromGUID2A(REFGUID rguid, LPSTR pszGUID, INT cchGUID)
Definition: utils.cpp:173
BOOL g_fCUAS
Definition: utils.cpp:36
EXTERN_C HRESULT WINAPI TF_GetGlobalCompartment(_Out_ ITfCompartmentMgr **ppCompMgr)
Definition: utils.cpp:307
EXTERN_C HRESULT WINAPI SetInputScopeXML(_In_opt_ HWND hwnd, _In_opt_ PCWSTR pszXML)
Definition: utils.cpp:358
CicMutex g_mutexLayouts
Definition: utils.cpp:67
DWORD g_dwOSInfo
Definition: utils.cpp:31
EXTERN_C BOOL WINAPI TF_GetThreadFlags(_In_ DWORD dwThreadId, _Out_ LPDWORD pdwFlags1, _Out_ LPDWORD pdwFlags2, _Out_ LPDWORD pdwFlags3)
Definition: utils.cpp:239
VOID InitCUASFlag(VOID)
Definition: utils.cpp:726
UINT g_uKeyTipHotKeyVKey
Definition: utils.cpp:78
VOID CheckAnchorStores(VOID)
Definition: utils.cpp:710
EXTERN_C HRESULT WINAPI TF_UnregisterLangBarAddIn(_In_ REFGUID rguid, _In_ DWORD dwFlags)
Definition: utils.cpp:505
HKL g_hklDefault
Definition: utils.cpp:32
CicMutex g_mutexAsm
Definition: utils.cpp:66
UINT g_msgLBUpdate
Definition: utils.cpp:52
UINT g_uLangHotKeyVKey2
Definition: utils.cpp:76
LONG g_cRefDll
Definition: utils.cpp:35
UINT g_msgCheckThreadInputIdel
Definition: utils.cpp:49
EXTERN_C HRESULT WINAPI TF_PostAllThreadMsg(_In_opt_ WPARAM wParam, _In_ DWORD dwFlags)
Definition: utils.cpp:432
BOOL g_bOnWow64
Definition: utils.cpp:29
UINT g_msgThreadMarshal
Definition: utils.cpp:48
EXTERN_C HRESULT WINAPI TF_CreateCategoryMgr(_Out_ ITfCategoryMgr **ppcat)
Definition: utils.cpp:256
void __cxa_pure_virtual(void)
Definition: utils.cpp:82
CicMutex g_mutexTMD
Definition: utils.cpp:68
BOOL gfSharedMemory
Definition: utils.cpp:34
EXTERN_C BOOL WINAPI TF_IsFullScreenWindowAcitvated(VOID)
Definition: utils.cpp:333
EXTERN_C HRESULT WINAPI TF_ClearLangBarAddIns(_In_ REFGUID guid)
Definition: utils.cpp:396
LPTSTR GetUserSIDString(void)
Definition: utils.cpp:91
CRITICAL_SECTION g_csDelayLoad
Definition: utils.cpp:27
EXTERN_C LONG WINAPI TF_CheckThreadInputIdle(_In_ DWORD dwThreadId, _In_ DWORD dwMilliseconds)
Definition: utils.cpp:384
EXTERN_C HRESULT WINAPI TF_CreateDisplayAttributeMgr(_Out_ ITfDisplayAttributeMgr **ppdam)
Definition: utils.cpp:283
EXTERN_C BOOL WINAPI TF_UninitSystem(VOID)
Definition: utils.cpp:456
TCHAR g_szUserUnique[MAX_PATH]
Definition: utils.cpp:58
static BOOL RunCPLSetting(LPCTSTR pszCmdLine)
Definition: utils.cpp:225
CRITICAL_SECTION g_cs
Definition: utils.cpp:25
DWORD g_dwAppCompatibility
Definition: utils.cpp:38
BOOL ProcessAttach(HINSTANCE hinstDLL)
@unimplemented
Definition: utils.cpp:766
EXTERN_C HRESULT WINAPI TF_RegisterLangBarAddIn(_In_ REFGUID rguid, _In_ LPCWSTR pszFilePath, _In_ DWORD dwFlags)
Definition: utils.cpp:468
UINT g_uLangHotKeyModifiers
Definition: utils.cpp:74
UINT g_msgStubCleanUp
Definition: utils.cpp:50
CicMutex g_mutexCompart
Definition: utils.cpp:65
UINT g_msgShowFloating
Definition: utils.cpp:51
UINT g_msgNuiMgrDirtyUpdate
Definition: utils.cpp:53
UINT g_msgRpcSendReceive
Definition: utils.cpp:47
void GetDesktopUniqueName(_In_ LPCTSTR pszName, _Out_ LPTSTR pszBuff, _In_ UINT cchBuff)
Definition: utils.cpp:164
UINT g_uACP
Definition: utils.cpp:30
EXTERN_C HRESULT WINAPI TF_RunInputCPL(VOID)
Definition: utils.cpp:541
#define debugstr_t
Definition: utils.cpp:189
UINT g_msgThreadTerminate
Definition: utils.cpp:44
BOOL InitLangChangeHotKey(VOID)
Definition: utils.cpp:587
UINT g_uKeyTipHotKeyVKey2
Definition: utils.cpp:79
UINT g_msgSetFocus
Definition: utils.cpp:43
TCHAR g_szAsmListCache[MAX_PATH]
Definition: utils.cpp:59
BOOL InitUserSidString(void)
Definition: utils.cpp:126
BOOL InitUniqueString(void)
Definition: utils.cpp:144
EXTERN_C BOOL WINAPI TF_InitSystem(VOID)
Definition: utils.cpp:444
CicFileMappingStatic g_SharedMemory
Definition: utils.cpp:71
TCHAR g_szTimListCache[MAX_PATH]
Definition: utils.cpp:60
UINT g_uKeyTipHotKeyModifiers
Definition: utils.cpp:77
BOOL g_fNoITextStoreAnchor
Definition: utils.cpp:39
UINT g_msgThreadItemChange
Definition: utils.cpp:45
EXTERN_C BOOL WINAPI TF_IsCtfmonRunning(VOID)
Definition: utils.cpp:571
BOOL FullPathExec(LPCTSTR pszExeFile, LPCTSTR pszCmdLine, UINT nCmdShow, BOOL bSysWinDir)
Definition: utils.cpp:192
EXTERN_C HICON WINAPI TF_GetLangIcon(_In_ LANGID LangID, _Out_ PWSTR pszText, _In_ INT cchText)
Definition: utils.cpp:320
EXTERN_C BOOL WINAPI TF_IsInMarshaling(_In_ DWORD dwThreadId)
Definition: utils.cpp:420
EXTERN_C HRESULT WINAPI TF_CUASAppFix(_In_ LPCSTR pszName)
Definition: utils.cpp:370
BOOL gf_CRT_INIT
Definition: utils.cpp:23
EXTERN_C HRESULT WINAPI TF_GetInputScope(_In_opt_ HWND hWnd, _Out_ ITfInputScope **ppInputScope)
Definition: utils.cpp:345
UINT g_uLangHotKeyVKey
Definition: utils.cpp:75
VOID ProcessDetach(HINSTANCE hinstDLL)
@unimplemented
Definition: utils.cpp:840
EXTERN_C HANDLE WINAPI TF_CreateCicLoadMutex(_Out_ LPBOOL pfWinLogon)
Definition: utils.cpp:268
BOOL g_fDllProcessDetached
Definition: utils.cpp:24
#define StringFromGUID2T
Definition: utils.cpp:188
CRITICAL_SECTION g_csInDllMain
Definition: utils.cpp:26
DWORD g_dwTLSIndex
Definition: utils.cpp:33
UINT g_msgLBarModal
Definition: utils.cpp:46
BOOL g_fUserSidString
Definition: utils.cpp:56
HINSTANCE g_hInst
Definition: utils.cpp:28
EXTERN_C BOOL WINAPI TF_DllDetachInOther(VOID)
Definition: utils.cpp:295
TCHAR g_szUserSidString[MAX_PATH]
Definition: utils.cpp:57
TCHAR g_szLayoutsCache[MAX_PATH]
Definition: utils.cpp:61
#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 HRESULT CategoryMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
EXTERN_C BOOL cicIsWow64(VOID)
Definition: cicbase.cpp:77
EXTERN_C void cicGetOSInfo(LPUINT puACP, LPDWORD pdwOSInfo)
Definition: cicbase.cpp:101
static void cicMemFree(LPVOID ptr)
Definition: cicbase.h:20
#define CIC_OSINFO_NT
Definition: cicbase.h:56
#define CIC_OSINFO_XPPLUS
Definition: cicbase.h:63
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
EXTERN_C HRESULT DisplayAttributeMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
#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:4227
LCID WINAPI GetSystemDefaultLCID(void)
Definition: locale.c:1235
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
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
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:348
#define CTF_COMPAT_DELAY_FIRST_ACTIVATE
Definition: mlng.h:10
LPCWSTR LPCWSTR LPCWSTR DWORD dwFlags
Definition: env.c:37
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
BYTE * PBYTE
Definition: pedump.c:66
long LONG
Definition: pedump.c:60
static const WCHAR szName[]
Definition: powrprof.c:45
#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
_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 DebugBreak(void)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
_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:2239
#define VK_NUMPAD0
Definition: winuser.h:2275
_In_ int cchText
Definition: winuser.h:4567
#define VK_SHIFT
Definition: winuser.h:2238
#define VK_OEM_3
Definition: winuser.h:2352
int WINAPI GetSystemMetrics(_In_ int)
#define SW_SHOWMINNOACTIVE
Definition: winuser.h:788
#define GetUserObjectInformation
Definition: winuser.h:5906
#define VK_MENU
Definition: winuser.h:2240
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