Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 2001, Microsoft Corporation
Module Name:
tls.h
Abstract:
This file defines the TLS.
Author:
Revision History:
Notes:
--*/
#ifndef _TLS_H_
#define _TLS_H_
#include "boolean.h"
#include "cregkey.h"
#include "globals.h"
const TCHAR c_szKeyCUAS[] = TEXT("SOFTWARE\\Microsoft\\CTF\\CUAS"); const TCHAR c_szNonEAComposition[] = TEXT("NonEAComposition"); const DWORD c_dwDisabled = 1; const DWORD c_dwEnabled = 2;
class CicBridge; class CicProfile;
class TLS { public: static inline BOOL Initialize() { dwTLSIndex = TlsAlloc(); if (dwTLSIndex == TLS_OUT_OF_INDEXES) return FALSE;
return TRUE; }
static inline void Uninitialize() { if (dwTLSIndex != TLS_OUT_OF_INDEXES) { TlsFree(dwTLSIndex); dwTLSIndex = TLS_OUT_OF_INDEXES; } }
static inline TLS* GetTLS() { //
// Should allocate TLS data if doesn't exist.
//
return InternalAllocateTLS(); }
static inline TLS* ReferenceTLS() { //
// Shouldn't allocate TLS data even TLS data doesn't exist.
//
return (TLS*)TlsGetValue(dwTLSIndex); }
static inline BOOL DestroyTLS() { return InternalDestroyTLS(); }
inline DWORD GetSystemInfoFlags() { return dwSystemInfoFlags; }
inline VOID SetSystemInfoFlags(DWORD dw) { dwSystemInfoFlags = dw; }
inline CicBridge* GetCicBridge() { return pCicBridge; }
inline VOID SetCicBridge(CicBridge* pv) { pCicBridge = pv; }
inline CicProfile* GetCicProfile() { return pCicProfile; }
inline VOID SetCicProfile(CicProfile* pv) { pCicProfile = pv; }
inline ITfThreadMgr_P* GetTIM() { return ptim; }
inline VOID SetTIM(ITfThreadMgr_P* pv) { ptim = pv; }
inline BOOL IsCTFAware() { return CTFAware.IsSetFlag(); }
inline BOOL IsCTFUnaware() { return CTFAware.IsResetFlag(); }
inline VOID SetCTFAware() { CTFAware.SetFlag(); }
inline VOID ResetCTFAware() { CTFAware.ResetFlag(); }
inline BOOL IsAIMMAware() { return AIMMAware.IsSetFlag(); }
inline VOID SetAIMMAware() { AIMMAware.SetFlag(); }
inline VOID ResetAIMMAware() { AIMMAware.ResetFlag(); }
inline BOOL IsEnabledKeystrokeFeed() { return EnabledKeystrokeFeed.IsSetFlag(); }
inline VOID SetEnabledKeystrokeFeed() { EnabledKeystrokeFeed.SetFlag(); }
inline VOID ResetEnabledKeystrokeFeed() { EnabledKeystrokeFeed.ResetFlag(); }
inline VOID SetDeactivatedOnce() { DeactivatedOnce.SetFlag(); }
inline BOOL IsDeactivatedOnce() { return DeactivatedOnce.IsSetFlag(); }
inline BOOL NonEACompositionEnabled() { if (!dwNonEAComposition) { CMyRegKey regkey; DWORD dw; if (S_OK != regkey.Open(HKEY_CURRENT_USER, c_szKeyCUAS, KEY_READ) || S_OK != regkey.QueryValue(dw, c_szNonEAComposition)) { dw = c_dwDisabled; } dwNonEAComposition = dw; // dw == 1 disabled, 2 enabled
} return dwNonEAComposition == c_dwEnabled; }
private: DWORD dwSystemInfoFlags; CicBridge* pCicBridge; CicProfile* pCicProfile; ITfThreadMgr_P* ptim; CBoolean CTFAware; CBoolean AIMMAware; CBoolean EnabledKeystrokeFeed; CBoolean DeactivatedOnce; DWORD dwNonEAComposition;
private: static inline TLS* InternalAllocateTLS() { TLS* ptls = (TLS*)TlsGetValue(dwTLSIndex); if (ptls == NULL) { if (DllShutDownInProgress()) return NULL;
if ((ptls = (TLS*)cicMemAllocClear(sizeof(TLS))) == NULL) return NULL;
if (! TlsSetValue(dwTLSIndex, ptls)) { cicMemFree(ptls); return NULL; }
//
// Set Inital value
//
ptls->SetCTFAware(); // Set CTFAware
ptls->SetEnabledKeystrokeFeed(); } return ptls; }
static BOOL InternalDestroyTLS();
private: static DWORD dwTLSIndex; };
#endif // _TLS_H_
|