|
|
/****************************** Module Header ******************************\
* Module Name: globals.c * * Copyright (c) 1985 - 1999, Microsoft Corporation * * This module contains all the server's global variables. One must be * executing on the server's context to manipulate any of these variables. * Serializing access to them is also a good idea. * * History: * 10-15-90 DarrinM Created. \***************************************************************************/
#include "precomp.h"
#pragma hdrstop
#ifdef AUTORUN_CURSOR
/*
* Timer for autorun cursor. */ UINT_PTR gtmridAutorunCursor; #endif
/*
* Per user data is global in non-Hydra. */ DWORD gdwPUDFlags = ACCF_FIRSTTICK | PUDF_BEEP | PUDF_ANIMATE;
/*
* Wallpaper Data. */ HBITMAP ghbmWallpaper; HPALETTE ghpalWallpaper; SIZERECT gsrcWallpaper; UINT gwWPStyle; HBITMAP ghbmDesktop; LPWSTR gpszWall;
/*
* Policy Settings. */ DWORD gdwPolicyFlags = POLICY_ALL;
/*
* SafeBoot */ #if DBG
DWORD gDrawVersionAlways = TRUE; #else
DWORD gDrawVersionAlways; #endif
/*
* TS override flag for painting desktop version. */ DWORD gdwTSExcludeDesktopVersion;
/*
* External drivers */ BOOL gfUnsignedDrivers;
/*
* Full-Drag. */ HRGN ghrgnUpdateSave; int gnUpdateSave;
PWND gspwndAltTab;
PWND gspwndShouldBeForeground;
/*
* full screen variables */ PWND gspwndScreenCapture; PWND gspwndInternalCapture; PWND gspwndFullScreen;
/*
* pre-cached monitor for mode changes */ PMONITOR gpMonitorCached;
/*
* logon notify window */ PWND gspwndLogonNotify;
PKEVENT gpEventDiconnectDesktop;
/*
* handle for WinSta0_DesktopSwitch event * * Note: originally intended for Hydra support, * now some other modules rely on this event. * Consider this as exposed. */ HANDLE ghEventSwitchDesktop; PKEVENT gpEventSwitchDesktop;
/*
* Thread Info Variables */ PTHREADINFO gptiTasklist; PTHREADINFO gptiShutdownNotify; PTHREADINFO gptiLockUpdate; PTHREADINFO gptiForeground; PTHREADINFO gptiBlockInput; PWOWTHREADINFO gpwtiFirst; PWOWPROCESSINFO gpwpiFirstWow;
/*
* Queue Variables */ PQ gpqForeground; PQ gpqForegroundPrev; PQ gpqCursor;
/*
* Accessibility globals */ FILTERKEYS gFilterKeys; STICKYKEYS gStickyKeys; MOUSEKEYS gMouseKeys; ACCESSTIMEOUT gAccessTimeOut; TOGGLEKEYS gToggleKeys; SOUNDSENTRY gSoundSentry;
HIGHCONTRAST gHighContrast; WCHAR gHighContrastDefaultScheme[MAX_SCHEME_NAME_SIZE];
/*
* Fade animation globals */ FADE gfade;
/*
* FilterKeys Support */ UINT_PTR gtmridFKActivation; UINT_PTR gtmridFKResponse; UINT_PTR gtmridFKAcceptanceDelay; int gFilterKeysState;
KE gFKKeyEvent; CONST PKE gpFKKeyEvent = &gFKKeyEvent; ULONG gFKExtraInformation; int gFKNextProcIndex;
/*
* ToggleKeys Support */ UINT_PTR gtmridToggleKeys; ULONG gTKExtraInformation; int gTKNextProcIndex;
/*
* TimeOut Support */ UINT_PTR gtmridAccessTimeOut;
/*
* MouseKeys Support */ WORD gwMKButtonState; WORD gwMKCurrentButton = MOUSE_BUTTON_LEFT; UINT_PTR gtmridMKMoveCursor; LONG gMKDeltaX; LONG gMKDeltaY; UINT giMouseMoveTable;
HWND ghwndSoundSentry; UINT_PTR gtmridSoundSentry;
MOUSECURSOR gMouseCursor;
/*
* Multilingual keyboard layout support. */ PKL gspklBaseLayout; HKL gLCIDSentToShell; DWORD gSystemFS; // System font's font signature (single bit)
KBDLANGTOGGLE gLangToggle[] = { VK_MENU, 0, KLT_ALT, 0, SCANCODE_LSHIFT, KLT_LEFTSHIFT, 0, SCANCODE_RSHIFT, KLT_RIGHTSHIFT }; int gLangToggleKeyState;
/*
* Multiple flag for hex Alt+NumPad mode. */ BYTE gfInNumpadHexInput; BOOL gfEnableHexNumpad;
/*
* Grave accent keyboard switch for thai locales */ BOOL gbGraveKeyToggle;
/*
* Points to currently active Keyboard Layer tables */ PKBDTABLES gpKbdTbl = &KbdTablesFallback; PKL gpKL; BYTE gSystemCPCharSet = ANSI_CHARSET; // System's input locale charset
PKBDNLSTABLES gpKbdNlsTbl; DWORD gdwKeyboardAttributes; // see KLLF_SHIFTLOCK etc.
DWORD gtimeStartCursorHide; RECT grcCursorClip; ULONG_PTR gdwMouseMoveExtraInfo; DWORD gdwMouseMoveTimeStamp; LASTINPUT glinp; POINT gptCursorAsync; PPROCESSINFO gppiInputProvider; PPROCESSINFO gppiLockSFW; UINT guSFWLockCount; #if DBG
BOOL gfDebugForegroundIgnoreDebugPort; #endif
/*
* Cursor related Variables */ PCURSOR gpcurLogCurrent; PCURSOR gpcurPhysCurrent; RECT grcVDMCursorBounds; DWORD gdwLastAniTick; UINT_PTR gidCursorTimer;
PWND gspwndActivate; PWND gspwndLockUpdate; PWND gspwndMouseOwner; HWND ghwndSwitch;
UINT gwMouseOwnerButton; BOOL gbMouseButtonsRecentlySwapped;
UINT gdtMNDropDown;
int gcountPWO; /* count of pwo WNDOBJs in gdi */ int gnKeyboardSpeed = 15; int giScreenSaveTimeOutMs; BOOL gbBlockSendInputResets;
PBWL gpbwlList;
UINT gdtDblClk = 500;
/*
* TrackMouseEvent related globals */ UINT gcxMouseHover; UINT gcyMouseHover; UINT gdtMouseHover;
CAPTIONCACHE gcachedCaptions[CCACHEDCAPTIONS];
/*
* list of thread attachments */ PATTACHINFO gpai;
PDESKTOP gpdeskRecalcQueueAttach;
PWND gspwndCursor; PPROCESSINFO gppiStarting; PPROCESSINFO gppiList; PPROCESSINFO gppiWantForegroundPriority; PPROCESSINFO gppiForegroundOld;
PW32JOB gpJobsList;
UINT_PTR gtmridAniCursor;
int gcHotKey; PHOTKEYSTRUCT gpHotKeyList; int gcHotKeyAlloc;
/*
* IME HotKeys */ PIMEHOTKEYOBJ gpImeHotKeyListHeader;
int gMouseSpeed; int gMouseThresh1; int gMouseThresh2; int gMouseSensitivityFactor = 256; int gMouseSensitivity; int gMouseTrails; int gMouseTrailsToHide; UINT_PTR gtmridMouseTrails;
UINT guDdeSendTimeout;
INT gnFastAltTabRows; /* Rows of icons in quick switch window */ INT gnFastAltTabColumns; /* Columns of icons in quick switch window */
DWORD gdwThreadEndSession; /* Shutting down system? */
HBRUSH ghbrHungApp; /* Brush used to redraw hung app windows. */
HBITMAP ghbmBits; HBITMAP ghbmCaption;
int gcxCaptionFontChar; int gcyCaptionFontChar; HFONT ghSmCaptionFont; int gcxSmCaptionFontChar; int gcySmCaptionFontChar;
HFONT ghMenuFont; HFONT ghMenuFontDef; int gcxMenuFontChar; int gcyMenuFontChar; int gcxMenuFontOverhang; int gcyMenuFontExternLeading; int gcyMenuFontAscent; int gcyMenuScrollArrow;
#ifdef LAME_BUTTON
HFONT ghLameFont; DWORD gdwLameFlags; #endif
#if DBG
UINT guModalMenuStateCount; #endif
/*
* From mnstate.c */ POPUPMENU gpopupMenu; MENUSTATE gMenuState;
HFONT ghStatusFont; HFONT ghIconFont;
/*
* Cached SMWP structure */ SMWP gSMWP;
/*
* SystemParametersInfo bit mask and DWORD array. * * Bit mask. Manipulate these values using the TestUP, SetUP and ClearUP macros. * Set the default value here by ORing the corresponding UPBOOLMask value. * Write the actual value here to make it easier to read the value stored * in the registry. OR the value even if defaulting to 0; just make sure to * preceed with a not (!) operator. * Note that this is an array of DWORDs, so if your value happens to start a new * DWORD, make sure to add a comma at the end of previous UPMask line. * * This initialization is made just for documentation and it doesn't cost anything. * The default values are actually read from the registry. */ DWORD gpdwCPUserPreferencesMask [SPI_BOOLMASKDWORDSIZE] = { !0x00000001 /* !ACTIVEWINDOWTRACKING */ | 0x00000002 /* MENUANIMATION */ | 0x00000004 /* COMBOBOXANIMATION */ | 0x00000008 /* LISTBOXSMOOTHSCROLLING */ | 0x00000010 /* GRADIENTCAPTIONS */ | !0x00000020 /* KEYBOARDCUES = MENUUNDERLINES */ | !0x00000040 /* !ACTIVEWNDTRKZORDER */ | 0x00000080 /* HOTTRACKING */ | 0x00000200 /* MENUFADE */ | 0x00000400 /* SELECTIONFADE */ | 0x00000800 /* TOOLTIPANIMATION */ | 0x00001000 /* TOOLTIPFADE */ | 0x00002000 /* CURSORSHADOW */ | !0x00008000 /* CLICKLOCK */ | 0x00010000 /* MOUSEVANISH */ | 0x00020000 /* FLATMENU */ | !0x00040000 /* DROPSHADOW */ | 0x80000000 /* UIEFFECTS */ };
/*
* SPI_GET/SETUSERPREFENCES. * Each SPI_UP_* define in winuser.w must have a corresponding entry here. */ PROFILEVALUEINFO gpviCPUserPreferences[1 + SPI_DWORDRANGECOUNT] = { /*Default Registry key name Registry value name */ {0, PMAP_DESKTOP, (LPCWSTR)STR_USERPREFERENCESMASK}, {200000, PMAP_DESKTOP, (LPCWSTR)STR_FOREGROUNDLOCKTIMEOUT}, {0, PMAP_DESKTOP, (LPCWSTR)STR_ACTIVEWNDTRKTIMEOUT}, {3, PMAP_DESKTOP, (LPCWSTR)STR_FOREGROUNDFLASHCOUNT}, {1, PMAP_DESKTOP, (LPCWSTR)STR_CARETWIDTH}, {1200, PMAP_DESKTOP, (LPCWSTR)STR_CLICKLOCKTIME}, {1, PMAP_DESKTOP, (LPCWSTR)STR_FONTSMOOTHINGTYPE}, {0, PMAP_DESKTOP, (LPCWSTR)STR_FONTSMOOTHINGGAMMA}, /* 0 mean use the default from the display driver */ {1, PMAP_DESKTOP, (LPCWSTR)STR_FOCUSBORDERWIDTH}, {1, PMAP_DESKTOP, (LPCWSTR)STR_FOCUSBORDERHEIGHT}, {1, PMAP_DESKTOP, (LPCWSTR)STR_FONTSMOOTHINGORIENTATION}, };
/*
* Sys expunge control data. */ DWORD gdwSysExpungeMask; // hmods to be expunged
DWORD gcSysExpunge; // current count of expunges performed
/*
* System classes */ PCLS gpclsList;
PCURSOR gpcurFirst;
SYSCFGICO gasyscur[COCR_CONFIGURABLE] = { {OCR_NORMAL, STR_CURSOR_ARROW , NULL }, // OCR_ARROW_DEFAULT
{OCR_IBEAM, STR_CURSOR_IBEAM , NULL }, // OCR_IBEAM_DEFAULT
{OCR_WAIT, STR_CURSOR_WAIT , NULL }, // OCR_WAIT_DEFAULT
{OCR_CROSS, STR_CURSOR_CROSSHAIR , NULL }, // OCR_CROSS_DEFAULT
{OCR_UP, STR_CURSOR_UPARROW , NULL }, // OCR_UPARROW_DEFAULT
{OCR_SIZENWSE, STR_CURSOR_SIZENWSE , NULL }, // OCR_SIZENWSE_DEFAULT
{OCR_SIZENESW, STR_CURSOR_SIZENESW , NULL }, // OCR_SIZENESW_DEFAULT
{OCR_SIZEWE, STR_CURSOR_SIZEWE , NULL }, // OCR_SIZEWE_DEFAULT
{OCR_SIZENS, STR_CURSOR_SIZENS , NULL }, // OCR_SIZENS_DEFAULT
{OCR_SIZEALL, STR_CURSOR_SIZEALL , NULL }, // OCR_SIZEALL_DEFAULT
{OCR_NO, STR_CURSOR_NO , NULL }, // OCR_NO_DEFAULT
{OCR_APPSTARTING, STR_CURSOR_APPSTARTING, NULL }, // OCR_APPSTARTING_DEFAULT
{OCR_HELP, STR_CURSOR_HELP , NULL }, // OCR_HELP_DEFAULT
{OCR_NWPEN, STR_CURSOR_NWPEN , NULL }, // OCR_NWPEN_DEFAULT
{OCR_HAND, STR_CURSOR_HAND , NULL }, // OCR_HAND_DEFAULT
{OCR_ICON, STR_CURSOR_ICON , NULL }, // OCR_ICON_DEFAULT
{OCR_AUTORUN, STR_CURSOR_AUTORUN , NULL }, // OCR_AUTORUN_DEFAULT
};
SYSCFGICO gasysico[COIC_CONFIGURABLE] = { {OIC_SAMPLE, STR_ICON_APPLICATION , NULL }, // OIC_APPLICATION_DEFAULT
{OIC_WARNING, STR_ICON_HAND , NULL }, // OIC_WARNING_DEFAULT
{OIC_QUES, STR_ICON_QUESTION , NULL }, // OIC_QUESTION_DEFAULT
{OIC_ERROR, STR_ICON_EXCLAMATION , NULL }, // OIC_ERROR_DEFAULT
{OIC_INFORMATION, STR_ICON_ASTERISK , NULL }, // OIC_INFORMATION_DEFAULT
{OIC_WINLOGO, STR_ICON_WINLOGO , NULL }, // OIC_WINLOGO_DEFAULT
};
/*
* Screen Saver Info */ PPROCESSINFO gppiScreenSaver; POINT gptSSCursor;
/*
* Orphaned fullscreen mode changes that DDraw used to cleanup. */ PPROCESSINFO gppiFullscreen;
/*
* accessibility byte-size data */ BYTE gLastVkDown; BYTE gBounceVk; BYTE gPhysModifierState; BYTE gCurrentModifierBit; BYTE gPrevModifierState; BYTE gLatchBits; BYTE gLockBits; BYTE gTKScanCode; BYTE gMKPreviousVk; BYTE gbMKMouseMode;
PSCANCODEMAP gpScancodeMap;
BYTE gStickyKeysLeftShiftCount; // # of consecutive left shift key presses.
BYTE gStickyKeysRightShiftCount; // # of consecutive right shift key presses.
/*
* Some terminal data is global in non-Hydra. */ DWORD gdwGTERMFlags; // GTERMF_ flags
PTHREADINFO gptiRit; PDESKTOP grpdeskRitInput; PKEVENT gpkeMouseData;
/*
* Video Information */ BYTE gbFullScreen = GDIFULLSCREEN; PDISPLAYINFO gpDispInfo; BOOL gbMDEVDisabled;
/*
* Count of available cacheDC's. This is used in determining a threshold * count of DCX_CACHE types available. */ int gnDCECount;
int gnVisibleRedirectedCount;
/*
* Hung redraw list */ PVWPL gpvwplHungRedraw;
/*
* SetWindowPos() related globals */ HRGN ghrgnInvalidSum; HRGN ghrgnVisNew; HRGN ghrgnSWP1; HRGN ghrgnValid; HRGN ghrgnValidSum; HRGN ghrgnInvalid;
HRGN ghrgnInv0; // Temp used by InternalInvalidate()
HRGN ghrgnInv1; // Temp used by InternalInvalidate()
HRGN ghrgnInv2; // Temp used by InternalInvalidate()
HDC ghdcMem; HDC ghdcMem2;
/*
* DC Cache related globals */ HRGN ghrgnGDC; // Temp used by GetCacheDC et al
/*
* SPB related globals */ HRGN ghrgnSCR; // Temp used by SpbCheckRect()
HRGN ghrgnSPB1; HRGN ghrgnSPB2;
/*
* ScrollWindow/ScrollDC related globals */ HRGN ghrgnSW; // Temps used by ScrollDC/ScrollWindow
HRGN ghrgnScrl1; HRGN ghrgnScrl2; HRGN ghrgnScrlVis; HRGN ghrgnScrlSrc; HRGN ghrgnScrlDst; HRGN ghrgnScrlValid;
/*
* General Device and Driver information */ PDEVICEINFO gpDeviceInfoList; PERESOURCE gpresDeviceInfoList; #if DBG
DWORD gdwDeviceInfoListCritSecUseCount; // bumped for every enter and leave
DWORD gdwInAtomicDeviceInfoListOperation; // inc/dec for BEGIN/ENDATOMICDEVICEINFOLISTCHECK
#endif
PDRIVER_OBJECT gpWin32kDriverObject; DWORD gnRetryReadInput;
/*
* Mouse Information */ MOUSEEVENT gMouseEventQueue[NELEM_BUTTONQUEUE]; DWORD gdwMouseQueueHead; DWORD gdwMouseEvents; PERESOURCE gpresMouseEventQueue; int gnMice;
#ifdef GENERIC_INPUT
/*
* USB based Human Input Device (HID) Information */ PKEVENT gpkeHidChange; HID_REQUEST_TABLE gHidRequestTable;
/*
* Number of the HID device currently attached to the system */ int gnHid;
/*
* Number of the processes that are HID aware * N.b. this may not include the process only interested in * raw input of the legacy devices (kbd/mouse) */ int gnHidProcess;
#endif
/*
* Keyboard Information */ KEYBOARD_ATTRIBUTES gKeyboardInfo = { // Initial default settings:
{4, 0}, // Keyboard Identifier (Type, Subtype)
1, // KeyboardMode (Scancode Set 1)
12, // NumberOfFunction keys
3, // NumberOfIndicators (CapsLock, NumLock ScrollLock)
104, // NumberOfKeysTotal
0, // InputDataQueueLength
{0, 0, 0}, // KeyRepeatMinimum (UnitId, Rate, Delay)
{0, 0, 0}, // KeyRepeatMaximum (UnitId, Rate, Delay)
}; CONST KEYBOARD_ATTRIBUTES gKeyboardDefaultInfo = { // Initial default settings:
{4, 0}, // Keyboard Identifier (Type, Subtype)
1, // KeyboardMode (Scancode Set 1)
12, // NumberOfFunction keys
3, // NumberOfIndicators (CapsLock, NumLock ScrollLock)
104, // NumberOfKeysTotal
0, // InputDataQueueLength
{0, 2, 250}, // KeyRepeatMinimum (UnitId, Rate, Delay)
{0, 30, 1000}, // KeyRepeatMaximum (UnitId, Rate, Delay)
};
KEYBOARD_INDICATOR_PARAMETERS gklp; KEYBOARD_INDICATOR_PARAMETERS gklpBootTime; KEYBOARD_TYPEMATIC_PARAMETERS gktp; int gnKeyboards;
/*
* This is the IO Status block used for IOCTL_KEYBOARD_ICA_SCANMAP, * IOCTL_KEYBOARD_QUERY_ATTRIBUTES and IOCTL_KEYBOARD_SET_INDICATORS */ IO_STATUS_BLOCK giosbKbdControl;
/*
* IME status for keyboard device */ KEYBOARD_IME_STATUS gKbdImeStatus;
/*
* Async key state tables. gafAsyncKeyState holds the down bit and toggle * bit, gafAsyncKeyStateRecentDown hold the bits indicates a key has gone * down since the last read. */ BYTE gafAsyncKeyState[CBKEYSTATE]; BYTE gafAsyncKeyStateRecentDown[CBKEYSTATERECENTDOWN];
/*
* Raw Key state: this is the low-level async keyboard state. * (assuming Scancodes are correctly translated to Virtual Keys). It is used * for modifying and processing key events as they are received in ntinput.c * The Virtual Keys recorded here are obtained directly from the Virtual * Scancode via the awVSCtoVK[] table: no shift-state, numlock or other * conversions are applied. * This IS affected by injected keystrokes (SendInput, keybd_event) so that * on-screen-keyboards and other accessibility components work just like the * real keyboard: with the exception of the SAS (Ctrl-Alt-Del), which checks * real physically pressed modifier keys (gfsSASModifiersDown). * Left & right SHIFT, CTRL and ALT keys are distinct. (VK_RSHIFT etc.) * See also: SetRawKeyDown() etc. */ BYTE gafRawKeyState[CBKEYSTATE]; BOOLEAN gfKanaToggle;
DWORD gdwUpdateKeyboard; HARDERRORHANDLER gHardErrorHandler;
/*
* WinLogon specific information: * Note: SAS modifiers are a combination of MOD_SHIFT, MOD_CONTROL, MOD_ALT * not a combination of KBDSHIFT, KBDCTRL, KBDALT (different values!) */ UINT gfsSASModifiers; // SAS modifiers
UINT gfsSASModifiersDown; // SAS modifiers really physically down
UINT gvkSAS; // The Secure Attention Sequence (SAS) key.
/*
* IME status for shell and keyboard driver notification */ DWORD gdwIMEOpenStatus = 0xffffffff; DWORD gdwIMEConversionStatus = 0xffffffff; HIMC gHimcFocus = (HIMC)(INT_PTR)(INT)0xffffffff; BOOL gfIMEShowStatus;
#ifdef MOUSE_IP
/*
* Sonar */ int giSonarRadius = -1; BYTE gbLastVkForSonar; BYTE gbVkForSonarKick = VK_CONTROL; POINT gptSonarCenter;
#endif
/*
* Clicklock */ BOOL gfStartClickLock; DWORD gdwStartClickLockTick;
/*
* The global array used by GetMouseMovePointsEx */ MOUSEMOVEPOINT gaptMouse[MAX_MOUSEPOINTS];
/*
* Index in the gaptMouse array where the next mouse point will * be written. gptInd goes circular in the gaptMouse array. * It is initialized to 1 so the first point is (0, 0) */ UINT gptInd = 1;
/*
* 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)
PSMS gpsmsList;
TERMINAL gTermIO; TERMINAL gTermNOIO;
PWINDOWSTATION grpWinStaList;
/*
* the logon desktop */ PDESKTOP grpdeskLogon;
HANDLE CsrApiPort; CONST LUID luidSystem = SYSTEM_LUID;
PKBDFILE gpkfList;
PTHREADINFO gptiCurrent; PTIMER gptmrFirst; PKTIMER gptmrMaster; DWORD gcmsLastTimer; BOOL gbMasterTimerSet;
/*
* Time this session was created. */ ULONGLONG gSessionCreationTime;
BOOL gbDisableAlpha;
/*
* This constant is the max USER handles allowed in a process. It is * meant to prevent runaway apps from eating the system. It is changed * via a registry setting -- PMAP_WINDOWSM/USERProcessHandleQuota. */ LONG gUserProcessHandleQuota;
/*
* This global variable limits the maximum number of posted message * per thread. If the number of message posted to a thread exceeds * this value, PostMessage will fail. */ DWORD gUserPostMessageLimit;
/*
* Active Accessibility - Window Events */ PEVENTHOOK gpWinEventHooks; // list of installed hooks
PNOTIFY gpPendingNotifies; // FILO of outstanding notifications
PNOTIFY gpLastPendingNotify; // end of above list.
DWORD gdwDeferWinEvent; // Defer notification is > 0
/*
* This is the timeout value used for callbacks to low level hook procs. */ int gnllHooksTimeout;
/*
* UserApiHook */ int gihmodUserApiHook = -1; ULONG_PTR goffPfnInitUserApiHook; PPROCESSINFO gppiUserApiHook;
/*
* gpusMouseVKey */ extern CONST USHORT ausMouseVKey[]; PUSHORT gpusMouseVKey = (PUSHORT)ausMouseVKey;
USHORT gNumLockVk = VK_NUMLOCK; USHORT gOemScrollVk = VK_SCROLL;
CONST WCHAR szNull[2] = { TEXT('\0'), TEXT('\015') };
WCHAR szWindowStationDirectory[MAX_SESSION_PATH];
CONST WCHAR szOneChar[] = TEXT("0"); CONST WCHAR szY[] = TEXT("Y"); CONST WCHAR szy[] = TEXT("y"); CONST WCHAR szN[] = TEXT("N");
HBRUSH ghbrWhite; HBRUSH ghbrBlack; HFONT ghFontSys;
HANDLE hModuleWin; // win32k.sys hmodule
HANDLE hModClient; // user32.dll hModule
#if DBG
LONG TraceInitialization; #endif
DESKTOPINFO diStatic;
/*
* DWORD incremented with each new desktop, so GDI can match display devices * with desktops appropriately. Since at boot time there is no desktop * structure, we cannot use the desktop itself for this purpose. */ ULONG gdwDesktopId = GW_DESKTOP_ID + 1;
PERESOURCE gpresUser; PFAST_MUTEX gpHandleFlagsMutex;
PROC gpfnwp[ICLS_MAX];
#ifdef HUNGAPP_GHOSTING
PKEVENT gpEventScanGhosts; ATOM gatomGhost; #endif
ATOM gatomShadow;
ATOM gatomConsoleClass; ATOM gatomFirstPinned; ATOM gatomLastPinned;
ATOM gatomMessage; ATOM gaOleMainThreadWndClass; ATOM gaFlashWState; ATOM atomCheckpointProp; ATOM atomDDETrack; ATOM atomQOS; ATOM atomDDEImp; ATOM atomWndObj; ATOM atomImeLevel;
ATOM atomLayer;
#ifdef POOL_INSTR
DWORD gdwAllocCrt; // the index for the current allocation
#endif // POOL_INSTR
UINT guiOtherWindowCreated; UINT guiOtherWindowDestroyed; UINT guiActivateShellWindow;
ATOM atomUSER32;
HANDLE gpidLogon; PEPROCESS gpepCSRSS; PEPROCESS gpepInit;
int giLowPowerTimeOutMs; int giPowerOffTimeOutMs;
/*
* Security info */
CONST GENERIC_MAPPING KeyMapping = {KEY_READ, KEY_WRITE, KEY_EXECUTE, KEY_ALL_ACCESS}; CONST GENERIC_MAPPING WinStaMapping = { WINSTA_ENUMDESKTOPS | WINSTA_READATTRIBUTES | WINSTA_ENUMERATE | WINSTA_READSCREEN | STANDARD_RIGHTS_READ,
WINSTA_ACCESSCLIPBOARD | WINSTA_CREATEDESKTOP | WINSTA_WRITEATTRIBUTES | STANDARD_RIGHTS_WRITE,
WINSTA_ACCESSGLOBALATOMS | WINSTA_EXITWINDOWS | STANDARD_RIGHTS_EXECUTE,
WINSTA_ENUMDESKTOPS | WINSTA_READATTRIBUTES | WINSTA_ENUMERATE | WINSTA_READSCREEN | WINSTA_ACCESSCLIPBOARD | WINSTA_CREATEDESKTOP | WINSTA_WRITEATTRIBUTES | WINSTA_ACCESSGLOBALATOMS | WINSTA_EXITWINDOWS | STANDARD_RIGHTS_REQUIRED };
/*
* Desktop generic mapping. */ CONST GENERIC_MAPPING DesktopMapping = { DESKTOP_READOBJECTS | DESKTOP_ENUMERATE | #ifdef REDIRECTION
DESKTOP_QUERY_INFORMATION | #endif // REDIRECTION
STANDARD_RIGHTS_READ,
DESKTOP_WRITEOBJECTS | DESKTOP_CREATEWINDOW | DESKTOP_CREATEMENU | DESKTOP_HOOKCONTROL | DESKTOP_JOURNALRECORD | DESKTOP_JOURNALPLAYBACK | #ifdef REDIRECTION
DESKTOP_REDIRECT | #endif // REDIRECTION
STANDARD_RIGHTS_WRITE,
DESKTOP_SWITCHDESKTOP | STANDARD_RIGHTS_EXECUTE,
DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS | DESKTOP_ENUMERATE | DESKTOP_CREATEWINDOW | DESKTOP_CREATEMENU | DESKTOP_HOOKCONTROL | DESKTOP_JOURNALRECORD | DESKTOP_JOURNALPLAYBACK | #ifdef REDIRECTION
DESKTOP_QUERY_INFORMATION | DESKTOP_REDIRECT | #endif // REDIRECTION
DESKTOP_SWITCHDESKTOP | STANDARD_RIGHTS_REQUIRED };
/*
* Pointer to shared SERVERINFO data. */ PSERVERINFO gpsi; SHAREDINFO gSharedInfo;
/*
* Handle table globals. */ DWORD giheLast; /* index to last allocated handle entry */
DWORD gdwDesktopSectionSize; DWORD gdwNOIOSectionSize;
#if defined (USER_PERFORMANCE)
/*
* To turn on performance counters, you have to set the environment variable * USER_PERFORMANCE when compiling win32k.sys */ CSSTATISTICS gCSStatistics; #endif // USER_PERFORMANCE
SECURITY_QUALITY_OF_SERVICE gqosDefault = { sizeof(SECURITY_QUALITY_OF_SERVICE), SecurityImpersonation, SECURITY_STATIC_TRACKING, TRUE };
CONST COLORREF gargbInitial[COLOR_MAX] = { RGB(192, 192, 192), // COLOR_SCROLLBAR
RGB( 58, 110, 165), // COLOR_BACKGROUND
RGB(000, 000, 128), // COLOR_ACTIVECAPTION
RGB(128, 128, 128), // COLOR_INACTIVECAPTION
RGB(192, 192, 192), // COLOR_MENU
RGB(255, 255, 255), // COLOR_WINDOW
RGB(000, 000, 000), // COLOR_WINDOWFRAME
RGB(000, 000, 000), // COLOR_MENUTEXT
RGB(000, 000, 000), // COLOR_WINDOWTEXT
RGB(255, 255, 255), // COLOR_CAPTIONTEXT
RGB(192, 192, 192), // COLOR_ACTIVEBORDER
RGB(192, 192, 192), // COLOR_INACTIVEBORDER
RGB(128, 128, 128), // COLOR_APPWORKSPACE
RGB(000, 000, 128), // COLOR_HIGHLIGHT
RGB(255, 255, 255), // COLOR_HIGHLIGHTTEXT
RGB(192, 192, 192), // COLOR_BTNFACE
RGB(128, 128, 128), // COLOR_BTNSHADOW
RGB(128, 128, 128), // COLOR_GRAYTEXT
RGB(000, 000, 000), // COLOR_BTNTEXT
RGB(192, 192, 192), // COLOR_INACTIVECAPTIONTEXT
RGB(255, 255, 255), // COLOR_BTNHIGHLIGHT
RGB(000, 000, 000), // COLOR_3DDKSHADOW
RGB(223, 223, 223), // COLOR_3DLIGHT
RGB(000, 000, 000), // COLOR_INFOTEXT
RGB(255, 255, 225), // COLOR_INFOBK
RGB(180, 180, 180), // COLOR_3DALTFACE /* unused */
RGB( 0, 0, 255), // COLOR_HOTLIGHT
RGB( 16, 132, 208), // COLOR_GRADIENTACTIVECAPTION
RGB(181, 181, 181), // COLOR_GRADIENTINACTIVECAPTION
RGB(210, 210, 255), // COLOR_MENUHILIGHT
RGB(212, 208, 200) // COLOR_MENUBAR
};
POWERSTATE gPowerState;
WCHAR gszMIN[15]; WCHAR gszMAX[15]; WCHAR gszRESUP[20]; WCHAR gszRESDOWN[20]; WCHAR gszHELP[20]; /* Commented out due to TandyT ...
* WCHAR gszSMENU[30]; */ WCHAR gszSCLOSE[15]; WCHAR gszCAPTIONTOOLTIP[CAPTIONTOOLTIPLEN];
/*
* Pointer to shared SERVERINFO data. */
HANDLE ghSectionShared; PVOID gpvSharedBase;
PWIN32HEAP gpvSharedAlloc;
BOOL gbVideoInitialized;
BOOL gbNoMorePowerCallouts;
BOOL gbCleanedUpResources;
WSINFO gWinStationInfo;
ULONG gSessionId; // the session id. The fisrt session has the id 0
BOOL gbRemoteSession; // TRUE if win32k is for a remote session
PDESKTOP gspdeskDisconnect;
PDESKTOP gspdeskShouldBeForeground; BOOL gbDesktopLocked;
HANDLE ghRemoteVideoChannel; HANDLE ghRemoteMouseChannel; HANDLE ghRemoteBeepChannel; PVOID gpRemoteBeepDevice; HANDLE ghRemoteKeyboardChannel; HANDLE ghRemoteThinwireChannel;
USHORT gProtocolType; /* Starts as PROTOCOL_CONSOLE */ USHORT gConsoleShadowProtocolType;
BOOL gfSwitchInProgress; BOOL gfRemotingConsole;
HANDLE ghConsoleShadowVideoChannel; HANDLE ghConsoleShadowMouseChannel; HANDLE ghConsoleShadowBeepChannel; PVOID gpConsoleShadowBeepDevice; HANDLE ghConsoleShadowKeyboardChannel; HANDLE ghConsoleShadowThinwireChannel; KHANDLE gConsoleShadowhDev; PKEVENT gpConsoleShadowDisplayChangeEvent;
CLIENTKEYBOARDTYPE gRemoteClientKeyboardType;
BOOL gfSessionSwitchBlock;
BOOL gbExitInProgress; BOOL gbCleanupInitiated;
BOOL gbStopReadInput;
BOOL gbFreezeScreenUpdates;
ULONG gSetLedReceived; BOOL gbClientDoubleClickSupport; BOOL gfEnableWindowsKey = TRUE;
BOOL gbDisconnectHardErrorAttach;
PKEVENT gpevtDesktopDestroyed; PKEVENT gpevtVideoportCallout;
HDESK ghDisconnectDesk;
HWINSTA ghDisconnectWinSta;
ULONG gnShadowers; BOOL gbConnected;
WCHAR gstrBaseWinStationName[WINSTATIONNAME_LENGTH];
PFILE_OBJECT gVideoFileObject; PFILE_OBJECT gThinwireFileObject;
PFILE_OBJECT gConsoleShadowVideoFileObject; PFILE_OBJECT gConsoleShadowThinwireFileObject;
PVOID gpThinWireCache; PVOID gpConsoleShadowThinWireCache;
WMSNAPSHOT gwms; BOOL gbSnapShotWindowsAndMonitors;
BOOL gbPnPWaiting; PKEVENT gpEventPnPWainting;
PVOID ghKbdTblBase; ULONG guKbdTblSize;
DWORD gdwHydraHint;
DWORD gdwCanPaintDesktop;
WCHAR gszUserName[40]; WCHAR gszDomainName[40]; WCHAR gszComputerName[40];
/*
* Used for keeping track of stub parent processes that exit too early. */ HANDLE ghCanActivateForegroundPIDs[ACTIVATE_ARRAY_SIZE];
DWORD gdwGuiThreads;
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/*
* The section below has debug only globals * */ /////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/*
* Debug only globals */ #if DBG
BOOL gbTraceHydraApi; BOOL gbTraceDesktop;
DWORD gdwCritSecUseCount; // bumped for every enter and leave
DWORD gdwInAtomicOperation;
/*
* Debug Active Accessibility - ensure deferred win events are not lost. */ int gnDeferredWinEvents;
LPCSTR gapszFNID[] = { "FNID_SCROLLBAR", "FNID_ICONTITLE", "FNID_MENU", "FNID_DESKTOP", "FNID_DEFWINDOWPROC", "FNID_MESSAGEWND", "FNID_SWITCH", "FNID_MESSAGE", "FNID_BUTTON", "FNID_COMBOBOX", "FNID_COMBOLISTBOX", "FNID_DIALOG", "FNID_EDIT", "FNID_LISTBOX", "FNID_MDICLIENT", "FNID_STATIC", "FNID_IME", "FNID_HKINLPCWPEXSTRUCT", "FNID_HKINLPCWPRETEXSTRUCT", "FNID_DEFFRAMEPROC", "FNID_DEFMDICHILDPROC", "FNID_MB_DLGPROC", "FNID_MDIACTIVATEDLGPROC", "FNID_SENDMESSAGE", "FNID_SENDMESSAGEFF", "FNID_SENDMESSAGEEX", "FNID_CALLWINDOWPROC", "FNID_SENDMESSAGEBSM", "FNID_TOOLTIP", "FNID_GHOST", "FNID_SENDNOTIFYMESSAGE", "FNID_SENDMESSAGECALLBACK" };
LPCSTR gapszMessage[] = { "WM_NULL", "WM_CREATE", "WM_DESTROY", "WM_MOVE", "WM_SIZEWAIT", "WM_SIZE", "WM_ACTIVATE", "WM_SETFOCUS", "WM_KILLFOCUS", "WM_SETVISIBLE", "WM_ENABLE", "WM_SETREDRAW", "WM_SETTEXT", "WM_GETTEXT", "WM_GETTEXTLENGTH", "WM_PAINT",
"WM_CLOSE", "WM_QUERYENDSESSION", "WM_QUIT", "WM_QUERYOPEN", "WM_ERASEBKGND", "WM_SYSCOLORCHANGE", "WM_ENDSESSION", "WM_SYSTEMERROR", "WM_SHOWWINDOW", "WM_CTLCOLOR", "WM_WININICHANGE", "WM_DEVMODECHANGE", "WM_ACTIVATEAPP", "WM_FONTCHANGE", "WM_TIMECHANGE", "WM_CANCELMODE",
"WM_SETCURSOR", "WM_MOUSEACTIVATE", "WM_CHILDACTIVATE", "WM_QUEUESYNC", "WM_GETMINMAXINFO", "WM_LOGOFF", "WM_PAINTICON", "WM_ICONERASEBKGND", "WM_NEXTDLGCTL", "WM_ALTTABACTIVE", "WM_SPOOLERSTATUS", "WM_DRAWITEM", "WM_MEASUREITEM", "WM_DELETEITEM", "WM_VKEYTOITEM", "WM_CHARTOITEM",
"WM_SETFONT", "WM_GETFONT", "WM_SETHOTKEY", "WM_GETHOTKEY", "WM_FILESYSCHANGE", "WM_ISACTIVEICON", "WM_QUERYPARKICON", "WM_QUERYDRAGICON", "WM_WINHELP", "WM_COMPAREITEM", "WM_FULLSCREEN", "WM_CLIENTSHUTDOWN", "WM_DDEMLEVENT", "WM_GETOBJECT", "fnEmpty", "MM_CALCSCROLL",
"WM_TESTING", "WM_COMPACTING",
"WM_OTHERWINDOWCREATED", "WM_OTHERWINDOWDESTROYED", "WM_COMMNOTIFY", "WM_MEDIASTATUSCHANGE", "WM_WINDOWPOSCHANGING", "WM_WINDOWPOSCHANGED",
"WM_POWER", "WM_COPYGLOBALDATA", "WM_COPYDATA", "WM_CANCELJOURNAL", "WM_LOGONNOTIFY", "WM_KEYF1", "WM_NOTIFY", "WM_ACCESS_WINDOW",
"WM_INPUTLANGCHANGEREQUE", "WM_INPUTLANGCHANGE", "WM_TCARD", "WM_HELP", "WM_USERCHANGED", "WM_NOTIFYFORMAT", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"WM_FINALDESTROY", "WM_MEASUREITEM_CLIENTDATA", "WM_TASKACTIVATED", "WM_TASKDEACTIVATED", "WM_TASKCREATED", "WM_TASKDESTROYED", "WM_TASKUICHANGED", "WM_TASKVISIBLE", "WM_TASKNOTVISIBLE", "WM_SETCURSORINFO", "fnEmpty", "WM_CONTEXTMENU", "WM_STYLECHANGING", "WM_STYLECHANGED", "WM_DISPLAYCHANGE", "WM_GETICON",
"WM_SETICON", "WM_NCCREATE", "WM_NCDESTROY", "WM_NCCALCSIZE",
"WM_NCHITTEST", "WM_NCPAINT", "WM_NCACTIVATE", "WM_GETDLGCODE",
"WM_SYNCPAINT", "WM_SYNCTASK",
"fnEmpty", "WM_KLUDGEMINRECT", "WM_LPKDRAWSWITCHWND", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"WM_NCMOUSEMOVE", "WM_NCLBUTTONDOWN", "WM_NCLBUTTONUP", "WM_NCLBUTTONDBLCLK", "WM_NCRBUTTONDOWN", "WM_NCRBUTTONUP", "WM_NCRBUTTONDBLCLK", "WM_NCMBUTTONDOWN", "WM_NCMBUTTONUP", "WM_NCMBUTTONDBLCLK",
"fnEmpty", "WM_NCXBUTTONDOWN", "WM_NCXBUTTONUP", "WM_NCXBUTTONDBLCLK", "WM_NCUAHDRAWCAPTION", "WM_NCUAHDRAWFRAME",
"EM_GETSEL", "EM_SETSEL", "EM_GETRECT", "EM_SETRECT", "EM_SETRECTNP", "EM_SCROLL", "EM_LINESCROLL", "EM_SCROLLCARET", "EM_GETMODIFY", "EM_SETMODIFY", "EM_GETLINECOUNT", "EM_LINEINDEX", "EM_SETHANDLE", "EM_GETHANDLE", "EM_GETTHUMB", "fnEmpty",
"fnEmpty", "EM_LINELENGTH", "EM_REPLACESEL", "EM_SETFONT", "EM_GETLINE", "EM_LIMITTEXT", "EM_CANUNDO", "EM_UNDO", "EM_FMTLINES", "EM_LINEFROMCHAR", "EM_SETWORDBREAK", "EM_SETTABSTOPS", "EM_SETPASSWORDCHAR", "EM_EMPTYUNDOBUFFER", "EM_GETFIRSTVISIBLELINE", "EM_SETREADONLY",
"EM_SETWORDBREAKPROC", "EM_GETWORDBREAKPROC", "EM_GETPASSWORDCHAR", "EM_SETMARGINS", "EM_GETMARGINS", "EM_GETLIMITTEXT", "EM_POSFROMCHAR", "EM_CHARFROMPOS", "EM_SETIMESTATUS",
"EM_GETIMESTATUS", "EM_MSGMAX", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"SBM_SETPOS", "SBM_GETPOS", "SBM_SETRANGE", "SBM_GETRANGE", "fnEmpty", "fnEmpty", "SBM_SETRANGEREDRAW", "fnEmpty",
"fnEmpty", "SBM_SETSCROLLINFO", "SBM_GETSCROLLINFO", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"BM_GETCHECK", "BM_SETCHECK", "BM_GETSTATE", "BM_SETSTATE", "BM_SETSTYLE", "BM_CLICK", "BM_GETIMAGE", "BM_SETIMAGE",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "WM_INPUT",
"WM_KEYDOWN", "WM_KEYUP", "WM_CHAR", "WM_DEADCHAR", "WM_SYSKEYDOWN", "WM_SYSKEYUP", "WM_SYSCHAR", "WM_SYSDEADCHAR", "WM_YOMICHAR", "WM_UNICHAR", "WM_CONVERTREQUEST", "WM_CONVERTRESULT", "WM_INTERIM", "WM_IME_STARTCOMPOSITION", "WM_IME_ENDCOMPOSITION", "WM_IME_COMPOSITION",
"WM_INITDIALOG", "WM_COMMAND", "WM_SYSCOMMAND", "WM_TIMER", "WM_HSCROLL", "WM_VSCROLL", "WM_INITMENU", "WM_INITMENUPOPUP", "WM_SYSTIMER", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "WM_MENUSELECT",
"WM_MENUCHAR", "WM_ENTERIDLE",
"WM_MENURBUTTONUP", "WM_MENUDRAG", "WM_MENUGETOBJECT", "WM_UNINITMENUPOPUP", "WM_MENUCOMMAND", "WM_CHANGEUISTATE",
"WM_UPDATEUISTATE", "WM_QUERYUISTATE", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "WM_LBTRACKPOINT", "WM_CTLCOLORMSGBOX", "WM_CTLCOLOREDIT", "WM_CTLCOLORLISTBOX", "WM_CTLCOLORBTN", "WM_CTLCOLORDLG", "WM_CTLCOLORSCROLLBAR", "WM_CTLCOLORSTATIC", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"CB_GETEDITSEL", "CB_LIMITTEXT", "CB_SETEDITSEL", "CB_ADDSTRING", "CB_DELETESTRING", "CB_DIR", "CB_GETCOUNT", "CB_GETCURSEL", "CB_GETLBTEXT", "CB_GETLBTEXTLEN", "CB_INSERTSTRING", "CB_RESETCONTENT", "CB_FINDSTRING", "CB_SELECTSTRING", "CB_SETCURSEL", "CB_SHOWDROPDOWN",
"CB_GETITEMDATA", "CB_SETITEMDATA", "CB_GETDROPPEDCONTROLRECT", "CB_SETITEMHEIGHT", "CB_GETITEMHEIGHT", "CB_SETEXTENDEDUI", "CB_GETEXTENDEDUI", "CB_GETDROPPEDSTATE", "CB_FINDSTRINGEXACT", "CB_SETLOCALE", "CB_GETLOCALE", "CB_GETTOPINDEX",
"CB_SETTOPINDEX", "CB_GETHORIZONTALEXTENT", "CB_SETHORIZONTALEXTENT", "CB_GETDROPPEDWIDTH",
"CB_SETDROPPEDWIDTH", "CB_INITSTORAGE", "fnEmpty", "CB_MULTIPLEADDSTRING", "CB_GETCOMBOBOXINFO", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"STM_SETICON", "STM_GETICON", "STM_SETIMAGE", "STM_GETIMAGE", "STM_MSGMAX", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"LB_ADDSTRING", "LB_INSERTSTRING", "LB_DELETESTRING", "LB_SELITEMRANGEEX", "LB_RESETCONTENT", "LB_SETSEL", "LB_SETCURSEL", "LB_GETSEL", "LB_GETCURSEL", "LB_GETTEXT", "LB_GETTEXTLEN", "LB_GETCOUNT", "LB_SELECTSTRING", "LB_DIR", "LB_GETTOPINDEX", "LB_FINDSTRING",
"LB_GETSELCOUNT", "LB_GETSELITEMS", "LB_SETTABSTOPS", "LB_GETHORIZONTALEXTENT", "LB_SETHORIZONTALEXTENT", "LB_SETCOLUMNWIDTH", "LB_ADDFILE", "LB_SETTOPINDEX", "LB_SETITEMRECT", "LB_GETITEMDATA", "LB_SETITEMDATA", "LB_SELITEMRANGE", "LB_SETANCHORINDEX", "LB_GETANCHORINDEX", "LB_SETCARETINDEX", "LB_GETCARETINDEX",
"LB_SETITEMHEIGHT", "LB_GETITEMHEIGHT", "LB_FINDSTRINGEXACT", "LBCB_CARETON", "LBCB_CARETOFF", "LB_SETLOCALE", "LB_GETLOCALE", "LB_SETCOUNT",
"LB_INITSTORAGE",
"LB_ITEMFROMPOINT", "LB_INSERTSTRINGUPPER", "LB_INSERTSTRINGLOWER", "LB_ADDSTRINGUPPER", "LB_ADDSTRINGLOWER", "LBCB_STARTTRACK", "LBCB_ENDTRACK",
"fnEmpty", "LB_MULTIPLEADDSTRING", "LB_GETLISTBOXINFO", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"MN_SETHMENU", "MN_GETHMENU", "MN_SIZEWINDOW", "MN_OPENHIERARCHY", "MN_CLOSEHIERARCHY", "MN_SELECTITEM", "MN_CANCELMENUS", "MN_SELECTFIRSTVALIDITEM",
"fnEmpty", "fnEmpty", "fnEmpty", "MN_FINDMENUWINDOWFROMPOINT", "MN_SHOWPOPUPWINDOW", "MN_BUTTONDOWN", "MN_MOUSEMOVE", "MN_BUTTONUP", "MN_SETTIMERTOOPENHIERARCHY",
"MN_DBLCLK", "MN_ACTIVEPOPUP", "MN_ENDMENU", "MN_DODRAGDROP", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"WM_MOUSEMOVE", "WM_LBUTTONDOWN", "WM_LBUTTONUP", "WM_LBUTTONDBLCLK", "WM_RBUTTONDOWN", "WM_RBUTTONUP", "WM_RBUTTONDBLCLK", "WM_MBUTTONDOWN", "WM_MBUTTONUP", "WM_MBUTTONDBLCLK", "WM_MOUSEWHEEL", "WM_XBUTTONDOWN", "WM_XBUTTONUP", "WM_XBUTTONDBLCLK", "fnEmpty", "fnEmpty",
"WM_PARENTNOTIFY", "WM_ENTERMENULOOP", "WM_EXITMENULOOP", "WM_NEXTMENU", "WM_SIZING", "WM_CAPTURECHANGED", "WM_MOVING", "fnEmpty",
"WM_POWERBROADCAST", "WM_DEVICECHANGE", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "WM_MDICREATE", "WM_MDIDESTROY", "WM_MDIACTIVATE", "WM_MDIRESTORE", "WM_MDINEXT", "WM_MDIMAXIMIZE", "WM_MDITILE", "WM_MDICASCADE", "WM_MDIICONARRANGE", "WM_MDIGETACTIVE", "WM_DROPOBJECT", "WM_QUERYDROPOBJECT", "WM_BEGINDRAG", "WM_DRAGLOOP", "WM_DRAGSELECT", "WM_DRAGMOVE",
//
// 0x0230
//
"WM_MDISETMENU", "WM_ENTERSIZEMOVE", "WM_EXITSIZEMOVE",
"WM_DROPFILES", "WM_MDIREFRESHMENU", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
//
// 0x0240
//
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
//
// 0x0250
//
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
//
// 0x0260
//
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
//
// 0x0270
//
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
//
// 0x0280
//
"WM_KANJIFIRST", "WM_IME_SETCONTEXT", "WM_IME_NOTIFY", "WM_IME_CONTROL", "WM_IME_COMPOSITIONFULL", "WM_IME_SELECT", "WM_IME_CHAR", "WM_IME_SYSTEM",
"WM_IME_REQUEST", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved",
//
// 0x0290
//
"WM_IME_KEYDOWN", "WM_IME_KEYUP", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved",
"fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "WM_KANJILAST",
//
// 0x02a0
//
"WM_NCMOUSEHOVER", "WM_MOUSEHOVER", "WM_NCMOUSELEAVE", "WM_MOUSELEAVE", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
//
// 0x02b0
//
"fnEmpty", "WM_WTSSESSION_CHANGE", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
//
// 0x02c0
//
"WM_TABLET_FIRST", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
//
// 0x02d0
//
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "WM_TABLET_LAST",
//
// 0x02e0
//
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
//
// 0x02f0
//
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
//
// 0x0300
//
"WM_CUT", "WM_COPY", "WM_PASTE", "WM_CLEAR", "WM_UNDO", "WM_RENDERFORMAT", "WM_RENDERALLFORMATS", "WM_DESTROYCLIPBOARD", "WM_DRAWCLIPBOARD", "WM_PAINTCLIPBOARD", "WM_VSCROLLCLIPBOARD", "WM_SIZECLIPBOARD", "WM_ASKCBFORMATNAME", "WM_CHANGECBCHAIN", "WM_HSCROLLCLIPBOARD", "WM_QUERYNEWPALETTE",
"WM_PALETTEISCHANGING", "WM_PALETTECHANGED", "WM_HOTKEY",
"WM_SYSMENU", "WM_HOOKMSG", "WM_EXITPROCESS", "WM_WAKETHREAD", "WM_PRINT",
"WM_PRINTCLIENT", "WM_APPCOMMAND", "WM_THEMECHANGED", "WM_UAHINIT", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"WM_NOTIFYWOW", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"WM_MM_RESERVED_FIRST", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved",
"fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved",
"fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved",
"fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved",
"fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved",
"fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved",
"fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved",
"fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "WM_MM_RESERVED_LAST",
"WM_DDE_INITIATE", "WM_DDE_TERMINATE", "WM_DDE_ADVISE", "WM_DDE_UNADVISE", "WM_DDE_ACK", "WM_DDE_DATA", "WM_DDE_REQUEST", "WM_DDE_POKE", "WM_DDE_EXECUTE",
"fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty", "fnEmpty",
"WM_CBT_RESERVED_FIRST", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved",
"fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "fnReserved", "WM_CBT_RESERVED_LAST", };
/*
* This array will keep the TL stuctures alive. Free builds allocate these on the * stack and they get overwritten on function return. The link from the stack TL * to the static TL and vice-versa is maintained using TL.ptl. ptlStack->ptl == * ptlStatic and ptlStatic->ptl == ptlStack. So ptl1->ptl->ptl == ptl1. When a * ptlStatic is freed, it is linked at the head of the gFreeTLlist and the * uTLCount has TL_FREED_PATTERN added in the HIWORD. When inspecting the static * TLs this pattern will help identify an unused element. */ PTL gpaThreadLocksArrays[MAX_THREAD_LOCKS_ARRAYS]; PTL gFreeTLList; int gcThreadLocksArraysAllocated;
#endif
EX_RUNDOWN_REF gWinstaRunRef;
#ifdef SUBPIXEL_MOUSE
FIXPOINT gDefxTxf[SM_POINT_CNT], gDefyTxf[SM_POINT_CNT]; #endif
PVOID gpvWin32kImageBase;
|