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.
2376 lines
50 KiB
2376 lines
50 KiB
/****************************** 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;
|