mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
505 lines
12 KiB
505 lines
12 KiB
/**************************************************************************
|
|
* TOOLHELP.H
|
|
*
|
|
* Header file for applications using the TOOLHELP.DLL
|
|
*
|
|
**************************************************************************/
|
|
|
|
#ifndef TOOLHELP_H
|
|
#define TOOLHELP_H
|
|
|
|
/* ----- General symbols ----- */
|
|
#define MAX_DATA 11
|
|
#define MAX_PATH 255
|
|
#define MAX_MODULE_NAME 8 + 1
|
|
#define MAX_CLASSNAME 255
|
|
|
|
/* ----- Global heap walking ----- */
|
|
|
|
typedef struct tagGLOBALINFO
|
|
{
|
|
DWORD dwSize;
|
|
WORD wcItems;
|
|
WORD wcItemsFree;
|
|
WORD wcItemsLRU;
|
|
} GLOBALINFO;
|
|
|
|
typedef struct tagGLOBALENTRY
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwAddress;
|
|
DWORD dwBlockSize;
|
|
HANDLE hBlock;
|
|
WORD wcLock;
|
|
WORD wcPageLock;
|
|
WORD wFlags;
|
|
BOOL wHeapPresent;
|
|
HANDLE hOwner;
|
|
WORD wType;
|
|
WORD wData;
|
|
DWORD dwNext;
|
|
DWORD dwNextAlt;
|
|
} GLOBALENTRY;
|
|
|
|
BOOL FAR PASCAL GlobalInfo(
|
|
GLOBALINFO FAR *lpGlobalInfo);
|
|
|
|
BOOL FAR PASCAL GlobalFirst(
|
|
GLOBALENTRY FAR *lpGlobal,
|
|
WORD wFlags);
|
|
|
|
BOOL FAR PASCAL GlobalNext(
|
|
GLOBALENTRY FAR *lpGlobal,
|
|
WORD wFlags);
|
|
|
|
BOOL FAR PASCAL GlobalEntryHandle(
|
|
GLOBALENTRY FAR *lpGlobal,
|
|
HANDLE hItem);
|
|
|
|
BOOL FAR PASCAL GlobalEntryModule(
|
|
GLOBALENTRY FAR *lpGlobal,
|
|
HANDLE hModule,
|
|
WORD wSeg);
|
|
|
|
/* GlobalFirst()/GlobalNext() flags */
|
|
#define GLOBAL_ALL 0
|
|
#define GLOBAL_LRU 1
|
|
#define GLOBAL_FREE 2
|
|
|
|
/* GLOBALENTRY.wType entries */
|
|
#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
|
|
|
|
/* If GLOBALENTRY.wType==GT_RESOURCE, the following is GLOBALENTRY.wData: */
|
|
#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
|
|
|
|
/* GLOBALENTRY.wFlags */
|
|
#define GF_PDB_OWNER 0x0100 /* Low byte is KERNEL flags */
|
|
|
|
/* ----- Local heap walking ----- */
|
|
|
|
typedef struct tagLOCALINFO
|
|
{
|
|
DWORD dwSize;
|
|
WORD wcItems;
|
|
} LOCALINFO;
|
|
|
|
typedef struct tagLOCALENTRY
|
|
{
|
|
DWORD dwSize;
|
|
HANDLE hHandle;
|
|
WORD wAddress;
|
|
WORD wSize;
|
|
WORD wFlags;
|
|
WORD wcLock;
|
|
WORD wType;
|
|
WORD hHeap;
|
|
WORD wHeapType;
|
|
WORD wNext;
|
|
} LOCALENTRY;
|
|
|
|
BOOL FAR PASCAL LocalInfo(
|
|
LOCALINFO FAR *lpLocal,
|
|
HANDLE hHeap);
|
|
|
|
BOOL FAR PASCAL LocalFirst(
|
|
LOCALENTRY FAR *lpLocal,
|
|
HANDLE hHeap);
|
|
|
|
BOOL FAR PASCAL LocalNext(
|
|
LOCALENTRY FAR *lpLocal);
|
|
|
|
/* LOCALENTRY.wHeapType flags */
|
|
#define NORMAL_HEAP 0
|
|
#define USER_HEAP 1
|
|
#define GDI_HEAP 2
|
|
|
|
/* LOCALENTRY.wFlags */
|
|
#define LF_FIXED 1
|
|
#define LF_FREE 2
|
|
#define LF_MOVEABLE 4
|
|
|
|
/* LOCALENTRY.wType */
|
|
#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
|
|
|
|
/* ----- Stack Tracing ----- */
|
|
|
|
typedef struct tagSTACKTRACEENTRY
|
|
{
|
|
DWORD dwSize;
|
|
HANDLE hTask;
|
|
WORD wSS;
|
|
WORD wBP;
|
|
WORD wCS;
|
|
WORD wIP;
|
|
HANDLE hModule;
|
|
WORD wSegment;
|
|
WORD wFlags;
|
|
} STACKTRACEENTRY;
|
|
|
|
BOOL FAR PASCAL StackTraceFirst(
|
|
STACKTRACEENTRY FAR *lpStackTrace,
|
|
HANDLE hTask);
|
|
|
|
BOOL FAR PASCAL StackTraceCSIPFirst(
|
|
STACKTRACEENTRY FAR *lpStackTrace,
|
|
WORD wSS,
|
|
WORD wCS,
|
|
WORD wIP,
|
|
WORD wBP);
|
|
|
|
BOOL FAR PASCAL StackTraceNext(
|
|
STACKTRACEENTRY FAR *lpStackTrace);
|
|
|
|
/* STACKTRACEENTRY.wFlags values */
|
|
#define FRAME_FAR 0
|
|
#define FRAME_NEAR 1
|
|
|
|
/* ----- Module list walking ----- */
|
|
|
|
typedef struct tagMODULEENTRY
|
|
{
|
|
DWORD dwSize;
|
|
char szModule[MAX_MODULE_NAME + 1];
|
|
HANDLE hModule;
|
|
WORD wUsageFlags;
|
|
char szExePath[MAX_PATH + 1];
|
|
WORD wNext;
|
|
} MODULEENTRY;
|
|
|
|
BOOL FAR PASCAL ModuleFirst(
|
|
MODULEENTRY FAR *lpModule);
|
|
|
|
BOOL FAR PASCAL ModuleNext(
|
|
MODULEENTRY FAR *lpModule);
|
|
|
|
HANDLE FAR PASCAL ModuleFindName(
|
|
MODULEENTRY FAR *lpModule,
|
|
LPSTR lpstrName);
|
|
|
|
HANDLE FAR PASCAL ModuleFindHandle(
|
|
MODULEENTRY FAR *lpModule,
|
|
HANDLE hModule);
|
|
|
|
/* ----- Task list walking ----- */
|
|
|
|
typedef struct tagTASKENTRY
|
|
{
|
|
DWORD dwSize;
|
|
HANDLE hTask;
|
|
HANDLE hTaskParent;
|
|
HANDLE hInst;
|
|
HANDLE hModule;
|
|
WORD wSS;
|
|
WORD wSP;
|
|
WORD wStackTop;
|
|
WORD wStackMinimum;
|
|
WORD wStackBottom;
|
|
WORD wcEvents;
|
|
HANDLE hQueue;
|
|
char szModule[MAX_MODULE_NAME + 1];
|
|
WORD wPSPOffset;
|
|
HANDLE hNext;
|
|
} TASKENTRY;
|
|
|
|
BOOL FAR PASCAL TaskFirst(
|
|
TASKENTRY FAR *lpTask);
|
|
|
|
BOOL FAR PASCAL TaskNext(
|
|
TASKENTRY FAR *lpTask);
|
|
|
|
BOOL FAR PASCAL TaskFindHandle(
|
|
TASKENTRY FAR *lpTask,
|
|
HANDLE hTask);
|
|
|
|
DWORD FAR PASCAL TaskSetCSIP(
|
|
HANDLE hTask,
|
|
WORD wCS,
|
|
WORD wIP);
|
|
|
|
DWORD FAR PASCAL TaskGetCSIP(
|
|
HANDLE hTask,
|
|
WORD wCS,
|
|
WORD wIP);
|
|
|
|
BOOL FAR PASCAL TaskSwitch(
|
|
HANDLE hTask,
|
|
DWORD dwNewCSIP);
|
|
|
|
/* ----- Window Class enumeration ----- */
|
|
|
|
typedef struct tagCLASSENTRY
|
|
{
|
|
DWORD dwSize;
|
|
HANDLE hInst;
|
|
char szClassName[MAX_CLASSNAME + 1];
|
|
WORD wNext;
|
|
} CLASSENTRY;
|
|
|
|
BOOL FAR PASCAL ClassFirst(
|
|
CLASSENTRY FAR *lpClass);
|
|
|
|
BOOL FAR PASCAL ClassNext(
|
|
CLASSENTRY FAR *lpClass);
|
|
|
|
/* ----- Information functions ----- */
|
|
|
|
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;
|
|
|
|
BOOL FAR PASCAL MemManInfo(
|
|
MEMMANINFO FAR *lpEnhMode);
|
|
|
|
typedef struct tagUSERHEAPINFO
|
|
{
|
|
DWORD dwSize;
|
|
WORD wHeapFree;
|
|
WORD wMaxHeapSize;
|
|
WORD wPercentFree;
|
|
HANDLE hSegment;
|
|
} USERHEAPINFO;
|
|
|
|
BOOL FAR PASCAL UserHeapInfo(
|
|
USERHEAPINFO FAR *lpUser);
|
|
|
|
typedef struct tagGDIHEAPINFO
|
|
{
|
|
DWORD dwSize;
|
|
WORD wHeapFree;
|
|
WORD wMaxHeapSize;
|
|
WORD wPercentFree;
|
|
HANDLE hSegment;
|
|
} GDIHEAPINFO;
|
|
|
|
BOOL FAR PASCAL GDIHeapInfo(
|
|
GDIHEAPINFO FAR *lpGDI);
|
|
|
|
/* ----- Interrupt Handling ----- */
|
|
|
|
typedef void (FAR PASCAL *LPFNINTCALLBACK)(void);
|
|
|
|
BOOL FAR PASCAL InterruptRegister(
|
|
HANDLE hTask,
|
|
LPFNINTCALLBACK lpfnIntCallback);
|
|
|
|
BOOL FAR PASCAL InterruptUnRegister(
|
|
HANDLE hTask);
|
|
|
|
/* Hooked interrupts */
|
|
#define INT_DIV0 0
|
|
#define INT_1 1
|
|
#define INT_2 2
|
|
#define INT_3 3
|
|
#define INT_UDINSTR 6
|
|
#define INT_GPFAULT 13
|
|
#define INT_CTLALTSYSRQ 256
|
|
|
|
/* Notifications:
|
|
* When a notification callback is called, two parameters are passed
|
|
* in: a WORD, wID, and another DWORD, dwData. wID is one of
|
|
* the values NFY_* below. Callback routines should ignore unrecog-
|
|
* nized values to preserve future compatibility. Callback routines
|
|
* are also passed a dwData value. This may contain data or may be
|
|
* a FAR pointer to a structure, or may not be used depending on
|
|
* which notification is being received.
|
|
*
|
|
* In all cases, if the return value of the callback is TRUE, the
|
|
* notification will NOT be passed on to other callbacks. It has
|
|
* been handled. This should be used sparingly and only with certain
|
|
* notifications. Callbacks almost always return FALSE.
|
|
*/
|
|
|
|
/* NFY_UNKNOWN: An unknown notification has been returned from KERNEL. Apps
|
|
* should ignore these.
|
|
*/
|
|
#define NFY_UNKNOWN 0
|
|
|
|
/* NFY_LOADSEG: dwData points to a NFYLOADSEG structure */
|
|
#define NFY_LOADSEG 1
|
|
typedef struct tagNFYLOADSEG
|
|
{
|
|
DWORD dwSize;
|
|
WORD wSelector;
|
|
WORD wSegNum;
|
|
WORD wType;
|
|
HANDLE hInstance;
|
|
LPSTR lpstrModuleName;
|
|
} NFYLOADSEG;
|
|
|
|
/* NFY_FREESEG: LOWORD(dwData) is the selector of the segment being freed */
|
|
#define NFY_FREESEG 2
|
|
|
|
/* NFY_STARTTASK: dwData points to a NFYSTARTTASK structure */
|
|
#define NFY_STARTTASK 3
|
|
typedef struct tagNFYSTARTTASK
|
|
{
|
|
DWORD dwSize;
|
|
HANDLE hInstance;
|
|
WORD wCS;
|
|
WORD wIP;
|
|
} NFYSTARTTASK;
|
|
|
|
/* NFY_EXITTASK: The low byte of dwData contains the program exit code */
|
|
#define NFY_EXITTASK 4
|
|
|
|
/* NFY_LOADDLL: dwData points to a NFYLOADDLL structure */
|
|
#define NFY_LOADDLL 5
|
|
typedef struct tagNFYLOADDLL
|
|
{
|
|
DWORD dwSize;
|
|
HANDLE hModule;
|
|
WORD wCS;
|
|
WORD wIP;
|
|
} NFYLOADDLL;
|
|
|
|
/* NFY_DELMODULE: LOWORD(dwData) is the handle of the module to be freed */
|
|
#define NFY_DELMODULE 6
|
|
|
|
/* NFY_DEBUGSTR: dwData points to the string to be output */
|
|
#define NFY_DEBUGSTR 7
|
|
|
|
/* NFY_RIP: dwData points to a NFYRIP structure */
|
|
#define NFY_RIP 8
|
|
typedef struct tagNFYRIP
|
|
{
|
|
WORD wExitCode;
|
|
WORD wCS;
|
|
WORD wIP;
|
|
} NFYRIP;
|
|
|
|
/* NFY_TASKIN: LOWORD(dwData) is the hTask for the entering task */
|
|
#define NFY_TASKIN 9
|
|
|
|
/* NFY_TASKOUT: LOWORD(dwData) is the hTask for the task being left */
|
|
#define NFY_TASKOUT 10
|
|
|
|
/* NFY_INCHAR: Return value from callback is used. If NULL, mapped to 'i' */
|
|
#define NFY_INCHAR 11
|
|
|
|
/* NFY_OUTSTR: dwData points to the string to be displayed */
|
|
#define NFY_OUTSTR 12
|
|
|
|
typedef BOOL (FAR PASCAL *LPFNNOTIFYCALLBACK)(
|
|
WORD wID,
|
|
DWORD dwData);
|
|
|
|
BOOL FAR PASCAL NotifyRegister(
|
|
HANDLE hTask,
|
|
LPFNNOTIFYCALLBACK lpfn,
|
|
WORD wFlags);
|
|
|
|
BOOL FAR PASCAL NotifyUnRegister(
|
|
HANDLE hTask);
|
|
|
|
/* NotifyRegister() flags */
|
|
#define NF_NORMAL 0
|
|
#define NF_TASKSWITCH 1
|
|
#define NF_RIP 2
|
|
#define NF_DEBUGSTR 4
|
|
|
|
/* ----- Miscellaneous ----- */
|
|
|
|
void FAR PASCAL TerminateApp(
|
|
HANDLE hTask,
|
|
WORD wFlags);
|
|
|
|
/* TerminateApp() flag values */
|
|
#define UAE_BOX 0
|
|
#define NO_UAE_BOX 1
|
|
|
|
DWORD FAR PASCAL MemoryRead(
|
|
WORD wSel,
|
|
DWORD dwOffset,
|
|
LPSTR lpBuffer,
|
|
DWORD dwcb);
|
|
|
|
DWORD FAR PASCAL MemoryWrite(
|
|
WORD wSel,
|
|
DWORD dwOffset,
|
|
LPSTR lpBuffer,
|
|
DWORD dwcb);
|
|
|
|
typedef struct tagTIMERINFO
|
|
{
|
|
DWORD dwSize;
|
|
DWORD dwmsSinceStart;
|
|
DWORD dwmsThisVM;
|
|
} TIMERINFO;
|
|
|
|
BOOL FAR PASCAL TimerCount(
|
|
TIMERINFO FAR *lpTimer);
|
|
|
|
#endif /* ifndef TOOLHELP_H */
|