Advertisement
Guest User

Untitled

a guest
Dec 16th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.77 KB | None | 0 0
  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) Microsoft Corp. All rights reserved. *
  10. * *
  11. \*****************************************************************************/
  12.  
  13. #ifndef _INC_TOOLHELP32
  14. #define _INC_TOOLHELP32
  15.  
  16. #if _MSC_VER > 1000
  17. #pragma once
  18. #endif
  19. #include <winapifamily.h>
  20.  
  21. #pragma region Desktop Family
  22. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  23.  
  24.  
  25. #ifdef __cplusplus
  26. extern "C" { /* Assume C declarations for C++ */
  27. #endif /* __cplusplus */
  28.  
  29. #define MAX_MODULE_NAME32 255
  30.  
  31. /****** Shapshot function **********************************************/
  32.  
  33. HANDLE
  34. WINAPI
  35. CreateToolhelp32Snapshot(
  36. DWORD dwFlags,
  37. DWORD th32ProcessID
  38. );
  39.  
  40. //
  41. // The th32ProcessID argument is only used if TH32CS_SNAPHEAPLIST or
  42. // TH32CS_SNAPMODULE is specified. th32ProcessID == 0 means the current
  43. // process.
  44. //
  45. // NOTE that all of the snapshots are global except for the heap and module
  46. // lists which are process specific. To enumerate the heap or module
  47. // state for all WIN32 processes call with TH32CS_SNAPALL and the
  48. // current process. Then for each process in the TH32CS_SNAPPROCESS
  49. // list that isn't the current process, do a call with just
  50. // TH32CS_SNAPHEAPLIST and/or TH32CS_SNAPMODULE.
  51. //
  52. // dwFlags
  53. //
  54. #define TH32CS_SNAPHEAPLIST 0x00000001
  55. #define TH32CS_SNAPPROCESS 0x00000002
  56. #define TH32CS_SNAPTHREAD 0x00000004
  57. #define TH32CS_SNAPMODULE 0x00000008
  58. #define TH32CS_SNAPMODULE32 0x00000010
  59. #define TH32CS_SNAPALL (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)
  60. #define TH32CS_INHERIT 0x80000000
  61. //
  62. // Use CloseHandle to destroy the snapshot
  63. //
  64.  
  65. /****** heap walking ***************************************************/
  66.  
  67. typedef struct tagHEAPLIST32
  68. {
  69. SIZE_T dwSize;
  70. DWORD th32ProcessID; // owning process
  71. ULONG_PTR th32HeapID; // heap (in owning process's context!)
  72. DWORD dwFlags;
  73. } HEAPLIST32;
  74. typedef HEAPLIST32 * PHEAPLIST32;
  75. typedef HEAPLIST32 * LPHEAPLIST32;
  76. //
  77. // dwFlags
  78. //
  79. #define HF32_DEFAULT 1 // process's default heap
  80. #define HF32_SHARED 2 // is shared heap
  81.  
  82. BOOL
  83. WINAPI
  84. Heap32ListFirst(
  85. HANDLE hSnapshot,
  86. LPHEAPLIST32 lphl
  87. );
  88.  
  89. BOOL
  90. WINAPI
  91. Heap32ListNext(
  92. HANDLE hSnapshot,
  93. LPHEAPLIST32 lphl
  94. );
  95.  
  96. typedef struct tagHEAPENTRY32
  97. {
  98. SIZE_T dwSize;
  99. HANDLE hHandle; // Handle of this heap block
  100. ULONG_PTR dwAddress; // Linear address of start of block
  101. SIZE_T dwBlockSize; // Size of block in bytes
  102. DWORD dwFlags;
  103. DWORD dwLockCount;
  104. DWORD dwResvd;
  105. DWORD th32ProcessID; // owning process
  106. ULONG_PTR th32HeapID; // heap block is in
  107. } HEAPENTRY32;
  108. typedef HEAPENTRY32 * PHEAPENTRY32;
  109. typedef HEAPENTRY32 * LPHEAPENTRY32;
  110. //
  111. // dwFlags
  112. //
  113. #define LF32_FIXED 0x00000001
  114. #define LF32_FREE 0x00000002
  115. #define LF32_MOVEABLE 0x00000004
  116.  
  117. BOOL
  118. WINAPI
  119. Heap32First(
  120. LPHEAPENTRY32 lphe,
  121. DWORD th32ProcessID,
  122. ULONG_PTR th32HeapID
  123. );
  124.  
  125. BOOL
  126. WINAPI
  127. Heap32Next(
  128. LPHEAPENTRY32 lphe
  129. );
  130.  
  131. BOOL
  132. WINAPI
  133. Toolhelp32ReadProcessMemory(
  134. DWORD th32ProcessID,
  135. LPCVOID lpBaseAddress,
  136. LPVOID lpBuffer,
  137. SIZE_T cbRead,
  138. SIZE_T *lpNumberOfBytesRead
  139. );
  140.  
  141. /***** Process walking *************************************************/
  142.  
  143. typedef struct tagPROCESSENTRY32W
  144. {
  145. DWORD dwSize;
  146. DWORD cntUsage;
  147. DWORD th32ProcessID; // this process
  148. ULONG_PTR th32DefaultHeapID;
  149. DWORD th32ModuleID; // associated exe
  150. DWORD cntThreads;
  151. DWORD th32ParentProcessID; // this process's parent process
  152. LONG pcPriClassBase; // Base priority of process's threads
  153. DWORD dwFlags;
  154. WCHAR szExeFile[MAX_PATH]; // Path
  155. } PROCESSENTRY32W;
  156. typedef PROCESSENTRY32W * PPROCESSENTRY32W;
  157. typedef PROCESSENTRY32W * LPPROCESSENTRY32W;
  158.  
  159. BOOL
  160. WINAPI
  161. Process32FirstW(
  162. HANDLE hSnapshot,
  163. LPPROCESSENTRY32W lppe
  164. );
  165.  
  166. BOOL
  167. WINAPI
  168. Process32NextW(
  169. HANDLE hSnapshot,
  170. LPPROCESSENTRY32W lppe
  171. );
  172.  
  173. typedef struct tagPROCESSENTRY32
  174. {
  175. DWORD dwSize;
  176. DWORD cntUsage;
  177. DWORD th32ProcessID; // this process
  178. ULONG_PTR th32DefaultHeapID;
  179. DWORD th32ModuleID; // associated exe
  180. DWORD cntThreads;
  181. DWORD th32ParentProcessID; // this process's parent process
  182. LONG pcPriClassBase; // Base priority of process's threads
  183. DWORD dwFlags;
  184. CHAR szExeFile[MAX_PATH]; // Path
  185. } PROCESSENTRY32;
  186. typedef PROCESSENTRY32 * PPROCESSENTRY32;
  187. typedef PROCESSENTRY32 * LPPROCESSENTRY32;
  188.  
  189. BOOL
  190. WINAPI
  191. Process32First(
  192. HANDLE hSnapshot,
  193. LPPROCESSENTRY32 lppe
  194. );
  195.  
  196. BOOL
  197. WINAPI
  198. Process32Next(
  199. HANDLE hSnapshot,
  200. LPPROCESSENTRY32 lppe
  201. );
  202.  
  203. #ifdef UNICODE
  204. #define Process32First Process32FirstW
  205. #define Process32Next Process32NextW
  206. #define PROCESSENTRY32 PROCESSENTRY32W
  207. #define PPROCESSENTRY32 PPROCESSENTRY32W
  208. #define LPPROCESSENTRY32 LPPROCESSENTRY32W
  209. #endif // !UNICODE
  210.  
  211. /***** Thread walking **************************************************/
  212.  
  213. typedef struct tagTHREADENTRY32
  214. {
  215. DWORD dwSize;
  216. DWORD cntUsage;
  217. DWORD th32ThreadID; // this thread
  218. DWORD th32OwnerProcessID; // Process this thread is associated with
  219. LONG tpBasePri;
  220. LONG tpDeltaPri;
  221. DWORD dwFlags;
  222. } THREADENTRY32;
  223. typedef THREADENTRY32 * PTHREADENTRY32;
  224. typedef THREADENTRY32 * LPTHREADENTRY32;
  225.  
  226. BOOL
  227. WINAPI
  228. Thread32First(
  229. HANDLE hSnapshot,
  230. LPTHREADENTRY32 lpte
  231. );
  232.  
  233. BOOL
  234. WINAPI
  235. Thread32Next(
  236. HANDLE hSnapshot,
  237. LPTHREADENTRY32 lpte
  238. );
  239.  
  240. /***** Module walking *************************************************/
  241.  
  242. typedef struct tagMODULEENTRY32W
  243. {
  244. DWORD dwSize;
  245. DWORD th32ModuleID; // This module
  246. DWORD th32ProcessID; // owning process
  247. DWORD GlblcntUsage; // Global usage count on the module
  248. DWORD ProccntUsage; // Module usage count in th32ProcessID's context
  249. BYTE * modBaseAddr; // Base address of module in th32ProcessID's context
  250. DWORD modBaseSize; // Size in bytes of module starting at modBaseAddr
  251. HMODULE hModule; // The hModule of this module in th32ProcessID's context
  252. WCHAR szModule[MAX_MODULE_NAME32 + 1];
  253. WCHAR szExePath[MAX_PATH];
  254. } MODULEENTRY32W;
  255. typedef MODULEENTRY32W * PMODULEENTRY32W;
  256. typedef MODULEENTRY32W * LPMODULEENTRY32W;
  257.  
  258. BOOL
  259. WINAPI
  260. Module32FirstW(
  261. HANDLE hSnapshot,
  262. LPMODULEENTRY32W lpme
  263. );
  264.  
  265. BOOL
  266. WINAPI
  267. Module32NextW(
  268. HANDLE hSnapshot,
  269. LPMODULEENTRY32W lpme
  270. );
  271.  
  272.  
  273. typedef struct tagMODULEENTRY32
  274. {
  275. DWORD dwSize;
  276. DWORD th32ModuleID; // This module
  277. DWORD th32ProcessID; // owning process
  278. DWORD GlblcntUsage; // Global usage count on the module
  279. DWORD ProccntUsage; // Module usage count in th32ProcessID's context
  280. BYTE * modBaseAddr; // Base address of module in th32ProcessID's context
  281. DWORD modBaseSize; // Size in bytes of module starting at modBaseAddr
  282. HMODULE hModule; // The hModule of this module in th32ProcessID's context
  283. char szModule[MAX_MODULE_NAME32 + 1];
  284. char szExePath[MAX_PATH];
  285. } MODULEENTRY32;
  286. typedef MODULEENTRY32 * PMODULEENTRY32;
  287. typedef MODULEENTRY32 * LPMODULEENTRY32;
  288.  
  289. //
  290. // NOTE CAREFULLY that the modBaseAddr and hModule fields are valid ONLY
  291. // in th32ProcessID's process context.
  292. //
  293.  
  294. BOOL
  295. WINAPI
  296. Module32First(
  297. HANDLE hSnapshot,
  298. LPMODULEENTRY32 lpme
  299. );
  300.  
  301. BOOL
  302. WINAPI
  303. Module32Next(
  304. HANDLE hSnapshot,
  305. LPMODULEENTRY32 lpme
  306. );
  307.  
  308. #ifdef UNICODE
  309. #define Module32First Module32FirstW
  310. #define Module32Next Module32NextW
  311. #define MODULEENTRY32 MODULEENTRY32W
  312. #define PMODULEENTRY32 PMODULEENTRY32W
  313. #define LPMODULEENTRY32 LPMODULEENTRY32W
  314. #endif // !UNICODE
  315.  
  316.  
  317. #ifdef __cplusplus
  318. }
  319. #endif
  320.  
  321.  
  322. #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
  323. #pragma endregion
  324.  
  325. #endif // _INC_TOOLHELP32
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement