Partially implemented LdrLock/UnlockLoaderLock.
[wine] / include / toolhelp.h
1 /*
2  * Copyright (C) the Wine project
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  */
18
19 #ifndef __WINE_TOOLHELP_H
20 #define __WINE_TOOLHELP_H
21
22 #include "windef.h"
23 #include "wine/windef16.h"
24
25 #define MAX_DATA        11
26 #define MAX_MODULE_NAME 9
27 #define MAX_PATH16      255
28 #define MAX_CLASSNAME   255
29
30 #include "pshpack1.h"
31
32 /* Global heap */
33
34 typedef struct
35 {
36     DWORD dwSize;
37     WORD  wcItems;
38     WORD  wcItemsFree;
39     WORD  wcItemsLRU;
40 } GLOBALINFO;
41
42 typedef struct
43 {
44     DWORD     dwSize;
45     DWORD     dwAddress;
46     DWORD     dwBlockSize;
47     HGLOBAL16 hBlock;
48     WORD      wcLock;
49     WORD      wcPageLock;
50     WORD      wFlags;
51     BOOL16    wHeapPresent;
52     HGLOBAL16 hOwner;
53     WORD      wType;
54     WORD      wData;
55     DWORD     dwNext;
56     DWORD     dwNextAlt;
57 } GLOBALENTRY;
58
59   /* GlobalFirst()/GlobalNext() flags */
60 #define GLOBAL_ALL      0
61 #define GLOBAL_LRU      1
62 #define GLOBAL_FREE     2
63
64   /* wType values */
65 #define GT_UNKNOWN      0
66 #define GT_DGROUP       1
67 #define GT_DATA         2
68 #define GT_CODE         3
69 #define GT_TASK         4
70 #define GT_RESOURCE     5
71 #define GT_MODULE       6
72 #define GT_FREE         7
73 #define GT_INTERNAL     8
74 #define GT_SENTINEL     9
75 #define GT_BURGERMASTER 10
76
77 /* wData values */
78 #define GD_USERDEFINED      0
79 #define GD_CURSORCOMPONENT  1
80 #define GD_BITMAP           2
81 #define GD_ICONCOMPONENT    3
82 #define GD_MENU             4
83 #define GD_DIALOG           5
84 #define GD_STRING           6
85 #define GD_FONTDIR          7
86 #define GD_FONT             8
87 #define GD_ACCELERATORS     9
88 #define GD_RCDATA           10
89 #define GD_ERRTABLE         11
90 #define GD_CURSOR           12
91 #define GD_ICON             14
92 #define GD_NAMETABLE        15
93 #define GD_MAX_RESOURCE     15
94
95 /* wFlags values */
96 #define GF_PDB_OWNER        0x0100      /* Low byte is KERNEL flags */
97
98 WORD   WINAPI GlobalHandleToSel16( HGLOBAL16 handle );
99 BOOL16 WINAPI GlobalInfo16( GLOBALINFO *pInfo );
100 BOOL16 WINAPI GlobalFirst16( GLOBALENTRY *pGlobal, WORD wFlags );
101 BOOL16 WINAPI GlobalNext16( GLOBALENTRY *pGlobal, WORD wFlags) ;
102 BOOL16 WINAPI GlobalEntryHandle16( GLOBALENTRY *pGlobal, HGLOBAL16 hItem );
103 BOOL16 WINAPI GlobalEntryModule16( GLOBALENTRY *pGlobal, HMODULE16 hModule,
104                                  WORD wSeg );
105
106 /* Local heap */
107
108 typedef struct
109 {
110     DWORD   dwSize;
111     WORD    wcItems;
112 } LOCALINFO;
113
114 typedef struct
115 {
116     DWORD   dwSize;
117     HLOCAL16  hHandle;
118     WORD    wAddress;
119     WORD    wSize;
120     WORD    wFlags;
121     WORD    wcLock;
122     WORD    wType;
123     WORD    hHeap;
124     WORD    wHeapType;
125     WORD    wNext;
126 } LOCALENTRY;
127
128 /* wHeapType values */
129 #define NORMAL_HEAP     0
130 #define USER_HEAP       1
131 #define GDI_HEAP        2
132
133 /* wFlags values */
134 #define LF_FIXED        1
135 #define LF_FREE         2
136 #define LF_MOVEABLE     4
137
138 /* wType values */
139 #define LT_NORMAL                   0
140 #define LT_FREE                     0xff
141 #define LT_GDI_PEN                  1   /* LT_GDI_* is for GDI's heap */
142 #define LT_GDI_BRUSH                2
143 #define LT_GDI_FONT                 3
144 #define LT_GDI_PALETTE              4
145 #define LT_GDI_BITMAP               5
146 #define LT_GDI_RGN                  6
147 #define LT_GDI_DC                   7
148 #define LT_GDI_DISABLED_DC          8
149 #define LT_GDI_METADC               9
150 #define LT_GDI_METAFILE             10
151 #define LT_GDI_MAX                  LT_GDI_METAFILE
152 #define LT_USER_CLASS               1   /* LT_USER_* is for USER's heap */
153 #define LT_USER_WND                 2
154 #define LT_USER_STRING              3
155 #define LT_USER_MENU                4
156 #define LT_USER_CLIP                5
157 #define LT_USER_CBOX                6
158 #define LT_USER_PALETTE             7
159 #define LT_USER_ED                  8
160 #define LT_USER_BWL                 9
161 #define LT_USER_OWNERDRAW           10
162 #define LT_USER_SPB                 11
163 #define LT_USER_CHECKPOINT          12
164 #define LT_USER_DCE                 13
165 #define LT_USER_MWP                 14
166 #define LT_USER_PROP                15
167 #define LT_USER_LBIV                16
168 #define LT_USER_MISC                17
169 #define LT_USER_ATOMS               18
170 #define LT_USER_LOCKINPUTSTATE      19
171 #define LT_USER_HOOKLIST            20
172 #define LT_USER_USERSEEUSERDOALLOC  21
173 #define LT_USER_HOTKEYLIST          22
174 #define LT_USER_POPUPMENU           23
175 #define LT_USER_HANDLETABLE         32
176 #define LT_USER_MAX                 LT_USER_HANDLETABLE
177
178 BOOL16 WINAPI LocalInfo16( LOCALINFO *pLocalInfo, HGLOBAL16 handle );
179 BOOL16 WINAPI LocalFirst16( LOCALENTRY *pLocalEntry, HGLOBAL16 handle );
180 BOOL16 WINAPI LocalNext16( LOCALENTRY *pLocalEntry );
181
182 /* Local 32-bit heap */
183
184 typedef struct
185 {
186     DWORD dwSize;                /* 00 */
187     DWORD dwMemReserved;         /* 04 */
188     DWORD dwMemCommitted;        /* 08 */
189     DWORD dwTotalFree;           /* 0C */
190     DWORD dwLargestFreeBlock;    /* 10 */
191     DWORD dwcFreeHandles;        /* 14 */
192 } LOCAL32INFO;
193
194 typedef struct
195 {
196     DWORD dwSize;                /* 00 */
197     WORD hHandle;                /* 04 */
198     DWORD dwAddress;             /* 06 */
199     DWORD dwSizeBlock;           /* 0A */
200     WORD wFlags;                 /* 0E */
201     WORD wType;                  /* 10 */
202     WORD hHeap;                  /* 12 */
203     WORD wHeapType;              /* 14 */
204     DWORD dwNext;                /* 16 */
205     DWORD dwNextAlt;             /* 1A */
206 } LOCAL32ENTRY;
207
208 /* LOCAL32ENTRY.wHeapType flags same as LOCALENTRY.wHeapType flags */
209 /* LOCAL32ENTRY.wFlags same as LOCALENTRY.wFlags */
210 /* LOCAL32ENTRY.wType same as LOCALENTRY.wType */
211
212 BOOL16 WINAPI Local32Info16( LOCAL32INFO *pLocal32Info, HGLOBAL16 handle );
213 BOOL16 WINAPI Local32First16( LOCAL32ENTRY *pLocal32Entry, HGLOBAL16 handle );
214 BOOL16 WINAPI Local32Next16( LOCAL32ENTRY *pLocal32Entry );
215
216
217 /* modules */
218
219 typedef struct
220 {
221     DWORD      dwSize;
222     char       szModule[MAX_MODULE_NAME + 1];
223     HMODULE16  hModule;
224     WORD       wcUsage;
225     char       szExePath[MAX_PATH16 + 1];
226     HANDLE16   wNext;
227 } MODULEENTRY, *LPMODULEENTRY;
228
229 BOOL16 WINAPI ModuleFirst16(MODULEENTRY *lpModule);
230 BOOL16 WINAPI ModuleNext16(MODULEENTRY *lpModule);
231 BOOL16 WINAPI ModuleFindName16(MODULEENTRY *lpModule, LPCSTR lpstrName);
232 BOOL16 WINAPI ModuleFindHandle16(MODULEENTRY *lpModule, HMODULE16 hModule);
233
234 /* tasks */
235
236 typedef struct
237 {
238     DWORD        dwSize;
239     HTASK16      hTask;
240     HTASK16      hTaskParent;
241     HINSTANCE16  hInst;
242     HMODULE16    hModule;
243     WORD         wSS;
244     WORD         wSP;
245     WORD         wStackTop;
246     WORD         wStackMinimum;
247     WORD         wStackBottom;
248     WORD         wcEvents;
249     HGLOBAL16    hQueue;
250     char         szModule[MAX_MODULE_NAME + 1];
251     WORD         wPSPOffset;
252     HANDLE16     hNext;
253 } TASKENTRY, *LPTASKENTRY;
254
255 BOOL16 WINAPI TaskFirst16(LPTASKENTRY lpTask);
256 BOOL16 WINAPI TaskNext16(LPTASKENTRY lpTask);
257 BOOL16 WINAPI TaskFindHandle16(LPTASKENTRY lpTask, HTASK16 hTask);
258 DWORD  WINAPI TaskSetCSIP(HTASK16 hTask, WORD wCS, WORD wIP);
259 DWORD  WINAPI TaskGetCSIP(HTASK16 hTask);
260 BOOL16 WINAPI TaskSwitch(HTASK16 hTask, DWORD dwNewCSIP);
261
262 /* flag for TerminateApp16() */
263 #define NO_UAE_BOX     1
264
265 /* mem info */
266
267 typedef struct tagMEMMANINFO {
268         DWORD dwSize;
269         DWORD dwLargestFreeBlock;
270         DWORD dwMaxPagesAvailable;
271         DWORD dwMaxPagesLockable;
272         DWORD dwTotalLinearSpace;
273         DWORD dwTotalUnlockedPages;
274         DWORD dwFreePages;
275         DWORD dwTotalPages;
276         DWORD dwFreeLinearSpace;
277         DWORD dwSwapFilePages;
278         WORD wPageSize;
279 } MEMMANINFO;
280 typedef MEMMANINFO *LPMEMMANINFO;
281
282 typedef struct
283 {
284     DWORD     dwSize;
285     WORD      wUserFreePercent;
286     WORD      wGDIFreePercent;
287     HGLOBAL16 hUserSegment;
288     HGLOBAL16 hGDISegment;
289 } SYSHEAPINFO;
290
291 BOOL16 WINAPI MemManInfo16(LPMEMMANINFO lpEnhMode);
292 BOOL16 WINAPI SystemHeapInfo16( SYSHEAPINFO *pHeapInfo );
293
294 /* timer info */
295
296 typedef struct tagTIMERINFO {
297         DWORD dwSize;
298         DWORD dwmsSinceStart;
299         DWORD dwmsThisVM;
300 } TIMERINFO;
301
302 BOOL16 WINAPI TimerCount16( TIMERINFO *pTimerInfo );
303
304 /* Window classes */
305
306 typedef struct
307 {
308     DWORD     dwSize;
309     HMODULE16 hInst;              /* This is really an hModule */
310     char      szClassName[MAX_CLASSNAME + 1];
311     HANDLE16  wNext;
312 } CLASSENTRY;
313
314 BOOL16 WINAPI ClassFirst16( CLASSENTRY *pClassEntry );
315 BOOL16 WINAPI ClassNext16( CLASSENTRY *pClassEntry );
316
317
318 /* Memory read/write */
319
320 DWORD WINAPI MemoryRead16( WORD sel, DWORD offset, void *buffer, DWORD count );
321 DWORD WINAPI MemoryWrite16( WORD sel, DWORD offset, void *buffer, DWORD count );
322
323 /* flags to NotifyRegister() */
324 #define NF_NORMAL       0       /* everything except taskswitches, debugerrors,
325                                  * debugstrings
326                                  */
327 #define NF_TASKSWITCH   1       /* get taskswitch information */
328 #define NF_RIP          2       /* get debugerrors of system */
329
330 BOOL16 WINAPI NotifyRegister16(HTASK16 htask,FARPROC16 lpfnCallback,WORD wFlags);
331
332 #define NFY_UNKNOWN     0
333 #define NFY_LOADSEG     1
334 /* DATA is a pointer to following struct: */
335 typedef struct {
336         DWORD   dwSize;
337         WORD    wSelector;
338         WORD    wSegNum;
339         WORD    wType;          /* bit 0 set if this is a code segment */
340         WORD    wcInstance;     /* only valid for data segment */
341 } NFYLOADSEG;
342 /* called when freeing a segment. LOWORD(dwData) is the freed selector */
343 #define NFY_FREESEG     2
344
345 /* called when loading/starting a DLL */
346 #define NFY_STARTDLL    3
347 typedef struct {
348     DWORD      dwSize;
349     HMODULE16  hModule;
350     WORD       wCS;
351     WORD       wIP;
352 } NFYSTARTDLL;
353
354 /* called when starting a task. dwData is CS:IP */
355 #define NFY_STARTTASK   4
356
357 /* called when a task terminates. dwData is the return code */
358 #define NFY_EXITTASK    5
359
360 /* called when module is removed. LOWORD(dwData) is the handle */
361 #define NFY_DELMODULE   6
362
363 /* RIP? debugevent */
364 #define NFY_RIP         7
365 typedef struct {
366         DWORD   dwSize;
367         WORD    wIP;
368         WORD    wCS;
369         WORD    wSS;
370         WORD    wBP;
371         WORD    wExitCode;
372 } NFYRIP;
373
374 /* called before (after?) switching to a task
375  * no data, callback should call GetCurrentTask
376  */
377 #define NFY_TASKIN      8
378
379 /* called before(after?) switching from a task
380  * no data, callback should call GetCurrentTask
381 */
382 #define NFY_TASKOUT     9
383
384 /* returns ASCII input value, dwData not set */
385 #define NFY_INCHAR      10
386
387 /* output debugstring (pointed to by dwData) */
388 #define NFY_OUTSTRING   11
389
390 /* log errors */
391 #define NFY_LOGERROR    12
392 typedef struct {
393         DWORD   dwSize;
394         UINT16  wErrCode;
395         VOID   *lpInfo; /* depends on wErrCode */
396 } NFYLOGERROR;
397
398 /* called for parameter errors? */
399 #define NFY_LOGPARAMERROR       13
400 typedef struct {
401     DWORD       dwSize;
402     UINT16      wErrCode;
403     FARPROC16   lpfnErrorAddr;
404     void      **lpBadParam;
405 } NFYLOGPARAMERROR;
406
407 typedef struct {
408     DWORD dwSize;
409     HTASK16 hTask;
410     WORD wSS;
411     WORD wBP;
412     WORD wCS;
413     WORD wIP;
414     HMODULE16 hModule;
415     WORD wSegment;
416     WORD wFlags;
417 } STACKTRACEENTRY;
418
419 #include "poppack.h"
420
421 #endif /* __WINE_TOOLHELP_H */