Authors: Chris Morgan <cmorgan@wpi.edu>, James Abbatiello <abbejy@wpi.edu>
[wine/multimedia.git] / include / toolhelp.h
blobe416ed0a9b89e6cd7be1c6df122fb51aae09ebde
1 #ifndef __WINE_TOOLHELP_H
2 #define __WINE_TOOLHELP_H
4 #include "windef.h"
5 #include "tlhelp32.h"
7 #define MAX_DATA 11
8 #define MAX_MODULE_NAME 9
9 #define MAX_PATH16 255
10 #define MAX_CLASSNAME 255
12 #pragma pack(1)
14 /* Global heap */
16 typedef struct
18 DWORD dwSize;
19 WORD wcItems;
20 WORD wcItemsFree;
21 WORD wcItemsLRU;
22 } GLOBALINFO;
24 typedef struct
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;
41 /* GlobalFirst()/GlobalNext() flags */
42 #define GLOBAL_ALL 0
43 #define GLOBAL_LRU 1
44 #define GLOBAL_FREE 2
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
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
77 /* wFlags values */
78 #define GF_PDB_OWNER 0x0100 /* Low byte is KERNEL flags */
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 );
88 /* Local heap */
90 typedef struct
92 DWORD dwSize;
93 WORD wcItems;
94 } LOCALINFO;
96 typedef struct
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;
110 /* wHeapType values */
111 #define NORMAL_HEAP 0
112 #define USER_HEAP 1
113 #define GDI_HEAP 2
115 /* wFlags values */
116 #define LF_FIXED 1
117 #define LF_FREE 2
118 #define LF_MOVEABLE 4
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
160 BOOL16 WINAPI LocalInfo16( LOCALINFO *pLocalInfo, HGLOBAL16 handle );
161 BOOL16 WINAPI LocalFirst16( LOCALENTRY *pLocalEntry, HGLOBAL16 handle );
162 BOOL16 WINAPI LocalNext16( LOCALENTRY *pLocalEntry );
164 /* Local 32-bit heap */
166 typedef struct
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;
176 typedef struct
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;
190 /* LOCAL32ENTRY.wHeapType flags same as LOCALENTRY.wHeapType flags */
191 /* LOCAL32ENTRY.wFlags same as LOCALENTRY.wFlags */
192 /* LOCAL32ENTRY.wType same as LOCALENTRY.wType */
194 BOOL16 WINAPI Local32Info16( LOCAL32INFO *pLocal32Info, HGLOBAL16 handle );
195 BOOL16 WINAPI Local32First16( LOCAL32ENTRY *pLocal32Entry, HGLOBAL16 handle );
196 BOOL16 WINAPI Local32Next16( LOCAL32ENTRY *pLocal32Entry );
199 /* modules */
201 typedef struct
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;
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);
216 /* tasks */
218 typedef struct
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;
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);
244 /* mem info */
246 typedef struct tagMEMMANINFO {
247 DWORD dwSize;
248 DWORD dwLargestFreeBlock;
249 DWORD dwMaxPagesAvailable;
250 DWORD dwMaxPagesLockable;
251 DWORD dwTotalLinearSpace;
252 DWORD dwTotalUnlockedPages;
253 DWORD dwFreePages;
254 DWORD dwTotalPages;
255 DWORD dwFreeLinearSpace;
256 DWORD dwSwapFilePages;
257 WORD wPageSize;
258 } MEMMANINFO;
259 typedef MEMMANINFO *LPMEMMANINFO;
261 typedef struct
263 DWORD dwSize;
264 WORD wUserFreePercent;
265 WORD wGDIFreePercent;
266 HGLOBAL16 hUserSegment;
267 HGLOBAL16 hGDISegment;
268 } SYSHEAPINFO;
270 BOOL16 WINAPI MemManInfo16(LPMEMMANINFO lpEnhMode);
271 BOOL16 WINAPI SystemHeapInfo16( SYSHEAPINFO *pHeapInfo );
273 /* timer info */
275 typedef struct tagTIMERINFO {
276 DWORD dwSize;
277 DWORD dwmsSinceStart;
278 DWORD dwmsThisVM;
279 } TIMERINFO;
281 BOOL16 WINAPI TimerCount16( TIMERINFO *pTimerInfo );
283 /* Window classes */
285 typedef struct
287 DWORD dwSize;
288 HMODULE16 hInst; /* This is really an hModule */
289 char szClassName[MAX_CLASSNAME + 1];
290 HANDLE16 wNext;
291 } CLASSENTRY;
293 BOOL16 WINAPI ClassFirst16( CLASSENTRY *pClassEntry );
294 BOOL16 WINAPI ClassNext16( CLASSENTRY *pClassEntry );
297 /* Memory read/write */
299 DWORD WINAPI MemoryRead16( WORD sel, DWORD offset, void *buffer, DWORD count );
300 DWORD WINAPI MemoryWrite16( WORD sel, DWORD offset, void *buffer, DWORD count );
302 /* flags to NotifyRegister() */
303 #define NF_NORMAL 0 /* everything except taskswitches, debugerrors,
304 * debugstrings
306 #define NF_TASKSWITCH 1 /* get taskswitch information */
307 #define NF_RIP 2 /* get debugerrors of system */
309 BOOL16 WINAPI NotifyRegister16(HTASK16 htask,FARPROC16 lpfnCallback,WORD wFlags);
311 #define NFY_UNKNOWN 0
312 #define NFY_LOADSEG 1
313 /* DATA is a pointer to following struct: */
314 typedef struct {
315 DWORD dwSize;
316 WORD wSelector;
317 WORD wSegNum;
318 WORD wType; /* bit 0 set if this is a code segment */
319 WORD wcInstance; /* only valid for data segment */
320 } NFYLOADSEG;
321 /* called when freeing a segment. LOWORD(dwData) is the freed selector */
322 #define NFY_FREESEG 2
324 /* called when loading/starting a DLL */
325 #define NFY_STARTDLL 3
326 typedef struct {
327 DWORD dwSize;
328 HMODULE16 hModule;
329 WORD wCS;
330 WORD wIP;
331 } NFYSTARTDLL;
333 /* called when starting a task. dwData is CS:IP */
334 #define NFY_STARTTASK 4
336 /* called when a task terminates. dwData is the return code */
337 #define NFY_EXITTASK 5
339 /* called when module is removed. LOWORD(dwData) is the handle */
340 #define NFY_DELMODULE 6
342 /* RIP? debugevent */
343 #define NFY_RIP 7
344 typedef struct {
345 DWORD dwSize;
346 WORD wIP;
347 WORD wCS;
348 WORD wSS;
349 WORD wBP;
350 WORD wExitCode;
351 } NFYRIP;
353 /* called before (after?) switching to a task
354 * no data, callback should call GetCurrentTask
356 #define NFY_TASKIN 8
358 /* called before(after?) switching from a task
359 * no data, callback should call GetCurrentTask
361 #define NFY_TASKOUT 9
363 /* returns ASCII input value, dwData not set */
364 #define NFY_INCHAR 10
366 /* output debugstring (pointed to by dwData) */
367 #define NFY_OUTSTRING 11
369 /* log errors */
370 #define NFY_LOGERROR 12
371 typedef struct {
372 DWORD dwSize;
373 UINT16 wErrCode;
374 VOID *lpInfo; /* depends on wErrCode */
375 } NFYLOGERROR;
377 /* called for parameter errors? */
378 #define NFY_LOGPARAMERROR 13
379 typedef struct {
380 DWORD dwSize;
381 UINT16 wErrCode;
382 FARPROC16 lpfnErrorAddr;
383 void **lpBadParam;
384 } NFYLOGPARAMERROR;
386 typedef struct {
387 DWORD dwSize;
388 HTASK16 hTask;
389 WORD wSS;
390 WORD wBP;
391 WORD wCS;
392 WORD wIP;
393 HMODULE16 hModule;
394 WORD wSegment;
395 WORD wFlags;
396 } STACKTRACEENTRY;
398 #pragma pack(4)
401 * Process Entry list as created by CreateToolHelp32Snapshot
404 typedef struct tagPROCESSENTRY {
405 DWORD dwSize;
406 DWORD cntUsage;
407 DWORD th32ProcessID;
408 DWORD th32DefaultHeapID;
409 DWORD th32ModuleID;
410 DWORD cntThreads;
411 DWORD th32ParentProcessID;
412 LONG pcPriClassBase;
413 DWORD dwFlags;
414 char szExeFile[MAX_PATH];
415 } PROCESSENTRY;
416 typedef PROCESSENTRY * PPROCESSENTRY;
417 typedef PROCESSENTRY * LPPROCESSENTRY;
419 BOOL WINAPI Process32First(HANDLE,LPPROCESSENTRY);
420 BOOL WINAPI Process32Next(HANDLE,LPPROCESSENTRY);
423 #endif /* __WINE_TOOLHELP_H */