toolhelp.h 11 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/*
 * Copyright (C) the Wine project
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 18
 */

Alexandre Julliard's avatar
Alexandre Julliard committed
19 20
#ifndef __WINE_TOOLHELP_H
#define __WINE_TOOLHELP_H
Alexandre Julliard's avatar
Alexandre Julliard committed
21

22 23
#include <windef.h>
#include <wine/windef16.h>
Alexandre Julliard's avatar
Alexandre Julliard committed
24

Alexandre Julliard's avatar
Alexandre Julliard committed
25 26
#define MAX_DATA	11
#define MAX_MODULE_NAME	9
27
#define MAX_PATH16	255
Alexandre Julliard's avatar
Alexandre Julliard committed
28 29
#define MAX_CLASSNAME	255

30
#include <pshpack1.h>
Alexandre Julliard's avatar
Alexandre Julliard committed
31

Alexandre Julliard's avatar
Alexandre Julliard committed
32 33
/* Global heap */

Alexandre Julliard's avatar
Alexandre Julliard committed
34 35 36 37 38 39 40 41 42 43
typedef struct
{
    DWORD dwSize;
    WORD  wcItems;
    WORD  wcItemsFree;
    WORD  wcItemsLRU;
} GLOBALINFO;

typedef struct
{
Alexandre Julliard's avatar
Alexandre Julliard committed
44 45 46 47 48 49 50 51 52 53 54 55 56
    DWORD     dwSize;
    DWORD     dwAddress;
    DWORD     dwBlockSize;
    HGLOBAL16 hBlock;
    WORD      wcLock;
    WORD      wcPageLock;
    WORD      wFlags;
    BOOL16    wHeapPresent;
    HGLOBAL16 hOwner;
    WORD      wType;
    WORD      wData;
    DWORD     dwNext;
    DWORD     dwNextAlt;
Alexandre Julliard's avatar
Alexandre Julliard committed
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
} GLOBALENTRY;

  /* GlobalFirst()/GlobalNext() flags */
#define GLOBAL_ALL      0
#define GLOBAL_LRU      1
#define GLOBAL_FREE     2

  /* wType values */
#define GT_UNKNOWN      0
#define GT_DGROUP       1
#define GT_DATA         2
#define GT_CODE         3
#define GT_TASK         4
#define GT_RESOURCE     5
#define GT_MODULE       6
#define GT_FREE         7
#define GT_INTERNAL     8
#define GT_SENTINEL     9
#define GT_BURGERMASTER 10

/* wData values */
#define GD_USERDEFINED      0
#define GD_CURSORCOMPONENT  1
#define GD_BITMAP           2
#define GD_ICONCOMPONENT    3
#define GD_MENU             4
#define GD_DIALOG           5
#define GD_STRING           6
#define GD_FONTDIR          7
#define GD_FONT             8
#define GD_ACCELERATORS     9
#define GD_RCDATA           10
#define GD_ERRTABLE         11
#define GD_CURSOR           12
#define GD_ICON             14
#define GD_NAMETABLE        15
#define GD_MAX_RESOURCE     15

/* wFlags values */
#define GF_PDB_OWNER        0x0100      /* Low byte is KERNEL flags */
Alexandre Julliard's avatar
Alexandre Julliard committed
97

98 99 100 101 102
BOOL16 WINAPI GlobalInfo16( GLOBALINFO *pInfo );
BOOL16 WINAPI GlobalFirst16( GLOBALENTRY *pGlobal, WORD wFlags );
BOOL16 WINAPI GlobalNext16( GLOBALENTRY *pGlobal, WORD wFlags) ;
BOOL16 WINAPI GlobalEntryHandle16( GLOBALENTRY *pGlobal, HGLOBAL16 hItem );
BOOL16 WINAPI GlobalEntryModule16( GLOBALENTRY *pGlobal, HMODULE16 hModule,
Alexandre Julliard's avatar
Alexandre Julliard committed
103
                                 WORD wSeg );
Alexandre Julliard's avatar
Alexandre Julliard committed
104 105 106 107 108 109 110 111 112 113 114 115

/* Local heap */

typedef struct
{
    DWORD   dwSize;
    WORD    wcItems;
} LOCALINFO;

typedef struct
{
    DWORD   dwSize;
Alexandre Julliard's avatar
Alexandre Julliard committed
116
    HLOCAL16  hHandle;
Alexandre Julliard's avatar
Alexandre Julliard committed
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
    WORD    wAddress;
    WORD    wSize;
    WORD    wFlags;
    WORD    wcLock;
    WORD    wType;
    WORD    hHeap;
    WORD    wHeapType;
    WORD    wNext;
} LOCALENTRY;

/* wHeapType values */
#define NORMAL_HEAP     0
#define USER_HEAP       1
#define GDI_HEAP        2

/* wFlags values */
#define LF_FIXED        1
#define LF_FREE         2
#define LF_MOVEABLE     4

/* wType values */
#define LT_NORMAL                   0
#define LT_FREE                     0xff
#define LT_GDI_PEN                  1   /* LT_GDI_* is for GDI's heap */
#define LT_GDI_BRUSH                2
#define LT_GDI_FONT                 3
#define LT_GDI_PALETTE              4
#define LT_GDI_BITMAP               5
#define LT_GDI_RGN                  6
#define LT_GDI_DC                   7
#define LT_GDI_DISABLED_DC          8
#define LT_GDI_METADC               9
#define LT_GDI_METAFILE             10
#define LT_GDI_MAX                  LT_GDI_METAFILE
#define LT_USER_CLASS               1   /* LT_USER_* is for USER's heap */
#define LT_USER_WND                 2
#define LT_USER_STRING              3
#define LT_USER_MENU                4
#define LT_USER_CLIP                5
#define LT_USER_CBOX                6
#define LT_USER_PALETTE             7
#define LT_USER_ED                  8
#define LT_USER_BWL                 9
#define LT_USER_OWNERDRAW           10
#define LT_USER_SPB                 11
#define LT_USER_CHECKPOINT          12
#define LT_USER_DCE                 13
#define LT_USER_MWP                 14
#define LT_USER_PROP                15
#define LT_USER_LBIV                16
#define LT_USER_MISC                17
#define LT_USER_ATOMS               18
#define LT_USER_LOCKINPUTSTATE      19
#define LT_USER_HOOKLIST            20
#define LT_USER_USERSEEUSERDOALLOC  21
#define LT_USER_HOTKEYLIST          22
#define LT_USER_POPUPMENU           23
#define LT_USER_HANDLETABLE         32
#define LT_USER_MAX                 LT_USER_HANDLETABLE

177 178 179
BOOL16 WINAPI LocalInfo16( LOCALINFO *pLocalInfo, HGLOBAL16 handle );
BOOL16 WINAPI LocalFirst16( LOCALENTRY *pLocalEntry, HGLOBAL16 handle );
BOOL16 WINAPI LocalNext16( LOCALENTRY *pLocalEntry );
Alexandre Julliard's avatar
Alexandre Julliard committed
180

181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
/* Local 32-bit heap */

typedef struct
{
    DWORD dwSize;                /* 00 */
    DWORD dwMemReserved;         /* 04 */
    DWORD dwMemCommitted;        /* 08 */
    DWORD dwTotalFree;           /* 0C */
    DWORD dwLargestFreeBlock;    /* 10 */
    DWORD dwcFreeHandles;        /* 14 */
} LOCAL32INFO;

typedef struct
{
    DWORD dwSize;                /* 00 */
    WORD hHandle;                /* 04 */
    DWORD dwAddress;             /* 06 */
    DWORD dwSizeBlock;           /* 0A */
    WORD wFlags;                 /* 0E */
    WORD wType;                  /* 10 */
    WORD hHeap;                  /* 12 */
    WORD wHeapType;              /* 14 */
    DWORD dwNext;                /* 16 */
    DWORD dwNextAlt;             /* 1A */
} LOCAL32ENTRY;

/* LOCAL32ENTRY.wHeapType flags same as LOCALENTRY.wHeapType flags */
/* LOCAL32ENTRY.wFlags same as LOCALENTRY.wFlags */
/* LOCAL32ENTRY.wType same as LOCALENTRY.wType */

211 212 213
BOOL16 WINAPI Local32Info16( LOCAL32INFO *pLocal32Info, HGLOBAL16 handle );
BOOL16 WINAPI Local32First16( LOCAL32ENTRY *pLocal32Entry, HGLOBAL16 handle );
BOOL16 WINAPI Local32Next16( LOCAL32ENTRY *pLocal32Entry );
214

Alexandre Julliard's avatar
Alexandre Julliard committed
215

Alexandre Julliard's avatar
Alexandre Julliard committed
216
/* modules */
Alexandre Julliard's avatar
Alexandre Julliard committed
217

Alexandre Julliard's avatar
Alexandre Julliard committed
218 219 220 221 222 223
typedef struct
{
    DWORD      dwSize;
    char       szModule[MAX_MODULE_NAME + 1];
    HMODULE16  hModule;
    WORD       wcUsage;
224
    char       szExePath[MAX_PATH16 + 1];
Alexandre Julliard's avatar
Alexandre Julliard committed
225 226 227
    HANDLE16   wNext;
} MODULEENTRY, *LPMODULEENTRY;

