|
|
/****************************** Module Header ******************************\
* Module Name: clglobal.c * * Copyright (c) 1985 - 1999, Microsoft Corporation * * This module contains all of USER.DLL's global variables. These are all * instance-specific, i.e. each client has his own copy of these. In general, * there shouldn't be much reason to create instance globals. * * NOTE: In this case what we mean by global is that this data is shared by * all threads of a given process, but not shared between processes * or between the client and the server. None of this data is useful * (or even accessable) to the server. * * History: * 10-18-90 DarrinM Created. \***************************************************************************/
#include "precomp.h"
#pragma hdrstop
#ifdef LAZY_CLASS_INIT
BOOL gbClassesRegistered; #endif
/*
* We get this warning if we don't explicitly initalize gZero: * * C4132: 'gZero' : const object should be initialized * * But we can't explicitly initialize it since it is a union. So * we turn the warning off. */ #pragma warning(disable:4132)
CONST ALWAYSZERO gZero; #pragma warning(default:4132)
/*
* Amount wheel has been scrolled in a control less than WHEEL_DELTA. Each * control resets this variable to 0 in WM_KILLFOCUS, and verifies it is * 0 in WM_SETFOCUS. * CONSIDER: Should be per-queue rather than per client? */ int gcWheelDelta;
WCHAR awchSlashStar[] = L"\\*"; CHAR achSlashStar[] = "\\*";
PSERVERINFO gpsi; SHAREDINFO gSharedInfo; HMODULE hmodUser; // USER.DLL's hmodule
ULONG_PTR gHighestUserAddress;
BOOL gfServerProcess; // USER is linked on the CSR server side
BOOL gfSystemInitialized; // System has been initialized
ACCESS_MASK gamWinSta; // ACCESS_MASK for the current WindowStation
PVOID pUserHeap;
WCHAR szUSER32[] = TEXT("USER32"); CONST WCHAR szNull[2] = { TEXT('\0'), TEXT('\015') }; CONST WCHAR szOneChar[] = TEXT("0"); WCHAR szSLASHSTARDOTSTAR[] = TEXT("\\*"); /* This is a single "\" */
LPWSTR pwcHighContrastScheme; LPSTR pcHighContrastScheme;
/* Maps MessageBox type to number of buttons in the MessageBox */ CONST BYTE mpTypeCcmd[] = { 1, 2, 3, 3, 2, 2, 3 };
/* Maps MessageBox type to index into SEBbuttons array */ CONST BYTE mpTypeIich[] = { 0, 2, 5, 12, 9, 16, 19 };
CONST UINT SEBbuttons[] = { SEB_OK, SEB_HELP, SEB_OK, SEB_CANCEL, SEB_HELP, SEB_ABORT, SEB_RETRY, SEB_IGNORE, SEB_HELP, SEB_YES, SEB_NO, SEB_HELP, SEB_YES, SEB_NO, SEB_CANCEL, SEB_HELP, SEB_RETRY, SEB_CANCEL, SEB_HELP, SEB_CANCEL, SEB_TRYAGAIN, SEB_CONTINUE, SEB_HELP, };
ATOM atomMDIActivateProp;
#ifdef LAME_BUTTON
ATOM gatomLameButton; #endif
CRITICAL_SECTION gcsLookaside; CRITICAL_SECTION gcsHdc; CRITICAL_SECTION gcsClipboard; CRITICAL_SECTION gcsAccelCache;
#ifdef _JANUS_
BOOL gfEMIEnable; DWORD gdwEMIControl; BOOL gfDMREnable; HANDLE gEventSource; #endif
HDC ghdcBits2; HDC ghdcGray; HFONT ghFontSys; HBRUSH ghbrWindowText; int gcxGray; int gcyGray;
FPLPKTABBEDTEXTOUT fpLpkTabbedTextOut = UserLpkTabbedTextOut; FPLPKPSMTEXTOUT fpLpkPSMTextOut = UserLpkPSMTextOut; FPLPKDRAWTEXTEX fpLpkDrawTextEx = (FPLPKDRAWTEXTEX)NULL; PLPKEDITCALLOUT fpLpkEditControl = (PLPKEDITCALLOUT)NULL;
/*
* These are the resource call procedure addresses. If WOW is running, * it makes a call to set all these up to point to it. If it isn't * running, it defaults to the values you see below. */ PFNFINDA pfnFindResourceExA; // Assigned dynamically - _declspec (PFNFINDA)FindResourceExA,
PFNFINDW pfnFindResourceExW; // Assigned dynamically - _declspec (PFNFINDW)FindResourceExW,
PFNLOAD pfnLoadResource; // Assigned dynamically - _declspec (PFNLOAD)LoadResource,
PFNLOCK pfnLockResource = (PFNLOCK)_LockResource; PFNUNLOCK pfnUnlockResource = (PFNUNLOCK)_UnlockResource; PFNFREE pfnFreeResource = (PFNFREE)_FreeResource; PFNSIZEOF pfnSizeofResource; // Assigned dynamically - _declspec (PFNSIZEOF)SizeofResource
PFNLALLOC pfnLocalAlloc = (PFNLALLOC)DispatchLocalAlloc; PFNLREALLOC pfnLocalReAlloc = (PFNLREALLOC)DispatchLocalReAlloc; PFNLLOCK pfnLocalLock = (PFNLLOCK)DispatchLocalLock; PFNLUNLOCK pfnLocalUnlock = (PFNUNLOCK)DispatchLocalUnlock; PFNLSIZE pfnLocalSize = (PFNLSIZE)DispatchLocalSize; PFNLFREE pfnLocalFree = (PFNLFREE)DispatchLocalFree; PFNGETEXPWINVER pfnGetExpWinVer = RtlGetExpWinVer; PFN16GALLOC pfn16GlobalAlloc; PFN16GFREE pfn16GlobalFree; PFNEMPTYCB pfnWowEmptyClipBoard; PFNWOWWNDPROCEX pfnWowWndProcEx; PFNWOWDLGPROCEX pfnWowDlgProcEx; PFNWOWEDITNEXTWORD pfnWowEditNextWord; PFNWOWCBSTOREHANDLE pfnWowCBStoreHandle; PFNGETPROCMODULE16 pfnWowGetProcModule; PFNWOWTELLWOWTHEHDLG pfnWOWTellWOWThehDlg; PFNWOWMSGBOXINDIRECTCALLBACK pfnWowMsgBoxIndirectCallback; PFNWOWILSTRCMP pfnWowIlstrcmp; PFNWOWTASK16SCHEDNOTIFY pfnWowTask16SchedNotify;
/*
* UserApiHook * * It is important to keep guah initialization in sync with ResetUserApiHook() * and the definition of USERAPIHOOK. This initialization must be done here * so that the function pointers are valid immediately on startup. */ BYTE grgbDwpLiteHookMsg[(WM_USER + 7) / 8]; BYTE grgbWndLiteHookMsg[(WM_USER + 7) / 8]; BYTE grgbDlgLiteHookMsg[(WM_USER + 7) / 8];
HMODULE ghmodUserApiHook; USERAPIHOOK guah = { sizeof(USERAPIHOOK), RealDefWindowProcA, RealDefWindowProcW, { NULL, 0 }, RealGetScrollInfo, RealSetScrollInfo, RealEnableScrollBar, RealAdjustWindowRectEx, RealSetWindowRgn, { DefaultOWP, DefaultOWP, NULL, 0 }, { DefaultOWP, DefaultOWP, NULL, 0 }, RealGetSystemMetrics, RealSystemParametersInfoA, RealSystemParametersInfoW, ForceResetUserApiHook, RealDrawFrameControl, RealDrawCaption, RealMDIRedrawFrame }; BOOL gfUserApiHook; LONG gcCallUserApiHook; LONG gcLoadUserApiHook; RTL_CRITICAL_SECTION gcsUserApiHook; INITUSERAPIHOOK gpfnInitUserApi;
#ifdef MESSAGE_PUMP_HOOK
/*
* MessagePumpHook */ BOOL gfMessagePumpHook; LONG gcLoadMPH; MESSAGEPUMPHOOK gmph = { sizeof(gmph), NtUserRealInternalGetMessage, NtUserRealWaitMessageEx, RealGetQueueStatus, RealMsgWaitForMultipleObjectsEx, }; RTL_CRITICAL_SECTION gcsMPH; INITMESSAGEPUMPHOOK gpfnInitMPH;
#if TEST_DUSER_WMH
HDCONTEXT g_hctx = NULL; // DirectUser Context
#endif // TEST_DUSER_WMH
#endif // MESSAGE_PUMP_HOOK
/*
* Menu Drag and Drop */ HINSTANCE ghinstOLE; FARPROC gpfnOLEOleUninitialize; FARPROC gpfnOLERegisterDD; FARPROC gpfnOLERevokeDD; FARPROC gpfnOLEDoDD;
/*
* Accelerator table resources list. */ PACCELCACHE gpac;
/*
* IME Window Handling. */ DWORD gfConIme = UNKNOWN_CONIME;
/*
* Used for TS Services Message Box handling */ FARPROC gfnWinStationSendMessageW; HINSTANCE ghinstWinStaDll;
/*
* Are we winlogon? */ BOOL gfLogonProcess;
#if DBG
USERDBGGLOBALS gDbgGlobals; #endif
|