1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
/*++ 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 WK32KernelTrace(PVDMFRAME pFrame);
ULONG FASTCALL WK32ExitKernel(PVDMFRAME pFrame);
ULONG FASTCALL WK32FatalExit(PVDMFRAME pFrame);
VOID FASTCALL WK32KillRemoteTask(PVDMFRAME pFrame);
VOID FASTCALL WK32KillTask(PVDMFRAME pFrame);
ULONG FASTCALL WK32LoadModule32(PVDMFRAME pFrame);
ULONG FASTCALL WK32RegisterShellWindowHandle(PVDMFRAME pFrame);
ULONG FASTCALL WK32WOWInitTask(PVDMFRAME pFrame);
VOID FASTCALL WK32WOWNotifyWOW32(PVDMFRAME pFrame);
ULONG FASTCALL WK32WOWOutputDebugString(PVDMFRAME pFrame);
ULONG FASTCALL WK32WOWQueryPerformanceCounter(PVDMFRAME pFrame);
ULONG FASTCALL WK32WaitEvent(PVDMFRAME pFrame);
VOID 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);
VOID FASTCALL WK32WowMsgBox(PVDMFRAME pFrame);
ULONG FASTCALL WK32DosWowInit(PVDMFRAME pFrame);
ULONG FASTCALL WK32CheckUserGdi(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowPartyByNumber(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowShouldWeSayWin95(PVDMFRAME pFrame);
ULONG FASTCALL WK32GetVersionEx(PVDMFRAME pFrame);
ULONG FASTCALL WK32WowGetModuleHandle(PVDMFRAME pFrame);
ULONG FASTCALL WK32GetShortPathName(PVDMFRAME pFrame);
ULONG FASTCALL WK32FindAndReleaseDib(PVDMFRAME pvf); /* in wdib.c */
ULONG FASTCALL WK32WowReserveHtask(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);
ULONG W32ReadWOWCompatFlags(HTASK16 htask16, DWORD *pdwWOWXCompatFlagsEx);
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);
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 );
|