/*++ 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"