home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c083 / 14.ddi / GENINC.PAK / TOOLHELP.H < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-02  |  14.4 KB  |  477 lines

  1. /*****************************************************************************\
  2. *                                                                             *
  3. * toolhelp.h -  toolhelp.dll functions, types, and definitions                *
  4. *                                                                             *
  5. \*****************************************************************************/
  6.  
  7. /*
  8.  *      C/C++ Run Time Library - Version 6.0
  9.  *
  10.  *      Copyright (c) 1991, 1993 by Borland International
  11.  *      All Rights Reserved.
  12.  *
  13.  */
  14.  
  15. #ifndef __TOOLHELP_H    /* prevent multiple includes */
  16. #define __TOOLHELP_H
  17.  
  18. #ifndef __WINDOWS_H
  19. #include <windows.h>    /* <windows.h> must be included */
  20. #endif  /* __WINDOWS_H */
  21.  
  22. #ifndef RC_INVOKED
  23. #pragma option -a-      /* Assume byte packing throughout */
  24. #endif
  25.  
  26. #ifdef __cplusplus
  27. extern "C" {            /* Assume C declarations for C++ */
  28. #endif  /* __cplusplus */
  29.  
  30. /* If included with the 3.0 windows.h, define compatible aliases */
  31. #if !defined(WINVER) || (WINVER < 0x030a)
  32. #define LPCSTR      LPSTR
  33. #define WINAPI      FAR PASCAL
  34. #define CALLBACK    FAR PASCAL
  35. #define UINT        WORD
  36. #define HMODULE     HANDLE
  37. #define HINSTANCE   HANDLE
  38. #define HLOCAL      HANDLE
  39. #define HGLOBAL     HANDLE
  40. #define HTASK       HANDLE
  41. #endif  /* WIN3.0 */
  42.  
  43. /****** General symbols ******************************************************/
  44. #define MAX_DATA        11
  45. #define MAX_PATH        255
  46. #define MAX_MODULE_NAME 8 + 1
  47. #define MAX_CLASSNAME   255
  48.  
  49. /****** Global heap walking ***************************************************/
  50. typedef struct tagGLOBALINFO
  51. {
  52.     DWORD dwSize;
  53.     WORD wcItems;
  54.     WORD wcItemsFree;
  55.     WORD wcItemsLRU;
  56. } GLOBALINFO;
  57.  
  58. typedef struct tagGLOBALENTRY
  59. {
  60.     DWORD dwSize;
  61.     DWORD dwAddress;
  62.     DWORD dwBlockSize;
  63.     HGLOBAL hBlock;
  64.     WORD wcLock;
  65.     WORD wcPageLock;
  66.     WORD wFlags;
  67.     BOOL wHeapPresent;
  68.     HGLOBAL hOwner;
  69.     WORD wType;
  70.     WORD wData;
  71.     DWORD dwNext;
  72.     DWORD dwNextAlt;
  73. } GLOBALENTRY;
  74.  
  75. /* GlobalFirst()/GlobalNext() flags */
  76. #define GLOBAL_ALL      0
  77. #define GLOBAL_LRU      1
  78. #define GLOBAL_FREE     2
  79.  
  80. /* GLOBALENTRY.wType entries */
  81. #define GT_UNKNOWN      0
  82. #define GT_DGROUP       1
  83. #define GT_DATA         2
  84. #define GT_CODE         3
  85. #define GT_TASK         4
  86. #define GT_RESOURCE     5
  87. #define GT_MODULE       6
  88. #define GT_FREE         7
  89. #define GT_INTERNAL     8
  90. #define GT_SENTINEL     9
  91. #define GT_BURGERMASTER 10
  92.  
  93. /* If GLOBALENTRY.wType==GT_RESOURCE, the following is GLOBALENTRY.wData: */
  94. #define GD_USERDEFINED      0
  95. #define GD_CURSORCOMPONENT  1
  96. #define GD_BITMAP           2
  97. #define GD_ICONCOMPONENT    3
  98. #define GD_MENU             4
  99. #define GD_DIALOG           5
  100. #define GD_STRING           6
  101. #define GD_FONTDIR          7
  102. #define GD_FONT             8
  103. #define GD_ACCELERATORS     9
  104. #define GD_RCDATA           10
  105. #define GD_ERRTABLE         11
  106. #define GD_CURSOR           12
  107. #define GD_ICON             14
  108. #define GD_NAMETABLE        15
  109. #define GD_MAX_RESOURCE     15
  110.  
  111. /* GLOBALENTRY.wFlags */
  112. #define GF_PDB_OWNER        0x0100      /* Low byte is KERNEL flags */
  113.  
  114. BOOL    WINAPI GlobalInfo(GLOBALINFO FAR* lpGlobalInfo);
  115. BOOL    WINAPI GlobalFirst(GLOBALENTRY FAR* lpGlobal, WORD wFlags);
  116. BOOL    WINAPI GlobalNext(GLOBALENTRY FAR* lpGlobal, WORD wFlags);
  117. BOOL    WINAPI GlobalEntryHandle(GLOBALENTRY FAR* lpGlobal, HGLOBAL hItem);
  118. BOOL    WINAPI GlobalEntryModule(GLOBALENTRY FAR* lpGlobal, HMODULE hModule, WORD wSeg);
  119. WORD    WINAPI GlobalHandleToSel(HGLOBAL hMem);
  120.  
  121. /****** Local heap walking ***************************************************/
  122.  
  123. typedef struct tagLOCALINFO
  124. {
  125.     DWORD dwSize;
  126.     WORD wcItems;
  127. } LOCALINFO;
  128.  
  129. typedef struct tagLOCALENTRY
  130. {
  131.     DWORD dwSize;
  132.     HLOCAL hHandle;
  133.     WORD wAddress;
  134.     WORD wSize;
  135.     WORD wFlags;
  136.     WORD wcLock;
  137.     WORD wType;
  138.     WORD hHeap;
  139.     WORD wHeapType;
  140.     WORD wNext;
  141. } LOCALENTRY;
  142.  
  143. /* LOCALENTRY.wHeapType flags */
  144. #define NORMAL_HEAP     0
  145. #define USER_HEAP       1
  146. #define GDI_HEAP        2
  147.  
  148. /* LOCALENTRY.wFlags */
  149. #define LF_FIXED        1
  150. #define LF_FREE         2
  151. #define LF_MOVEABLE     4
  152.  
  153. /* LOCALENTRY.wType */
  154. #define LT_NORMAL                   0
  155. #define LT_FREE                     0xff
  156. #define LT_GDI_PEN                  1   /* LT_GDI_* is for GDI's heap */
  157. #define LT_GDI_BRUSH                2
  158. #define LT_GDI_FONT                 3
  159. #define LT_GDI_PALETTE              4
  160. #define LT_GDI_BITMAP               5
  161. #define LT_GDI_RGN                  6
  162. #define LT_GDI_DC                   7
  163. #define LT_GDI_DISABLED_DC          8
  164. #define LT_GDI_METADC               9
  165. #define LT_GDI_METAFILE             10
  166. #define LT_GDI_MAX                  LT_GDI_METAFILE
  167. #define LT_USER_CLASS               1   /* LT_USER_* is for USER's heap */
  168. #define LT_USER_WND                 2
  169. #define LT_USER_STRING              3
  170. #define LT_USER_MENU                4
  171. #define LT_USER_CLIP                5
  172. #define LT_USER_CBOX                6
  173. #define LT_USER_PALETTE             7
  174. #define LT_USER_ED                  8
  175. #define LT_USER_BWL                 9
  176. #define LT_USER_OWNERDRAW           10
  177. #define LT_USER_SPB                 11
  178. #define LT_USER_CHECKPOINT          12
  179. #define LT_USER_DCE                 13
  180. #define LT_USER_MWP                 14
  181. #define LT_USER_PROP                15
  182. #define LT_USER_LBIV                16
  183. #define LT_USER_MISC                17
  184. #define LT_USER_ATOMS               18
  185. #define LT_USER_LOCKINPUTSTATE      19
  186. #define LT_USER_HOOKLIST            20
  187. #define LT_USER_USERSEEUSERDOALLOC  21
  188. #define LT_USER_HOTKEYLIST          22
  189. #define LT_USER_POPUPMENU           23
  190. #define LT_USER_HANDLETABLE         32
  191. #define LT_USER_MAX                 LT_USER_HANDLETABLE
  192.  
  193. BOOL    WINAPI LocalInfo(LOCALINFO FAR* lpLocal, HGLOBAL hHeap);
  194. BOOL    WINAPI LocalFirst(LOCALENTRY FAR* lpLocal, HGLOBAL hHeap);
  195. BOOL    WINAPI LocalNext(LOCALENTRY FAR* lpLocal);
  196.  
  197. /****** Stack Tracing ********************************************************/
  198.  
  199. typedef struct tagSTACKTRACEENTRY
  200. {
  201.     DWORD dwSize;
  202.     HTASK hTask;
  203.     WORD wSS;
  204.     WORD wBP;
  205.     WORD wCS;
  206.     WORD wIP;
  207.     HMODULE hModule;
  208.     WORD wSegment;
  209.     WORD wFlags;
  210. } STACKTRACEENTRY;
  211.  
  212. /* STACKTRACEENTRY.wFlags values */
  213. #define FRAME_FAR       0
  214. #define FRAME_NEAR      1
  215.  
  216. BOOL    WINAPI StackTraceFirst(STACKTRACEENTRY FAR* lpStackTrace, HTASK hTask);
  217. BOOL    WINAPI StackTraceCSIPFirst(STACKTRACEENTRY FAR* lpStackTrace,
  218.             WORD wSS, WORD wCS, WORD wIP, WORD wBP);
  219. BOOL    WINAPI StackTraceNext(STACKTRACEENTRY FAR* lpStackTrace);
  220.  
  221. /****** Module list walking **************************************************/
  222.  
  223. typedef struct tagMODULEENTRY
  224. {
  225.     DWORD dwSize;
  226.     char szModule[MAX_MODULE_NAME + 1];
  227.     HMODULE hModule;
  228.     WORD wcUsage;
  229.     char szExePath[MAX_PATH + 1];
  230.     WORD wNext;
  231. } MODULEENTRY;
  232.  
  233. BOOL    WINAPI ModuleFirst(MODULEENTRY FAR* lpModule);
  234. BOOL    WINAPI ModuleNext(MODULEENTRY FAR* lpModule);
  235. HMODULE WINAPI ModuleFindName(MODULEENTRY FAR* lpModule, LPCSTR lpstrName);
  236. HMODULE WINAPI ModuleFindHandle(MODULEENTRY FAR* lpModule, HMODULE hModule);
  237.  
  238. /****** Task list walking *****************************************************/
  239.  
  240. typedef struct tagTASKENTRY
  241. {
  242.     DWORD dwSize;
  243.     HTASK hTask;
  244.     HTASK hTaskParent;
  245.     HINSTANCE hInst;
  246.     HMODULE hModule;
  247.     WORD wSS;
  248.     WORD wSP;
  249.     WORD wStackTop;
  250.     WORD wStackMinimum;
  251.     WORD wStackBottom;
  252.     WORD wcEvents;
  253.     HGLOBAL hQueue;
  254.     char szModule[MAX_MODULE_NAME + 1];
  255.     WORD wPSPOffset;
  256.     HANDLE hNext;
  257. } TASKENTRY;
  258.  
  259. BOOL    WINAPI TaskFirst(TASKENTRY FAR* lpTask);
  260. BOOL    WINAPI TaskNext(TASKENTRY FAR* lpTask);
  261. BOOL    WINAPI TaskFindHandle(TASKENTRY FAR* lpTask, HTASK hTask);
  262. DWORD   WINAPI TaskSetCSIP(HTASK hTask, WORD wCS, WORD wIP);
  263. DWORD   WINAPI TaskGetCSIP(HTASK hTask);
  264. BOOL    WINAPI TaskSwitch(HTASK hTask, DWORD dwNewCSIP);
  265.  
  266. /****** Window Class enumeration **********************************************/
  267.  
  268. typedef struct tagCLASSENTRY
  269. {
  270.     DWORD dwSize;
  271.     HMODULE hInst;              /* This is really an hModule */
  272.     char szClassName[MAX_CLASSNAME + 1];
  273.     WORD wNext;
  274. } CLASSENTRY;
  275.  
  276. BOOL    WINAPI ClassFirst(CLASSENTRY FAR* lpClass);
  277. BOOL    WINAPI ClassNext(CLASSENTRY FAR* lpClass);
  278.  
  279. /****** Information functions *************************************************/
  280.  
  281. typedef struct tagMEMMANINFO
  282. {
  283.     DWORD dwSize;
  284.     DWORD dwLargestFreeBlock;
  285.     DWORD dwMaxPagesAvailable;
  286.     DWORD dwMaxPagesLockable;
  287.     DWORD dwTotalLinearSpace;
  288.     DWORD dwTotalUnlockedPages;
  289.     DWORD dwFreePages;
  290.     DWORD dwTotalPages;
  291.     DWORD dwFreeLinearSpace;
  292.     DWORD dwSwapFilePages;
  293.     WORD wPageSize;
  294. } MEMMANINFO;
  295.  
  296. BOOL    WINAPI MemManInfo(MEMMANINFO FAR* lpEnhMode);
  297.  
  298. typedef struct tagSYSHEAPINFO
  299. {
  300.     DWORD dwSize;
  301.     WORD wUserFreePercent;
  302.     WORD wGDIFreePercent;
  303.     HGLOBAL hUserSegment;
  304.     HGLOBAL hGDISegment;
  305. } SYSHEAPINFO;
  306.  
  307. BOOL    WINAPI SystemHeapInfo(SYSHEAPINFO FAR* lpSysHeap);
  308.  
  309. /****** Interrupt Handling ****************************************************/
  310.  
  311. /* Hooked interrupts */
  312. #define INT_DIV0            0
  313. #define INT_1               1
  314. #define INT_3               3
  315. #define INT_UDINSTR         6
  316. #define INT_STKFAULT        12
  317. #define INT_GPFAULT         13
  318. #define INT_BADPAGEFAULT    14
  319. #define INT_CTLALTSYSRQ     256
  320.  
  321. /* TOOLHELP Interrupt callbacks registered with InterruptRegister should
  322.  *  always be written in assembly language.  The stack frame is not
  323.  *  compatible with high level language conventions.
  324.  *
  325.  *  This stack frame looks as follows to the callback.  All registers
  326.  *  should be preserved across this callback to allow restarting fault.
  327.  *               ------------
  328.  *               |   Flags  |  [SP + 0Eh]
  329.  *               |    CS    |  [SP + 0Ch]
  330.  *               |    IP    |  [SP + 0Ah]
  331.  *               |  Handle  |  [SP + 08h]
  332.  *               |Exception#|  [SP + 06h]
  333.  *               |    AX    |  [SP + 04h]  AX Saved to allow MakeProcInstance
  334.  *               |  Ret CS  |  [SP + 02h]
  335.  *       SP--->  |  Ret IP  |  [SP + 00h]
  336.  *               ------------
  337.  */
  338. BOOL    WINAPI InterruptRegister(HTASK hTask, FARPROC lpfnIntCallback);
  339. BOOL    WINAPI InterruptUnRegister(HTASK hTask);
  340.  
  341. /*  Notifications:
  342.  *      When a notification callback is called, two parameters are passed
  343.  *      in:  a WORD, wID, and another DWORD, dwData.  wID is one of
  344.  *      the values NFY_* below.  Callback routines should ignore unrecog-
  345.  *      nized values to preserve future compatibility.  Callback routines
  346.  *      are also passed a dwData value.  This may contain data or may be
  347.  *      a FAR pointer to a structure, or may not be used depending on
  348.  *      which notification is being received.
  349.  *
  350.  *      In all cases, if the return value of the callback is TRUE, the
  351.  *      notification will NOT be passed on to other callbacks.  It has
  352.  *      been handled.  This should be used sparingly and only with certain
  353.  *      notifications.  Callbacks almost always return FALSE.
  354.  */
  355.  
  356. /* NFY_UNKNOWN:  An unknown notification has been returned from KERNEL.  Apps
  357.  *  should ignore these.
  358.  */
  359. #define NFY_UNKNOWN         0
  360.  
  361. /* NFY_LOADSEG:  dwData points to a NFYLOADSEG structure */
  362. #define NFY_LOADSEG         1
  363. typedef struct tagNFYLOADSEG
  364. {
  365.     DWORD dwSize;
  366.     WORD wSelector;
  367.     WORD wSegNum;
  368.     WORD wType;             /* Low bit set if data seg, clear if code seg */
  369.     WORD wcInstance;        /* Instance count ONLY VALID FOR DATA SEG */
  370.     LPCSTR lpstrModuleName;
  371. } NFYLOADSEG;
  372.  
  373. /* NFY_FREESEG:  LOWORD(dwData) is the selector of the segment being freed */
  374. #define NFY_FREESEG         2
  375.  
  376. /* NFY_STARTDLL:  dwData points to a NFYLOADSEG structure */
  377. #define NFY_STARTDLL        3
  378. typedef struct tagNFYSTARTDLL
  379. {
  380.     DWORD dwSize;
  381.     HMODULE hModule;
  382.     WORD wCS;
  383.     WORD wIP;
  384. } NFYSTARTDLL;
  385.  
  386. /* NFY_STARTTASK:  dwData is the CS:IP of the start address of the task */
  387. #define NFY_STARTTASK       4
  388.  
  389. /* NFY_EXITTASK:  The low byte of dwData contains the program exit code */
  390. #define NFY_EXITTASK        5
  391.  
  392. /* NFY_DELMODULE:  LOWORD(dwData) is the handle of the module to be freed */
  393. #define NFY_DELMODULE       6
  394.  
  395. /* NFY_RIP:  dwData points to a NFYRIP structure */
  396. #define NFY_RIP             7
  397. typedef struct tagNFYRIP
  398. {
  399.     DWORD dwSize;
  400.     WORD wIP;
  401.     WORD wCS;
  402.     WORD wSS;
  403.     WORD wBP;
  404.     WORD wExitCode;
  405. } NFYRIP;
  406.  
  407. /* NFY_TASKIN:  No data.  Callback should do GetCurrentTask() */
  408. #define NFY_TASKIN          8
  409.  
  410. /* NFY_TASKOUT:  No data.  Callback should do GetCurrentTask() */
  411. #define NFY_TASKOUT         9
  412.  
  413. /* NFY_INCHAR:  Return value from callback is used.  If NULL, mapped to 'i' */
  414. #define NFY_INCHAR          10
  415.  
  416. /* NFY_OUTSTR:  dwData points to the string to be displayed */
  417. #define NFY_OUTSTR          11
  418.  
  419. /* NFY_LOGERROR:  dwData points to a NFYLOGERROR struct */
  420. #define NFY_LOGERROR        12
  421. typedef struct tagNFYLOGERROR
  422. {
  423.     DWORD dwSize;
  424.     UINT wErrCode;
  425.     void FAR* lpInfo;       /* Error code-dependent */
  426. } NFYLOGERROR;
  427.  
  428. /* NFY_LOGPARAMERROR:  dwData points to a NFYLOGPARAMERROR struct */
  429. #define NFY_LOGPARAMERROR   13
  430. typedef struct tagNFYLOGPARAMERROR
  431. {
  432.     DWORD dwSize;
  433.     UINT wErrCode;
  434.     FARPROC lpfnErrorAddr;
  435.     void FAR* FAR* lpBadParam;
  436. } NFYLOGPARAMERROR;
  437.  
  438. /* NotifyRegister() flags */
  439. #define NF_NORMAL       0
  440. #define NF_TASKSWITCH   1
  441. #define NF_RIP          2
  442.  
  443. typedef BOOL (CALLBACK* LPFNNOTIFYCALLBACK)(WORD wID, DWORD dwData);
  444.  
  445. BOOL    WINAPI NotifyRegister(HTASK hTask, LPFNNOTIFYCALLBACK lpfn, WORD wFlags);
  446. BOOL    WINAPI NotifyUnRegister(HTASK hTask);
  447.  
  448. /****** Miscellaneous *********************************************************/
  449.  
  450. void    WINAPI TerminateApp(HTASK hTask, WORD wFlags);
  451.  
  452. /* TerminateApp() flag values */
  453. #define UAE_BOX     0
  454. #define NO_UAE_BOX  1
  455.  
  456. DWORD   WINAPI MemoryRead(WORD wSel, DWORD dwOffset, void FAR* lpBuffer, DWORD dwcb);
  457. DWORD   WINAPI MemoryWrite(WORD wSel, DWORD dwOffset, void FAR* lpBuffer, DWORD dwcb);
  458.  
  459. typedef struct tagTIMERINFO
  460. {
  461.     DWORD dwSize;
  462.     DWORD dwmsSinceStart;
  463.     DWORD dwmsThisVM;
  464. } TIMERINFO;
  465.  
  466. BOOL    WINAPI TimerCount(TIMERINFO FAR* lpTimer);
  467.  
  468. #ifdef __cplusplus
  469. }                       /* End of extern "C" { */
  470. #endif  /* __cplusplus */
  471.  
  472. #ifndef RC_INVOKED
  473. #pragma option -a.      /* Revert to default packing */
  474. #endif  /* RC_INVOKED */
  475.  
  476. #endif /* __TOOLHELP_H */
  477.