summaryrefslogtreecommitdiffstats
path: root/private/mvdm/wow32/wowhooks.h
blob: d36a4a8bf167bae87710eedd2253ed94c3666e33 (plain) (blame)
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
//*****************************************************************************
//
// HOOKS -
//
//     Header file for 32bit stubs and thunks of 16bit hooks
//
//
// 01-07-92  NanduriR   Created.
//
//*****************************************************************************

typedef LONG (APIENTRY *HKPROC)(INT, LONG, LONG);

typedef struct {
    HANDLE hMod;                  // Module handle
    INT    cHookProcs;            // Total Number of thunk stubs.
} HOOKPERPROCESSDATA, FAR *LPHOOKPERPROCESSDATA;

typedef struct {
    BYTE   iIndex;                // array index;
    BYTE   InUse;                 // TRUE if this Proc32 is already hooked
    HAND16 hMod16;                // 16bit HookDLL module handle
    HANDLE hMod;                  // Modulehande of Thunk Hook Dll
    HKPROC Proc32;                // 32bit HookProc stub
    INT    iHook;                 // type of Hook
    DWORD  Proc16;                // actual 16bit HookProc
    INT    TaskId;                // id of task that callled setwindowshook
    HHOOK  hHook;                 // handle returned by SetWindowHookEx
} HOOKSTATEDATA, FAR *LPHOOKSTATEDATA;

typedef struct {
    INT   nCode;                  // the input params to a hook func.
    LONG  wParam;
    LONG  lParam;
} HOOKPARAMS, FAR *LPHOOKPARAMS;

#define PUTMSGFILTER16(pMsg16,lpMsg) {\
        STOREWORD(pMsg16->hwnd, GETHWND16((lpMsg)->hwnd));\
        STOREWORD(pMsg16->message,  (lpMsg)->message);\
        STOREWORD(pMsg16->wParam,   (lpMsg)->wParam);\
        STORELONG(pMsg16->lParam,   (lpMsg)->lParam);\
        STORELONG(pMsg16->time, (lpMsg)->time);\
        STOREWORD(pMsg16->pt.x, (lpMsg)->pt.x);\
        STOREWORD(pMsg16->pt.y, (lpMsg)->pt.y);\
    }

#define GETMSGFILTER16(pMsg16,lpMsg) {\
        (lpMsg)->hwnd      = HWND32(FETCHWORD(pMsg16->hwnd));\
        (lpMsg)->message   = FETCHWORD(pMsg16->message);\
        (lpMsg)->wParam    = FETCHWORD(pMsg16->wParam);\
        (lpMsg)->lParam    = FETCHLONG(pMsg16->lParam);\
        (lpMsg)->time      = FETCHLONG(pMsg16->time);\
        (lpMsg)->pt.x      = FETCHSHORT(pMsg16->pt.x);\
        (lpMsg)->pt.y      = FETCHSHORT(pMsg16->pt.y);\
    }

#define PUTMOUSEHOOKSTRUCT16(pMHStruct16,lpMHStruct) {\
        STOREWORD(pMHStruct16->pt.x, (lpMHStruct)->pt.x);\
        STOREWORD(pMHStruct16->pt.y, (lpMHStruct)->pt.y);\
        STOREWORD(pMHStruct16->hwnd, GETHWND16((lpMHStruct)->hwnd));\
        STOREWORD(pMHStruct16->wHitTestCode,   (lpMHStruct)->wHitTestCode);\
        STORELONG(pMHStruct16->dwExtraInfo,   (lpMHStruct)->dwExtraInfo);\
    }


#define GETMOUSEHOOKSTRUCT16(pMHStruct16,lpMHStruct) {\
        (lpMHStruct)->pt.x        = FETCHSHORT(pMHStruct16->pt.x);\
        (lpMHStruct)->pt.y        = FETCHSHORT(pMHStruct16->pt.y);\
        (lpMHStruct)->hwnd           = HWND32(FETCHWORD(pMHStruct16->hwnd));\
        (lpMHStruct)->wHitTestCode   = FETCHWORD(pMHStruct16->wHitTestCode);\
        (lpMHStruct)->dwExtraInfo    = FETCHLONG(pMHStruct16->dwExtraInfo);\
    }


// afterdark 3.0 compares the t1=lpeventmsg->time with t2=getcurrenttime().
// physically t2 > t1 always -  we truncate t2 to a multiple of 64 and
// thus sometimes t2 < t1 (numerically) which confuses the app and
// triggers the screen saver. So we do identical truncation here.
// No compatibility flag is used
//                                                     - nanduri

