Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111/* * PROJECT: ReactOS msctfime.ime * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) * PURPOSE: Thread-local storage * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com> */
#include "msctfime.h"
WINE_DEFAULT_DEBUG_CHANNEL(msctfime);
DWORD TLS::s_dwTlsIndex = (DWORD)-1;
/// @implementedBOOL TLS::Initialize(){ s_dwTlsIndex = ::TlsAlloc(); return s_dwTlsIndex != (DWORD)-1;}
/// @implementedVOID TLS::Uninitialize(){ if (s_dwTlsIndex != (DWORD)-1) { ::TlsFree(s_dwTlsIndex); s_dwTlsIndex = (DWORD)-1; }}
/// @implementedTLS* TLS::GetTLS(){ if (s_dwTlsIndex == (DWORD)-1) return NULL;
return InternalAllocateTLS();}
/// @implementedTLS* TLS::PeekTLS(){ return (TLS*)::TlsGetValue(TLS::s_dwTlsIndex);}
/// @implementedTLS* TLS::InternalAllocateTLS(){ TLS *pTLS = TLS::PeekTLS(); if (pTLS) return pTLS;
if (DllShutdownInProgress()) return NULL;
pTLS = (TLS *)cicMemAllocClear(sizeof(TLS)); if (!pTLS) return NULL;
if (!::TlsSetValue(s_dwTlsIndex, pTLS)) { cicMemFree(pTLS); return NULL; }
pTLS->m_dwFlags1 |= 1; pTLS->m_dwUnknown2 |= 1; return pTLS;}
/// @implementedBOOL TLS::InternalDestroyTLS(){ TLS *pTLS = TLS::PeekTLS(); if (!pTLS) return FALSE;
if (pTLS->m_pBridge) pTLS->m_pBridge->Release(); if (pTLS->m_pProfile) pTLS->m_pProfile->Release(); if (pTLS->m_pThreadMgr) pTLS->m_pThreadMgr->Release();
cicMemFree(pTLS); ::TlsSetValue(s_dwTlsIndex, NULL); return TRUE;}
/// @implementedBOOL TLS::NonEACompositionEnabled(){ if (!m_NonEAComposition) { DWORD dwValue = 1;
CicRegKey regKey; LSTATUS error = regKey.Open(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\CTF\\CUAS")); if (error == ERROR_SUCCESS) { error = regKey.QueryDword(TEXT("NonEAComposition"), &dwValue); if (error != ERROR_SUCCESS) dwValue = 1; }
m_NonEAComposition = dwValue; }
return (m_NonEAComposition == 2);}