Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

827 lines
26 KiB

/******************************************************************************
*
* (C) Copyright MICROSOFT Corp., 1988-1995
*
* Title: VMDAPRIV.H - Include file for VMDOSAPP/SHELL interaction
*
* Version: 2.00
*
* Date: 13-Aug-1994
*
* Author: rjc
*
*-----------------------------------------------------------------------------
*
* Change log:
*
* DATE REV DESCRIPTION
* ----------- --- ----------------------------------------------------------
* 05-May-1988 ARR Original
* 15-Jul-1982 rjc Converted from vmda.inc to vmda.h
* 13-Aug-1992 rjc Split private stuff into vmdapriv.h
* 11-Nov-1994 rjc Moved inter-module msgsrv32 stuff here, too.
*
*****************************************************************************/
/******************************************************************************
******************************************************************************
*
* MSGSRV32
*
******************************************************************************
*****************************************************************************/
/******************************************************************************
*
* SZMESSAGESERVERCLASS is the class name for the message server.
* There is no title.
*
* To locate the message server, just do a
*
* static char CODESEG szMessageServer[] = SZMESSAGESERVER;
* hwnd = FindWindow(szMessageServer, 0);
*
*****************************************************************************/
#define SZMESSAGESERVERCLASS "Windows 32-bit VxD Message Server"
/******************************************************************************
*
* INH_DEVICEBROADCAST -- Broadcast a message to VxDs.
*
* wParam = not used
* lParam = far pointer to INTERNALBROADCASTSYSMSG
*
*****************************************************************************/
#if 0
typedef WORD WPARAM;
typedef LONG LPARAM;
#endif
/* H2INCSWITCHES -t */
typedef struct INTERNALBROADCASTSYSMSG { /* bsm */
WORD uiMessage;
WPARAM wParam;
LPARAM lParam;
DWORD dwFlags;
} INTERNALBROADCASTSYSMSG, FAR *LPINTERNALBROADCASTSYSMSG;
/* H2INCSWITCHES -t- */
/*ASM
DBWF_LPARAMPOINTER = 8000h
*/
#define INH_DEVICEBROADCAST 0x0500
/******************************************************************************
*
* INH_LOGONTONET -- Posted from user to msgsrvr to log onto net and run
* the shell. Also used to exec the shell if it faults.
* wParam = if 0, logon to net. if 1, just exec the shell.
* lParam = not used
*
*****************************************************************************/
#define INH_LOGONTONET 0x0501
/******************************************************************************
*
* INH_CHECKSYSTEMDLLS - Posted from user to msgsrvr to tell us to check
* system dlls if they have been bogusly replaced
* wParam = not used
* lParam = not used
*
*****************************************************************************/
#define INH_CHECKSYSTEMDLLS 0x0502
/******************************************************************************
*
* INH_USEME503 -- Not used, please recycle
* INH_USEME504 -- Not used, please recycle
*
*****************************************************************************/
#define INH_USEME503 0x0503
#define INH_USEME504 0x0504
/******************************************************************************
*
* INH_APPYTIME -- It is now 'Appy-time
*
* wParam = not used
* lParam = not used
*
*****************************************************************************/
#define INH_APPYTIME 0x0505
/******************************************************************************
*
* INH_FORWARDTOSHELL -- Forward a WM_SHELLNOTIFY to the current shell window
*
* wParam = forwarded to GetShellWindow()
* lParam = forwarded to GetShellWindow()
*
*****************************************************************************/
#define INH_FORWARDTOSHELL 0x0506
/******************************************************************************
*
* INH_FREEDRIVERS - Message posted from user telling us to free installable
* drivers for compatibility with Win3.1
* wParam = id code we pass back to user's UnloadInstallableDrivers
* function
* lParam = not used
*
*****************************************************************************/
#define INH_FREEDRIVERS 0x0507
/******************************************************************************
*
* INH_PLAYEXITSOUND - Message posted from user telling us to play the exit
* Windows sound.
* wParam = not used
* lParam = not used
*
*****************************************************************************/
#define INH_PLAYEXITSOUND 0x0508
/******************************************************************************
*
* INH_UNIDRVLOADED - Message posted from unidrv to us so that we can
* cache the printer driver after it loads.
*
* wParam = INH_UNIDRVLOADED_WPARAM (signature)
* lParam = INH_UNIDRVLOADED_LPARAM (signature)
*
*****************************************************************************/
#define INH_UNIDRVLOADED 0x0509
#define INH_UNIDRVLOADED_WPARAM 0
#define INH_UNIDRVLOADED_LPARAM 0
/******************************************************************************
*
* INH_UNIDRVUNLOAD - Message sent from print installer to us so that we can
* forceably tell msgsrvr to uncache this.
*
* wParam = INH_UNIDRVUNLOAD_WPARAM (signature)
* lParam = INH_UNIDRVUNLOAD_LPARAM (signature)
*
*****************************************************************************/
#define INH_UNIDRVUNLOAD 0x050A
#define INH_UNIDRVUNLOAD_WPARAM 0
#define INH_UNIDRVUNLOAD_LPARAM 0
/******************************************************************************
******************************************************************************
*
* VMDOSAPP / SHELL / USER
*
******************************************************************************
*****************************************************************************/
/*
* This file contains manifest constants for VMDOSAPP/SHELL interaction
* which are private to DOS386 and should not be exposed in the DDK.
*/
/*
* EQUATES for VMDOSAPP device calls
*/
#define SHELL_Call_Dev_VMD 0x0000C
#define SHELL_Call_Dev_VKD 0x0000D
#define SHELL_Call_Dev_SHELL 0x00017
#define SHELL_Call_Dev_VCOND 0x00038
#ifdef FE_VIME
#define SHELL_Call_Dev_VIME 0x00064
#endif
/*
* SHELL VMDA interface services
*/
#define SHELL_Get_Ver 0
#define SHELL_Get_Sys_VM_Info 1 /* Used by 3.1 control panel (stub) */
#define SHELL_Set_Sys_VM_Info 2 /* Used by 3.1 control panel (stub) */
#define SHELL_Create_VM 3 /* Stupid C7 uses this; go figure */
/* Brown has rev-engineered it, too */
#define SHELL_Destroy_VM 4
#define SHELL_Set_Focus 5
#define SHELL_Get_VM_State 6
#define SHELL_Set_VM_State 7
/* #define SHELL_Debug_Out 8 */ /* Defined in vmda.h */
#define SHELL_VMDA_Init 9
#define SHELL_VMDA_Exit 10
#define SHELL_Get_Message_Text 11
#define SHELL_Event_Complete 12
#define SHELL_Get_Contention_Info 13
#define SHELL_Get_Clip_Info 14
#define SHELL_Set_Paste 15
#define SHELL_Switcher_Assist 16
#define SHELL_Do_Not_Use 17 /* Do not recycle */
#define SHELL_Query_Destroy 18
/*
* WARNING: The following two entries are used by Windows KERNEL/USER.
* Do not change them without also changing KERNEL/USER.
*/
#define SHELL_SetFocus_Cur_VM 19
#define SHELL_User_Busy 20 /* Old name (not used) */
#define SHELL_Set_Hotkey_Info 20 /* New name */
#define SHELL_Chng_Hot_Key 21 /* Old name (not used) */
#define SHELL_Get_Hotkey_Info 21 /* New name */
#define SHELL_Get_TermInfo 22
#define SHELL_Check_Hotkey_Allowed 23 /* See if a focus change is ok */
#define SHELL_UseMe24 24 /* Available for use */
/*
* These are used by the WShell server during system startup
* for various reasons...
*/
#define SHELL_AppyRegister 25 /* 'Appy-time status report */
#define SHELL_Get_VM_Descriptor 26
#define SHELL_DispatchAppyEvents 27 /* It is now 'Appy time */
#define SHELL_DispatchBroadcastHooks 28 /* Goofy broadcast received */
#define SHELL_GetServerHwnd 29 /* Called by USER! */
#define SHELL_GetSet_VM_Title 30
#define SHELL_Get_Close_Flags 31
#define SHELL_Initiate_Close 32
#define SHELL_Cancel_Close 33
#define SHELL_Grab_Failed 34
#define SHELL_Get_Protection_Info 35
#define SHELL_Freeze_VM 36
#define SHELL_Thaw_VM 37
#define SHELL_Set_Focus_Sys_VM 38 /* Used by Win31.exe */
#define SHELL_Final_VM_Cleanup 39
/*
* NOTE! When adding a new service code, add them here, *before* the
* DOS7 ordinals. (Renumber the DOS7 ordinals accordingly.)
*/
#ifdef DOS7
#define SHELL_Get_New_VM_Handle ?? /* VM enumeration for inheriting */
#define SHELL_Get_Next_VM_Handle ??
#define SHELL_Get_Clipboard_Size ?? /* Clipboard importation */
#define SHELL_Copy_Clipboard_Data ??
#endif
/******************************************************************************
*
* Window private bytes...
*
* WindowLong(GWL_TTY_PID) =
* process ID for process currently running in DOS box
*
* WindowLong(GWL_TTY_TID) =
* thread ID for process currently running in DOS box
*
* Valid only if window class is the top-level unowned window for WinOldAp
* (classname = "tty").
*
*****************************************************************************/
#define GWL_TTY_PID 0
#define GWL_TTY_TID 4
/******************************************************************************
*
* Message numbers
*
*****************************************************************************/
#define WMX_USER 0x0400
/******************************************************************************
*
* Messages WMX_USER+0 through WMX_USER+19 are reserved for
* internal use by WinOldAp.
*
*****************************************************************************/
/******************************************************************************
*
* Messages WMX_USER+20 through WMX_USER+255 are reserved for
* WinOldAp / WShell interaction, with exceptions as noted below.
*
*****************************************************************************/
/*
* Messages WMX_USER+20 through WMX_USER+255 are reserved
*
* Be extra careful not to change the meanings of any of the
* messages from WMX_USER+20 through WMX_USER+20+13, because
* those messages were used by Windows 3.1 and were documented
* in the DDK (What were we thinking!?!!?), so some hosebags
* might actually send them.
*
* VDA_Terminated is sent by the 3DPC screen saver. What's more,
* they send it incorrectly! So watch out when you process it...
*/
#define VDA_First (WMX_USER+20+0)
/******** BEGIN -- DO NOT CHANGE THESE -- BEGIN ********/
#define VDA_Hot_Key (WMX_USER+20+0)
#define VDA_Switch_Context (WMX_USER+20+1)
#ifndef VDA_Type_Chng
#define VDA_Type_Chng (WMX_USER+20+2) /* Defined in VDDGRB.INC */
#endif
#define VDA_ClipBrd_Event (WMX_USER+20+3)
#define VDA_Terminated (WMX_USER+20+4)
#define VDA_Display_Message (WMX_USER+20+5)
#ifndef VDA_Display_Event
#define VDA_Display_Event (WMX_USER+20+6) /* Defined in VDDGRB.INC */
#endif
#define VDA_Crash_Event (WMX_USER+20+7) /* OBSOLETE! DO NOT RECYCLE */
#define VDA_Paste_Complete (WMX_USER+20+8)
#define VDA_Contention (WMX_USER+20+9)
#define VDA_Start_SwitchScn (WMX_USER+20+10)
#define VDA_FileSysChange (WMX_USER+20+11) /* OBSOLETE! DO NOT RECYCLE */
#define VDA_CheckFocus (WMX_USER+20+12)
#define VDA_Switch_CntxtPanic (WMX_USER+20+13)
/******** END -- DO NOT CHANGE THESE -- END ********/
#define VDA_Simulate_Hotkey (WMX_USER+20+14)
#define VDA_Set_VM_Title (WMX_USER+20+15)
#define VDA_Cancel_Close (WMX_USER+20+16)
#define VDA_Change_CodePage (WMX_USER+20+17) /* Used by JAPAN */
#define VDA_VM_Started (WMX_USER+20+18)
#define VDA_Protection_Event (WMX_USER+20+19)
#define VDA_Close_Clipboard (WMX_USER+20+20)
#define VDA_Flash_Icon (WMX_USER+20+21)
#define VDA_Notify_Close_Change (WMX_USER+20+22)
#define VDA_DynaWindow (WMX_USER+20+23)
#define VDA_Screensave (WMX_USER+20+24)
#define VDA_SystemSleep (WMX_USER+20+25)
#define VDA_MonitorPower (WMX_USER+20+26)
#ifdef DOS7
#define VDA_Inherit_New_VM ?
#endif
#define VDA_Last VDA_MonitorPower
/******************************************************************************
*
* Messages WMX_USER+256 through WMX_USER+511 are reserved for
* WinOldAp / VConD interaction.
*
*****************************************************************************/
#define VDA_Console_Spawn (WMX_USER+256)
#define VDA_Console_Set_Title (WMX_USER+257)
#define VDA_Console_State_Change (WMX_USER+258)
#define VDA_Console_Update_Window (WMX_USER+259)
/* flags for Update Console Window message sent by Console code to WinOldAp*/
#define UCW_HSCROLL 0x0001
#define UCW_VSCROLL 0x0002
#define UCW_SIZE 0x0004
/* messages for native grabber in WinOldAp */
#define GRABMSG_NOMSG 0x0000 // Nothing to do
#define GRABMSG_REPAINT 0x0001 // Repaint a rectangle
#define GRABMSG_MOVERECT 0x0002 // Move a rectangle
#define GRABMSG_SETSCREEN 0x0004 // Set virtual screen size
#define GRABMSG_SETCURPOS 0x0008 // Set virtual screen position
#define GRABMSG_SETCURINFO 0x0010 // Set cursor (caret) position/size
#define GRABMSG_CURTRACK 0x0020 // Position cursor in window
#define GRABMSG_TERMINATE 0x0040 // Screen buffer is terminating
/* Display event codes for notification of VCOND by WOA.*/
#define DE_ICONIZE 1 // iconized
#define DE_SIZECHANGE 2 // user changed window size
#define DE_WINDOW 3 // changed from fullscreen to window
#define DE_FULLSCREEN 4 // changed from window to fullscreen
#define DE_BEGINSELECT 5 // begin selection
#define DE_ENDSELECT 6 // end selection
#define DE_NATIVEMODE 7 // enter native mode
#define DE_PHYSICALMODE 8 // enter physical mode
#ifdef FE_VIME
/******************************************************************************
*
* Messages WMX_USER+512 through WMX_USER+767 are reserved for
* WinOldAp / VIME interaction.
*
*****************************************************************************/
#define VDA_Process_Key_Event (WMX_USER+512)
#define VDA_Control_IME (WMX_USER+513)
#define VDA_Init_VIMEUI (WMX_USER+514)
#define VDA_Get_Keyboard_Layout (WMX_USER+515)
/* Functions for VDA_Control_IME */
#define VIME_CIME_SetOpenStatus 1
#define VIME_CIME_SetCandidatePageStart 2
#define VIME_CIME_SetCandidatePageSize 3
#define VIME_CIME_EnableIME 4
/* Protect Mode API */
#define VIME_CMD_GetOption 2
#define VIME_CMD_Composition 3
#define VIME_CMD_CandOpen 4
#define VIME_CMD_CandClose 10
#define VIME_CMD_Draw 5
#define VIME_CMD_Return 6
#define VIME_CMD_Char 7
#define VIME_CMD_StartComp 8
#define VIME_CMD_EndComp 9
#define VIME_CMD_OpenStatus 11
#define VIME_CMD_ConversionMode 12
#define VIME_CMD_SentenceMode 13
#define VIME_CMD_WindowState 14
#define VIME_CMD_KeyDown 15
#define VIME_CMD_CandChange 16
#define VIME_CMD_Paste 17
#define VIME_CMD_ReqChangeKL 18
#define VIME_CMD_KeyboardLayout 19
#define VIME_CMD_InstallVIME 20
#define VIME_CMD_GetSync 21
/* detail info for VIME_CMD_ChangeIME */
#define VIME_CHG_NonIME 1
#define VIME_CHG_OldIME 2
#define VIME_CHG_NonNative 3
#endif // FE_VIME
/*
* This is a special "VMDOSAPP message" which actually results in no
* message being sent to VMDOSAPP. It is used internally by the SHELL
* to give the SYS VM a Boost, just as it does for normal events, but
* without sending VMDOSAPP a message.
*/
#define VDA_Nul_Boost_Event 0x0FFFF
/*
* lParam is ALWAYS the "Event ID". This is used on the VMDOSAPP call backs
* to the shell to identify the event which is being processed.
*/
/*
* On VDA_Hot_Key event wParam is the Key identifier (See following EQUs)
* VMDOSAPP instance which gets the message is the "target" of the hot key
*/
#define VDA_HK_ALTSPACE 0
#define VDA_HK_ALTENTER 1
#define VDA_HK_DIRVM 2
/*
* On VDA_Terminated event wParam is 0 if this is a normal termination. If it is
* non-zero, use SHELL_Get_TermInfo to get error information.
* VMDOSAPP instance which gets the message has terminated.
*/
/*
* NOTE that VDA_Crash_Event is very much like VDA_Terminated, the only
* real difference being the reason for the termination.
* Use SHELL_Get_TermInfo to get error information.
* wParam is not used
* VMDOSAPP instance which gets the message has crashed
*/
/*
* On VDA_ClipBrd_Event, wParam is the Client_AX identifying the call.
* VMDOSAPP instance which gets the message had a clipboard event
*/
/* This next one is documented in vmda.h */
/*
* On VDA_Display_Message event, wParam == 0 if normal message
* != 0 if ASAP or SYSMODAL message
* VMDOSAPP instance which gets the message is messaging VM
*/
/*
* On VDA_Paste_Complete event, wParam == 0 if normal completion
* == 1 if paste canceled by user
* == 2 if paste canceled for other reason
* VMDOSAPP instance which gets the message has completed paste
*/
/*
* On VDA_Switch_Context event, wParam == 0 if context is switched to
* VMDOSAPP instance which gets the message (that VM now has focus)
* if wParam != 0, SYS VM now has the focus
* VDA_Switch_CntxtPanic is an alternate form that should only occur with
* wParam != 0 and indicates that the Windows activation should be moved
* away from any VM (in other words, only a Windows app should be active
* now).
*/
/* This next one is documented in vmda.h */
/*
* On VDA_Type_Chng event, wParam is not used
* VMDOSAPP instance which gets the message has had its type changed by
* protected mode code
*/
/*
* On VDA_FileSysChange, SEE SHELLFSC.INC
*/
/*
* VDA_CheckFocus This is sent as part of the Contention handling to deal with
* a case where the the Focus is manipulated and needs to get reset.
* wParam is not used.
*/
/* Reference data for VDA_Protection_Event
*/
#ifndef _WINNT_
typedef struct FAULTINFO {
DWORD FI_VM;
DWORD FI_CS;
DWORD FI_EIP;
DWORD FI_Addr;
} FAULTINFO;
typedef FAULTINFO *PFAULTINFO;
#endif
#ifdef _WSHIOCTL_H
/*****************************************************************************
*
* SHELL_Create_VM
*
* ES:EDI -> struct VM_Descriptor (see shellvm.h)
* DS:SI -> struct VM_AppWizInfo
*
* szProgram = program name, e.g., "C:\FOO.BAT" or "D:\BAR.EXE"
* szParams = command tail
* szDir = current directory at time of exec, e.g., C:\GAME
* szPifFile = PIF file that controls this app
* null string if PIF file belongs to command.com
* space if app didn't have a custom PIF (need to create one)
*
*/
/* H2INCSWITCHES -t */
typedef struct VMAPPWIZINFO { /* awi */
char szProgram[MAXVMPROGSIZE];
char szParams[MAXVMCMDSIZE];
char szDir[MAXVMDIRSIZE];
char szPifFile[MAXPIFPATHSIZE];
BYTE aAppFlags[4]; /* 1 dword of flags */
} VMAPPWIZINFO, *PVMAPPWIZINFO;
/* H2INCSWITCHES -t- */
#endif /* _WSHIOCTL_H */
//
// Flags for app hack bits
//
#define DAHF_SPECIALSETTINGS 0x00000001 // App requires separate VM
#define DAHF_SPECIALSETTINGS_BIT 0 // (Winlie, SDAM, XMS cap...)
#define DAHF_NOPAGELOCKS 0x00000002 // Ignore DPMI PageLocks
#define DAHF_NOPAGELOCKS_BIT 1 // if not paging through DOS
#define DAHF_NOMSDOSWARN 0x00000004 // Do not suggest SDAM
#define DAHF_NOMSDOSWARN_BIT 2
#define DAHF_VALIDATELOCKS 0x00000008 // Do not let DPMI app lock
#define DAHF_VALIDATELOCKS_BIT 3 // memory it didn't allocate
#define DAHF_TRACESEGLOAD 0x00000010 // Enable trace flag hack for
#define DAHF_TRACESEGLOAD_BIT 4 // segment load faults
#ifdef NEC_98
#define DAHF_MAXENVSIZE 0x00000020 // Use maximize environment
#define DAHF_MAXENVSIZE_BIT 5 // size(=0xffff) for apps like
// Justsystem
#endif //NEC_98
/*****************************************************************************
*
* SHELL_Get_TermInfo
*
* Private structure used to get detailed information when a VM crashed.
*
* If the VM terminated because the initial EXEC failed, the termination
* error code will have high word zero and low byte equal to the DOS error
* code.
*/
/* H2INCSWITCHES -t */
typedef struct VMFaultInfo2 { /* VMFI2 */
ULONG fl; /* Flags (this lives in the same place
* as the TermVMHnd)
*/
/* These fields form a TermStruc */
ULONG TermErrCd; /* Error code for termination */
ULONG TermErrCdRef; /* Reference data for termination */
ULONG TermExitCode; /* Application exit code */
/* These fields form a VMFaultInfo, meaningful only if we crashed. */
ULONG EIP; /* faulting EIP */
WORD CS; /* faulting CS */
WORD Ints; /* interrupts in service, if any */
/* These fields are valid only if the VM terminated by crashing */
char szCrashText[80]; /* Location of crash (if in a VxD) */
char VxdReported[9]; /* name of VxD who reported the crash */
} VMFAULTINFO2;
/*
* Flags for vmfi2_fl.
*/
#define VMFI2FL_BLANKSCREEN 1 /* Screen is blank */
#define VMFI2FL_RING0CRASH 2 /* Crashed at ring 0 */
/* Error codes.
*
* For VDAE_InsMemDev and VDAE_DevNuke the error ref data points to
* the 8 character device name.
*/
#define VDAE_PrivInst 0x00010001 /* Privledged instruction */
#define VDAE_InvalInst 0x00010002 /* Invalid instruction */
#define VDAE_InvalPgFlt 0x00010003 /* Invalid page fault */
#define VDAE_InvalGpFlt 0x00010004 /* Invalid GP fault */
#define VDAE_InvalFlt 0x00010005 /* Invalid fault, not any of abv */
#define VDAE_UserNuke 0x00010006 /* User requested NUKE of running */
/* VM */
#define VDAE_DevNuke 0x00010007 /* Device specific problem */
#define VDAE_DevNukeHdwr 0x00010008 /* Device specific prob, HW prgm */
#define VDAE_NukeNoMsg 0x00010009 /* Supress WINOA message */
#define VDAE_OkNukeMask 0x80000000 /* "Good" nuke bit */
#define VDAE_InsMemGeneric 0x00020000 /* Unknown VxD failed create */
#define VDAE_InsMemV86 0x00020001 /* base V86 mem - V86MMGR */
#define VDAE_InsV86Space 0x00020002 /* Kb Req too large - V86MMGR */
#define VDAE_InsMemXMS 0x00020003 /* XMS Kb Req - V86MMGR */
#define VDAE_InsMemEMS 0x00020004 /* EMS Kb Req - V86MMGR */
#define VDAE_InsMemV86Hi 0x00020005 /* Hi DOS V86 mem - DOSMGR */
/* V86MMGR */
#define VDAE_InsMemVid 0x00020006 /* Base Video mem - VDD */
#define VDAE_InsMemVM 0x00020007 /* Base VM mem - VMM */
/* CB, Inst Buffer */
#define VDAE_InsMemDev 0x00020008 /* Couldn't alloc base VM */
#define VDAE_CrtNoMsg 0x00020009 /* Supress WINOA message */
/*****************************************************************************
*
* On SHELL_Set_Hotkey_Info, USER calls us with
*
* DS:AX -> array of HOTKEYSTRUCT structures
* CX = number of entries in array (possibly zero)
* DS:BX -> linked list of GLOBALHOTKEY structures
*
*/
/* HOTKEYSTRUCT - Hotkeys of type 1
*
* This structure is used with the WM_(SET/GET)HOTKEY messages
* and the SC_HOTKEY syscommand.
*
* WARNING: Both USER and WinOlDAp use this structure
*/
#define HKFL_SHIFT 1 /* Either shift key down */
#define HKFL_CTRL 2 /* Either Ctrl key down */
#define HKFL_ALT 4 /* Either Alt key down */
#define HKFL_EXT 8 /* This is an extended key */
#define HKFL_WIN 16 /* Either Nexus flappy-window down */
/* XLATOFF */
#ifdef HOTKEYF_SHIFT
#if HKFL_SHIFT != HOTKEYF_SHIFT || \
HKFL_CTRL != HOTKEYF_CONTROL || \
HKFL_ALT != HOTKEYF_ALT || \
HKFL_EXT != HOTKEYF_EXT
#error "Hotkey state bits don't match!"
#endif
#endif
/* XLATON */
typedef struct HOTKEYSTRUCT { /* hk */
#ifdef USER_IS_INCLUDING_VMDA
HWND_16 hwnd16; /* window that owns the hotkey */
#else
WORD hwnd16; /* window that owns the hotkey */
#endif
WORD key; /* LOBYTE = Window virtual key */
/* HIBYTE = Keystate modifieds (HKFL_*) */
WORD scan; /* OEM scan code for key (used by Shell.VxD) */
} HOTKEYSTRUCT;
typedef HOTKEYSTRUCT NEAR *PHOTKEYSTRUCT;
/* GLOBALHOTKEY - Hotkeys of type 2
*
* This structure is used with the (Un)RegisterHotkey functions
* and the WM_HOTKEY message.
*
* WARNING: USER has its own definition for this structure.
*
* DOUBLE WARNING: The modifier states are *different* from those
* for hotkeys of type 1! Aigh!
*/
#define GHKFL_ALT 1 /* Either Alt key down */
#define GHKFL_CTRL 2 /* Either Ctrl key down */
#define GHKFL_SHIFT 4 /* Either shift key down */
#define GHKFL_WIN 8 /* Either Nexus flappy-window down */
/* XLATOFF */
#ifdef MOD_WIN
#if GHKFL_SHIFT != MOD_SHIFT || \
GHKFL_CTRL != MOD_CONTROL || \
GHKFL_ALT != MOD_ALT || \
GHKFL_WIN != MOD_WIN
#error "Global hotkey state bits don't match!"
#endif
#endif
/* XLATON */
typedef struct GLOBALHOTKEY { /* ghk */
#ifdef USER_IS_INCLUDING_VMDA
struct GLOBALHOTKEY NEAR *phkNext;
#else
WORD phkNext;
#endif
WORD hq;
DWORD id;
WORD hwnd16;
WORD fsModifiers;
WORD vk;
WORD scan;
} GLOBALHOTKEY, NEAR *PGLOBALHOTKEY;
/*****************************************************************************/
/* H2INCSWITCHES -t- */
#ifdef VK_NUMPAD0
#if (VK_NUMPAD0 != 0x60) || (VK_NUMPAD9 != 0x69)
#error "VK_ codes don't match!"
#endif
#else
#define VK_NUMPAD0 0x60
#define VK_NUMPAD9 0x69
#endif
/*****************************************************************************
*
* Undocumented flag bits for SHELL_Event.
*
*/
#if 0 // Historical purposes
#define SE_WP_SetFocusBoost 0x00010000 // Boost the SYS VM till a
#define SE_WP_SetFocusBoostBit 16 // Set_Focus call
//
#define SE_WP_SwitcherBoost 0x00020000 // Leftover from 3.1
#define SE_WP_SwitcherBoostBit 17 //
//
#define SE_WP_FilSysChgBoost 0x00040000 // Leftover from 3.1
#define SE_WP_FilSysChgBoostBit 18 //
//
#define SE_WP_ClipAPIBoost 0x00080000 // Boost the SYS VM during clipbrd
#define SE_WP_ClipAPIBoostBit 19 // API
#else // There is only one type of
// boost, so everybody shares.
#define SE_WP_SetFocusBoost SE_WP_PrtScBoost
#define SE_WP_SetFocusBoostBit SE_WP_PrtScBoostBit
#define SE_WP_ClipAPIBoost SE_WP_PrtScBoost
#define SE_WP_ClipAPIBoostBit SE_WP_PrtScBoostBit
#define SE_WP_Zombie 0x80000000 // Dead event but must linger
#define SE_WP_ZombieBit 31 // for buggy 3.1 VDDs
#endif
/* SE_WP_PrtScBoost is defined in shell.h */
/* SE_WP_DispUpdBoost is defined in shell.h */