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