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