Leaked source code of windows server 2003
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.

169 lines
5.9 KiB

  1. /*****************************************************************************\
  2. * *
  3. * tlhelp32.h - WIN32 tool help functions, types, and definitions *
  4. * *
  5. * Version 1.0 *
  6. * *
  7. * NOTE: windows.h/winbase.h must be #included first *
  8. * *
  9. * Copyright (c) 1994-1995, Microsoft Corp. All rights reserved. *
  10. * *
  11. \*****************************************************************************/
  12. #ifndef _INC_TOOLHELP32
  13. #define _INC_TOOLHELP32
  14. #ifdef __cplusplus
  15. extern "C" { /* Assume C declarations for C++ */
  16. #endif /* __cplusplus */
  17. #define MAX_MODULE_NAME32 255
  18. /****** Shapshot function **********************************************/
  19. HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags, DWORD th32ProcessID);
  20. //
  21. // The th32ProcessID argument is only used if TH32CS_SNAPHEAPLIST or
  22. // TH32CS_SNAPMODULE is specified. th32ProcessID == 0 means the current
  23. // process.
  24. //
  25. // NOTE that all of the snapshots are global except for the heap and module
  26. // lists which are process specific. To enumerate the heap or module
  27. // state for all WIN32 processes call with TH32CS_SNAPALL and the
  28. // current process. Then for each process in the TH32CS_SNAPPROCESS
  29. // list that isn't the current process, do a call with just
  30. // TH32CS_SNAPHEAPLIST and/or TH32CS_SNAPMODULE.
  31. //
  32. // dwFlags
  33. //
  34. #define TH32CS_SNAPHEAPLIST 0x00000001
  35. #define TH32CS_SNAPPROCESS 0x00000002
  36. #define TH32CS_SNAPTHREAD 0x00000004
  37. #define TH32CS_SNAPMODULE 0x00000008
  38. #define TH32CS_SNAPALL (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)
  39. #define TH32CS_INHERIT 0x80000000
  40. //
  41. // Use CloseHandle to destroy the snapshot
  42. //
  43. /****** heap walking ***************************************************/
  44. typedef struct tagHEAPLIST32
  45. {
  46. DWORD dwSize;
  47. DWORD th32ProcessID; // owning process
  48. DWORD th32HeapID; // heap (in owning process's context!)
  49. DWORD dwFlags;
  50. } HEAPLIST32;
  51. typedef HEAPLIST32 * PHEAPLIST32;
  52. typedef HEAPLIST32 * LPHEAPLIST32;
  53. //
  54. // dwFlags
  55. //
  56. #define HF32_DEFAULT 1 // process's default heap
  57. #define HF32_SHARED 2 // is shared heap
  58. BOOL WINAPI Heap32ListFirst(HANDLE hSnapshot, LPHEAPLIST32 lphl);
  59. BOOL WINAPI Heap32ListNext(HANDLE hSnapshot, LPHEAPLIST32 lphl);
  60. typedef struct tagHEAPENTRY32
  61. {
  62. DWORD dwSize;
  63. HANDLE hHandle; // Handle of this heap block
  64. DWORD dwAddress; // Linear address of start of block
  65. DWORD dwBlockSize; // Size of block in bytes
  66. DWORD dwFlags;
  67. DWORD dwLockCount;
  68. DWORD dwResvd;
  69. DWORD th32ProcessID; // owning process
  70. DWORD th32HeapID; // heap block is in
  71. } HEAPENTRY32;
  72. typedef HEAPENTRY32 * PHEAPENTRY32;
  73. typedef HEAPENTRY32 * LPHEAPENTRY32;
  74. //
  75. // dwFlags
  76. //
  77. #define LF32_FIXED 0x00000001
  78. #define LF32_FREE 0x00000002
  79. #define LF32_MOVEABLE 0x00000004
  80. BOOL WINAPI Heap32First(LPHEAPENTRY32 lphe, DWORD th32ProcessID,
  81. DWORD th32HeapID);
  82. BOOL WINAPI Heap32Next(LPHEAPENTRY32 lphe);
  83. BOOL WINAPI Toolhelp32ReadProcessMemory(DWORD th32ProcessID,
  84. LPCVOID lpBaseAddress,
  85. LPVOID lpBuffer,
  86. DWORD cbRead,
  87. LPDWORD lpNumberOfBytesRead);
  88. /***** Process walking *************************************************/
  89. typedef struct tagPROCESSENTRY32
  90. {
  91. DWORD dwSize;
  92. DWORD cntUsage;
  93. DWORD th32ProcessID; // this process
  94. DWORD th32DefaultHeapID;
  95. DWORD th32ModuleID; // associated exe
  96. DWORD cntThreads;
  97. DWORD th32ParentProcessID; // this process's parent process
  98. LONG pcPriClassBase; // Base priority of process's threads
  99. DWORD dwFlags;
  100. char szExeFile[MAX_PATH]; // Path
  101. } PROCESSENTRY32;
  102. typedef PROCESSENTRY32 * PPROCESSENTRY32;
  103. typedef PROCESSENTRY32 * LPPROCESSENTRY32;
  104. BOOL WINAPI Process32First(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);
  105. BOOL WINAPI Process32Next(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);
  106. /***** Thread walking **************************************************/
  107. typedef struct tagTHREADENTRY32
  108. {
  109. DWORD dwSize;
  110. DWORD cntUsage;
  111. DWORD th32ThreadID; // this thread
  112. DWORD th32OwnerProcessID; // Process this thread is associated with
  113. LONG tpBasePri;
  114. LONG tpDeltaPri;
  115. DWORD dwFlags;
  116. } THREADENTRY32;
  117. typedef THREADENTRY32 * PTHREADENTRY32;
  118. typedef THREADENTRY32 * LPTHREADENTRY32;
  119. BOOL WINAPI Thread32First(HANDLE hSnapshot, LPTHREADENTRY32 lpte);
  120. BOOL WINAPI Thread32Next(HANDLE hSnapshot, LPTHREADENTRY32 lpte);
  121. /***** Module walking *************************************************/
  122. typedef struct tagMODULEENTRY32
  123. {
  124. DWORD dwSize;
  125. DWORD th32ModuleID; // This module
  126. DWORD th32ProcessID; // owning process
  127. DWORD GlblcntUsage; // Global usage count on the module
  128. DWORD ProccntUsage; // Module usage count in th32ProcessID's context
  129. BYTE * modBaseAddr; // Base address of module in th32ProcessID's context
  130. DWORD modBaseSize; // Size in bytes of module starting at modBaseAddr
  131. HMODULE hModule; // The hModule of this module in th32ProcessID's context
  132. char szModule[MAX_MODULE_NAME32 + 1];
  133. char szExePath[MAX_PATH];
  134. } MODULEENTRY32;
  135. typedef MODULEENTRY32 * PMODULEENTRY32;
  136. typedef MODULEENTRY32 * LPMODULEENTRY32;
  137. //
  138. // NOTE CAREFULLY that the modBaseAddr and hModule fields are valid ONLY
  139. // in th32ProcessID's process context.
  140. //
  141. BOOL WINAPI Module32First(HANDLE hSnapshot, LPMODULEENTRY32 lpme);
  142. BOOL WINAPI Module32Next(HANDLE hSnapshot, LPMODULEENTRY32 lpme);
  143. #ifdef __cplusplus
  144. }
  145. #endif
  146. #endif // _INC_TOOLHELP32