windows-nt/Source/XPSP1/NT/base/mvdm/wow32/wkman.h
2020-09-26 16:20:57 +08:00

155 lines
6 KiB
C

/*++ BUILD Version: 0001
*
* WOW v1.0
*
* Copyright (c) 1991, Microsoft Corporation
*
* WKMAN.H
* WOW32 16-bit Kernel API support (manually-coded thunks)
*
* History:
* Created 27-Jan-1991 by Jeff Parsons (jeffpar)
* 30-Apr-91 mattfe added WK32CheckLoadModuleDrv
* 26-Aug-91 mattfe added FileIO routines
* 19-JAN-92 mattfe added getnextvdm routine
* 4-MAR-92 mattfe added KillProcess
* 12-mar-92 mattfe added w32notifythread
* 5-may-92 mattfe added HungAppSupport
--*/
ULONG FASTCALL WK32DirectedYield(PVDMFRAME pFrame);
ULONG FASTCALL WK32InitTask(PVDMFRAME pFrame);
ULONG FASTCALL WK32WOWKernelTrace(PVDMFRAME pFrame);
ULONG FASTCALL WK32ExitKernel(PVDMFRAME pFrame);
ULONG FASTCALL WK32FatalExit(PVDMFRAME pFrame);
ULONG FASTCALL WK32KillRemoteTask(PVDMFRAME pFrame);
ULONG FASTCALL WK32WOWKillTask(PVDMFRAME pFrame);
ULONG FASTCALL WK32WOWLoadModule32(PVDMFRAME pFrame);
ULONG FASTCALL WK32RegisterShellWindowHandle(PVDMFRAME pFrame);
ULONG FASTCALL WK32WOWInitTask(PVDMFRAME pFrame);
ULONG FASTCALL WK32WOWNotifyWOW32(PVDMFRAME pFrame);
ULONG FASTCALL WK32WOWOutputDebugString(PVDMFRAME pFrame);
ULONG FASTCALL WK32WOWQueryPerformanceCounter(PVDMFRAME pFrame);
ULONG FASTCALL WK32WaitEvent(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowCloseComPort(PVDMFRAME pFrame);
DWORD FASTCALL WK32WowDelFile(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowFailedExec(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowFailedExec(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowGetNextVdmCommand (PVDMFRAME pFrame);
ULONG FASTCALL WK32WowIsKnownDLL(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowSetIdleHook(PVDMFRAME pFrame);
ULONG FASTCALL WK32Yield(PVDMFRAME pFrame);
ULONG FASTCALL WK32OldYield(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowWaitForMsgAndEvent(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowMsgBox(PVDMFRAME pFrame);
ULONG FASTCALL WK32DosWowInit(PVDMFRAME pFrame);
ULONG FASTCALL WK32CheckUserGdi(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowPartyByNumber(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowGetModuleHandle(PVDMFRAME pFrame);
ULONG FASTCALL WK32FindAndReleaseDib(PVDMFRAME pvf); /* in wdib.c */
ULONG FASTCALL WK32WowReserveHtask(PVDMFRAME pFrame);
ULONG FASTCALL WK32WOWLFNEntry(PVDMFRAME pFrame); /* in wkman.c */
ULONG FASTCALL WK32WowShutdownTimer(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowTrimWorkingSet(PVDMFRAME pFrame);
ULONG FASTCALL WK32SetAppCompatFlags(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowSyncTask(PVDMFRAME pFrame);
BOOL WK32InitializeHungAppSupport(VOID);
DWORD W32HungAppNotifyThread(UINT hKillUniqueID);
DWORD W32RemoteThread(VOID);
DWORD W32Thread(LPVOID vpInitialSSSP);
VOID W32DestroyTask( PTD ptd);
VOID W32EndTask(VOID);
ULONG W32GetAppCompatFlags(HTASK16 hTask16);
BOOL W32ReadWOWCompatFlags(HTASK16 htask16, PTD pTD);
VOID W32Init9xSpecialPath();
BOOL W32Map9xSpecialPath(PSZ lpPathName, PSZ lpMapPathName);
#ifdef FE_SB
ULONG W32ReadWOWCompatFlags2(HTASK16 htask16);
#endif // FE_SB
VOID WK32DeleteTask(PTD ptdDelete);
VOID WK32InitWowIsKnownDLL(HANDLE hKeyWow);
LRESULT CALLBACK WK32ForegroundIdleHook(int code, WPARAM wParam, LPARAM lParam);
VOID W32RefreshCurrentDirectories (PCHAR lpszzEnv);
BOOL FASTCALL WowGetProductNameVersion(PSZ pszExePath, PSZ pszProductName,
DWORD cbProductName, PSZ pszProductVersion,
DWORD cbProductVersion,
PSZ pszParamName, PSZ pszParamValue,
DWORD cbParamValue);
BOOL FASTCALL WowDoNameVersionMatch(PSZ pszExePath, PSZ pszProductName,
PSZ pszProductVersion);
VOID W32InitWOWSetupNames(VOID);
BOOL W32IsSetupProgram(PSZ pszModName, PSZ pszFilePath);
// SoftPC Routines
HANDLE RegisterWOWIdle(void);
VOID BlockWOWIdle(BOOL Blocking);
// User32 Routines
VOID ShowStartGlass (DWORD GLASSTIME);
typedef struct _HMODCACHE { /* hmodcache */
HAND16 hInst16;
HAND16 hMod16;
} HMODCACHE, *PHMODCACHE;
extern HMODCACHE ghModCache[];
#define CHMODCACHE 4 // size of cache table
VOID RemoveHmodFromCache(HAND16 hmod16);
typedef struct _CMDSHOW { /* cmdshow */
WORD nTwo;
WORD nCmdShow;
} CMDSHOW, *PCMDSHOW;
typedef struct _LOAD_MODULE_PARAMS { /* loadmoduleparms32 */
LPVOID lpEnvAddress;
LPSTR lpCmdLine;
PCMDSHOW lpCmdShow;
DWORD dwReserved;
} LOAD_MODULE_PARAMS, *PLOAD_MODULE_PARAMS;
typedef struct _WINOLDAP_THREAD_PARAMS {
HANDLE hProcess;
HWND hwndWinOldAp;
} WINOLDAP_THREAD_PARAMS, *PWINOLDAP_THREAD_PARAMS;
DWORD W32WinOldApThread(PWINOLDAP_THREAD_PARAMS pParams);
// Globals
extern INT busycount; // Used to detect if WOW is hung
extern HAND16 gKillTaskID; // 16 bit tdb of task to kill
extern HAND16 ghShellTDB; // TDB of WOWEXEC
extern HWND ghwndShell; // Needed for ExitWindowsExec
#define CMS_WAITWOWEXECTIMEOUT 60*1000 // Wait for WOWEXEC to respond
#define CMS_WAITTASKEXIT 5*1000 // Hung App Wait TimeOut
#define CMS_FOREVER 0xffffffff // wait for ever
#define ALL_TASKS 0xffffffff // for exitvdm
// IRQ: Interrupt: ICA: Line: Description:
// -------------------------------------------------------------------
// IRQ1 0x09 0 1 Keyboard service required.
#define KEYBOARD_LINE 1
#define KEYBOARD_ICA 0
extern HANDLE hSharedTaskMemory;
extern DWORD dwSharedProcessOffset;
extern VPVOID vpDebugWOW;
extern VPVOID vptopPDB;
VOID CleanseSharedList( VOID );
VOID AddProcessSharedList( VOID );
VOID RemoveProcessSharedList( VOID );
WORD AddTaskSharedList( HTASK16, HAND16, PSZ, PSZ );
VOID RemoveTaskSharedList( VOID );
ULONG FASTCALL WK32WowPassEnvironment(PVDMFRAME);
extern HANDLE ghTaskAppHelp; // hProcess from apphelp (see WK32SyncTask)
extern BOOL gfTaskContinue; // indicates whether child thread should continue without waiting for apphelp
extern const CHAR szSystem[]; // "\\system"