home *** CD-ROM | disk | FTP | other *** search
/ Boston 2 / boston-2.iso / DOS / PROGRAM / C / TEMPLATE / TOOLHELP.H < prev    next >
Text File  |  1993-12-01  |  13KB  |  469 lines

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