228 229 230 231
BOOL16 WINAPI ModuleFirst16(MODULEENTRY *lpModule);
BOOL16 WINAPI ModuleNext16(MODULEENTRY *lpModule);
BOOL16 WINAPI ModuleFindName16(MODULEENTRY *lpModule, LPCSTR lpstrName);
BOOL16 WINAPI ModuleFindHandle16(MODULEENTRY *lpModule, HMODULE16 hModule);
Alexandre Julliard's avatar
Alexandre Julliard committed
232

Alexandre Julliard's avatar
Alexandre Julliard committed
233 234
/* tasks */

Alexandre Julliard's avatar
Alexandre Julliard committed
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
typedef struct
{
    DWORD        dwSize;
    HTASK16      hTask;
    HTASK16      hTaskParent;
    HINSTANCE16  hInst;
    HMODULE16    hModule;
    WORD         wSS;
    WORD         wSP;
    WORD         wStackTop;
    WORD         wStackMinimum;
    WORD         wStackBottom;
    WORD         wcEvents;
    HGLOBAL16    hQueue;
    char         szModule[MAX_MODULE_NAME + 1];
    WORD         wPSPOffset;
    HANDLE16     hNext;
} TASKENTRY, *LPTASKENTRY;

254 255 256
BOOL16 WINAPI TaskFirst16(LPTASKENTRY lpTask);
BOOL16 WINAPI TaskNext16(LPTASKENTRY lpTask);
BOOL16 WINAPI TaskFindHandle16(LPTASKENTRY lpTask, HTASK16 hTask);
Alexandre Julliard's avatar
Alexandre Julliard committed
257 258 259
DWORD  WINAPI TaskSetCSIP(HTASK16 hTask, WORD wCS, WORD wIP);
DWORD  WINAPI TaskGetCSIP(HTASK16 hTask);
BOOL16 WINAPI TaskSwitch(HTASK16 hTask, DWORD dwNewCSIP);
Alexandre Julliard's avatar
Alexandre Julliard committed
260

261 262 263
/* flag for TerminateApp16() */
#define NO_UAE_BOX     1

Alexandre Julliard's avatar
Alexandre Julliard committed
264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280
/* mem info */

typedef struct tagMEMMANINFO {
	DWORD dwSize;
	DWORD dwLargestFreeBlock;
	DWORD dwMaxPagesAvailable;
	DWORD dwMaxPagesLockable;
	DWORD dwTotalLinearSpace;
	DWORD dwTotalUnlockedPages;
	DWORD dwFreePages;
	DWORD dwTotalPages;
	DWORD dwFreeLinearSpace;
	DWORD dwSwapFilePages;
	WORD wPageSize;
} MEMMANINFO;
typedef MEMMANINFO *LPMEMMANINFO;

Alexandre Julliard's avatar
Alexandre Julliard committed
281 282
typedef struct
{
Alexandre Julliard's avatar
Alexandre Julliard committed
283 284 285 286 287
    DWORD     dwSize;
    WORD      wUserFreePercent;
    WORD      wGDIFreePercent;
    HGLOBAL16 hUserSegment;
    HGLOBAL16 hGDISegment;
Alexandre Julliard's avatar
Alexandre Julliard committed
288 289
} SYSHEAPINFO;

290 291
BOOL16 WINAPI MemManInfo16(LPMEMMANINFO lpEnhMode);
BOOL16 WINAPI SystemHeapInfo16( SYSHEAPINFO *pHeapInfo );
Alexandre Julliard's avatar
Alexandre Julliard committed
292

Alexandre Julliard's avatar
Alexandre Julliard committed
293 294 295 296 297 298 299 300
/* timer info */

typedef struct tagTIMERINFO {
	DWORD dwSize;
	DWORD dwmsSinceStart;
	DWORD dwmsThisVM;
} TIMERINFO;

301
BOOL16 WINAPI TimerCount16( TIMERINFO *pTimerInfo );
Alexandre Julliard's avatar
Alexandre Julliard committed
302 303 304 305 306 307

/* Window classes */

typedef struct
{
    DWORD     dwSize;
Alexandre Julliard's avatar
Alexandre Julliard committed
308
    HMODULE16 hInst;              /* This is really an hModule */
Alexandre Julliard's avatar
Alexandre Julliard committed
309
    char      szClassName[MAX_CLASSNAME + 1];
Alexandre Julliard's avatar
Alexandre Julliard committed
310
    HANDLE16  wNext;
Alexandre Julliard's avatar
Alexandre Julliard committed
311 312
} CLASSENTRY;

313 314
BOOL16 WINAPI ClassFirst16( CLASSENTRY *pClassEntry );
BOOL16 WINAPI ClassNext16( CLASSENTRY *pClassEntry );
Alexandre Julliard's avatar
Alexandre Julliard committed
315 316 317 318


/* Memory read/write */

319 320
DWORD WINAPI MemoryRead16( WORD sel, DWORD offset, void *buffer, DWORD count );
DWORD WINAPI MemoryWrite16( WORD sel, DWORD offset, void *buffer, DWORD count );
Alexandre Julliard's avatar
Alexandre Julliard committed
321