#define PUTEVENTMSG16(pEventMsg16,lpEventMsg) {\
        STOREWORD(pEventMsg16->message,  (lpEventMsg)->message);\
        STOREWORD(pEventMsg16->paramL,   (lpEventMsg)->paramL);\
        STOREWORD(pEventMsg16->paramH,   (lpEventMsg)->paramH);\
        STORELONG(pEventMsg16->time, GRAINYTICS((lpEventMsg)->time));\
    }


#define PUTCBTACTIVATESTRUCT16(pCbtAStruct16,lpCbtAStruct) {\
     STOREWORD(pCbtAStruct16->fMouse,  (lpCbtAStruct)->fMouse);\
     STOREWORD(pCbtAStruct16->hWndActive, (GETHWND16((lpCbtAStruct)->hWndActive)));\
    }


#define GETCBTACTIVATESTRUCT16(pCbtAStruct16,lpCbtAStruct) {\
     (lpCbtAStruct)->fMouse = FETCHWORD(pCbtAStruct16->fMouse);\
     (lpCbtAStruct)->hWndActive = HWND32(FETCHWORD(pCbtAStruct16->hWndActive));\
    }


LONG APIENTRY WU32StdHookProc(INT nCode, LONG wParam, LONG lParam, INT iFunc);
LONG APIENTRY WU32SubStdHookProc01(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc02(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc03(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc04(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc05(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc06(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc07(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc08(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc09(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc10(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc11(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc12(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc13(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc14(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc15(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc16(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc17(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc18(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc19(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc20(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc21(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc22(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc23(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc24(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc25(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc26(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc27(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc28(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc29(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc30(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc31(INT nCode, LONG wParam, LONG lParam);
LONG APIENTRY WU32SubStdHookProc32(INT nCode, LONG wParam, LONG lParam);

BOOL W32InitHookState(HANDLE hMod);
BOOL W32GetNotInUseHookStateData(LPHOOKSTATEDATA lpData);
BOOL W32GetHookStateData(LPHOOKSTATEDATA lpData);
BOOL W32SetHookStateData(LPHOOKSTATEDATA lpData);
BOOL W32GetThunkHookProc(INT iHook, DWORD Proc16, LPHOOKSTATEDATA lpData);
HHOOK W32FreeHHook(INT iHook, DWORD Proc16);
HHOOK W32FreeHHookOfIndex(INT iFunc);
BOOL W32GetHookParams(LPHOOKPARAMS lpHookParams);
LONG ThunkCallWndProcHook(INT nCode, LONG wParam, LPCWPSTRUCT lpCwpStruct,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkCbtHook(INT nCode, LONG wParam, LONG lParam,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkKeyBoardHook(INT nCode, LONG wParam, LONG lParam,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkMsgFilterHook(INT nCode, LONG wParam, LPMSG lpMsg,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkJournalHook(INT nCode, LONG wParam, LPEVENTMSG lpEventMsg,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkDebugHook(INT nCode, LONG wParam, LONG lParam,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkMouseHook(INT nCode, LONG wParam, LPMOUSEHOOKSTRUCT lpMHStruct,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkShellHook(INT nCode, LONG wParam, LONG lParam,
                                                     LPHOOKSTATEDATA lpHSData);


LONG APIENTRY WU32StdDefHookProc(INT nCode, LONG wParam, LONG lParam, INT iFunc);
VOID W32UnhookHooks( HAND16 hMod16, BOOL fQueue );
BOOL W32FreeOwnedHooks(INT iTaskId);
INT W32IsDuplicateHook(INT iHook, DWORD Proc16, INT TaskId);

LONG ThunkCallWndProcHook16(INT nCode, LONG wParam, VPVOID lpCwpStruct,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkCbtHook16(INT nCode, LONG wParam, VPVOID lParam,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkKeyBoardHook16(INT nCode, LONG wParam, LONG lParam,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkMsgFilterHook16(INT nCode, LONG wParam, VPVOID lpMsg,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkJournalHook16(INT nCode, LONG wParam, VPVOID lpEventMsg,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkDebugHook16(INT nCode, LONG wParam, LONG lParam,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkMouseHook16(INT nCode, LONG wParam, VPVOID lpMHStruct,
                                                     LPHOOKSTATEDATA lpHSData);
LONG ThunkShellHook16(INT nCode, LONG wParam, LONG lParam,
                                                     LPHOOKSTATEDATA lpHSData);
DWORD  W32GetHookDDEMsglParam(VOID);
VOID GetEventMessage16(PEVENTMSG16 pEventMsg16, LPEVENTMSG  lpEventMsg);