Alexandre Julliard's avatar
Alexandre Julliard committed
322 323 324 325 326 327 328
/* flags to NotifyRegister() */
#define NF_NORMAL	0	/* everything except taskswitches, debugerrors,
				 * debugstrings
				 */
#define NF_TASKSWITCH	1	/* get taskswitch information */
#define NF_RIP		2	/* get debugerrors of system */

329
BOOL16 WINAPI NotifyRegister16(HTASK16 htask,FARPROC16 lpfnCallback,WORD wFlags);
Alexandre Julliard's avatar
Alexandre Julliard committed
330 331 332 333

#define NFY_UNKNOWN	0
#define NFY_LOADSEG	1
/* DATA is a pointer to following struct: */
Alexandre Julliard's avatar
Alexandre Julliard committed
334
typedef struct {
Alexandre Julliard's avatar
Alexandre Julliard committed
335 336 337 338 339 340 341 342 343 344 345
	DWORD	dwSize;
	WORD	wSelector;
	WORD	wSegNum;
	WORD	wType;		/* bit 0 set if this is a code segment */
	WORD	wcInstance;	/* only valid for data segment */
} NFYLOADSEG;
/* called when freeing a segment. LOWORD(dwData) is the freed selector */
#define NFY_FREESEG	2

/* called when loading/starting a DLL */
#define NFY_STARTDLL	3
Alexandre Julliard's avatar
Alexandre Julliard committed
346
typedef struct {
Alexandre Julliard's avatar
Alexandre Julliard committed
347 348 349 350
    DWORD      dwSize;
    HMODULE16  hModule;
    WORD       wCS;
    WORD       wIP;
Alexandre Julliard's avatar
Alexandre Julliard committed
351 352 353 354 355 356 357 358 359 360 361 362 363
} NFYSTARTDLL;

/* called when starting a task. dwData is CS:IP */
#define NFY_STARTTASK	4

/* called when a task terminates. dwData is the return code */
#define NFY_EXITTASK	5

/* called when module is removed. LOWORD(dwData) is the handle */
#define NFY_DELMODULE	6

/* RIP? debugevent */
#define NFY_RIP		7
Alexandre Julliard's avatar
Alexandre Julliard committed
364
typedef struct {
Alexandre Julliard's avatar
Alexandre Julliard committed
365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390
	DWORD	dwSize;
	WORD	wIP;
	WORD	wCS;
	WORD	wSS;
	WORD	wBP;
	WORD	wExitCode;
} NFYRIP;

/* called before (after?) switching to a task
 * no data, callback should call GetCurrentTask
 */
#define	NFY_TASKIN	8

/* called before(after?) switching from a task
 * no data, callback should call GetCurrentTask
*/
#define NFY_TASKOUT	9

/* returns ASCII input value, dwData not set */
#define NFY_INCHAR	10

/* output debugstring (pointed to by dwData) */
#define NFY_OUTSTRING	11

/* log errors */
#define NFY_LOGERROR	12
Alexandre Julliard's avatar
Alexandre Julliard committed
391
typedef struct {
Alexandre Julliard's avatar
Alexandre Julliard committed
392
	DWORD	dwSize;
Alexandre Julliard's avatar
Alexandre Julliard committed
393
	UINT16	wErrCode;
Alexandre Julliard's avatar
Alexandre Julliard committed
394
	VOID   *lpInfo; /* depends on wErrCode */
Alexandre Julliard's avatar
Alexandre Julliard committed
395 396 397 398
} NFYLOGERROR;

/* called for parameter errors? */
#define NFY_LOGPARAMERROR	13
Alexandre Julliard's avatar
Alexandre Julliard committed
399
typedef struct {
Alexandre Julliard's avatar
Alexandre Julliard committed
400 401 402 403
    DWORD       dwSize;
    UINT16      wErrCode;
    FARPROC16   lpfnErrorAddr;
    void      **lpBadParam;
Alexandre Julliard's avatar
Alexandre Julliard committed
404
} NFYLOGPARAMERROR;
Alexandre Julliard's avatar
Alexandre Julliard committed
405

Alexandre Julliard's avatar
Alexandre Julliard committed
406 407 408 409 410 411 412 413 414 415 416 417
typedef struct {
    DWORD dwSize;
    HTASK16 hTask;
    WORD wSS;
    WORD wBP;
    WORD wCS;
    WORD wIP;
    HMODULE16 hModule;
    WORD wSegment;
    WORD wFlags;
} STACKTRACEENTRY;

418
#include <poppack.h>
Alexandre Julliard's avatar
Alexandre Julliard committed
419

Alexandre Julliard's avatar
Alexandre Julliard committed
420
#endif /* __WINE_TOOLHELP_H */