1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _INC_TOOLHELP32
7 #define _INC_TOOLHELP32
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 #define MAX_MODULE_NAME32 255
14 
15   HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID);
16 
17 #define TH32CS_SNAPHEAPLIST 0x00000001
18 #define TH32CS_SNAPPROCESS 0x00000002
19 #define TH32CS_SNAPTHREAD 0x00000004
20 #define TH32CS_SNAPMODULE 0x00000008
21 #define TH32CS_SNAPMODULE32 0x00000010
22 #define TH32CS_SNAPALL (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)
23 #define TH32CS_INHERIT 0x80000000
24 
25   typedef struct tagHEAPLIST32 {
26     SIZE_T dwSize;
27     DWORD th32ProcessID;
28     ULONG_PTR th32HeapID;
29     DWORD dwFlags;
30   } HEAPLIST32;
31   typedef HEAPLIST32 *PHEAPLIST32;
32   typedef HEAPLIST32 *LPHEAPLIST32;
33 
34 #define HF32_DEFAULT 1
35 #define HF32_SHARED 2
36 
37   WINBOOL WINAPI Heap32ListFirst(HANDLE hSnapshot,LPHEAPLIST32 lphl);
38   WINBOOL WINAPI Heap32ListNext(HANDLE hSnapshot,LPHEAPLIST32 lphl);
39 
40   typedef struct tagHEAPENTRY32 {
41     SIZE_T dwSize;
42     HANDLE hHandle;
43     ULONG_PTR dwAddress;
44     SIZE_T dwBlockSize;
45     DWORD dwFlags;
46     DWORD dwLockCount;
47     DWORD dwResvd;
48     DWORD th32ProcessID;
49     ULONG_PTR th32HeapID;
50   } HEAPENTRY32;
51   typedef HEAPENTRY32 *PHEAPENTRY32;
52   typedef HEAPENTRY32 *LPHEAPENTRY32;
53 
54 #define LF32_FIXED 0x00000001
55 #define LF32_FREE 0x00000002
56 #define LF32_MOVEABLE 0x00000004
57 
58   WINBOOL WINAPI Heap32First(LPHEAPENTRY32 lphe,DWORD th32ProcessID,ULONG_PTR th32HeapID);
59   WINBOOL WINAPI Heap32Next(LPHEAPENTRY32 lphe);
60   WINBOOL WINAPI Toolhelp32ReadProcessMemory(DWORD th32ProcessID,LPCVOID lpBaseAddress,LPVOID lpBuffer,SIZE_T cbRead,SIZE_T *lpNumberOfBytesRead);
61 
62   typedef struct tagPROCESSENTRY32W {
63     DWORD dwSize;
64     DWORD cntUsage;
65     DWORD th32ProcessID;
66     ULONG_PTR th32DefaultHeapID;
67     DWORD th32ModuleID;
68     DWORD cntThreads;
69     DWORD th32ParentProcessID;
70     LONG pcPriClassBase;
71     DWORD dwFlags;
72     WCHAR szExeFile[MAX_PATH];
73   } PROCESSENTRY32W;
74   typedef PROCESSENTRY32W *PPROCESSENTRY32W;
75   typedef PROCESSENTRY32W *LPPROCESSENTRY32W;
76 
77   WINBOOL WINAPI Process32FirstW(HANDLE hSnapshot,LPPROCESSENTRY32W lppe);
78   WINBOOL WINAPI Process32NextW(HANDLE hSnapshot,LPPROCESSENTRY32W lppe);
79 
80   typedef struct tagPROCESSENTRY32 {
81     DWORD dwSize;
82     DWORD cntUsage;
83     DWORD th32ProcessID;
84     ULONG_PTR th32DefaultHeapID;
85     DWORD th32ModuleID;
86     DWORD cntThreads;
87     DWORD th32ParentProcessID;
88     LONG pcPriClassBase;
89     DWORD dwFlags;
90     CHAR szExeFile[MAX_PATH];
91   } PROCESSENTRY32;
92   typedef PROCESSENTRY32 *PPROCESSENTRY32;
93   typedef PROCESSENTRY32 *LPPROCESSENTRY32;
94 
95   WINBOOL WINAPI Process32First(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);
96   WINBOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);
97 
98 #if defined(UNICODE)
99 #define Process32First Process32FirstW
100 #define Process32Next Process32NextW
101 #define PROCESSENTRY32 PROCESSENTRY32W
102 #define PPROCESSENTRY32 PPROCESSENTRY32W
103 #define LPPROCESSENTRY32 LPPROCESSENTRY32W
104 #endif
105 
106   typedef struct tagTHREADENTRY32 {
107     DWORD dwSize;
108     DWORD cntUsage;
109     DWORD th32ThreadID;
110     DWORD th32OwnerProcessID;
111     LONG tpBasePri;
112     LONG tpDeltaPri;
113     DWORD dwFlags;
114   } THREADENTRY32;
115   typedef THREADENTRY32 *PTHREADENTRY32;
116   typedef THREADENTRY32 *LPTHREADENTRY32;
117 
118   WINBOOL WINAPI Thread32First(HANDLE hSnapshot,LPTHREADENTRY32 lpte);
119   WINBOOL WINAPI Thread32Next(HANDLE hSnapshot,LPTHREADENTRY32 lpte);
120 
121   typedef struct tagMODULEENTRY32W {
122     DWORD dwSize;
123     DWORD th32ModuleID;
124     DWORD th32ProcessID;
125     DWORD GlblcntUsage;
126     DWORD ProccntUsage;
127     BYTE *modBaseAddr;
128     DWORD modBaseSize;
129     HMODULE hModule;
130     WCHAR szModule[MAX_MODULE_NAME32 + 1];
131     WCHAR szExePath[MAX_PATH];
132   } MODULEENTRY32W;
133   typedef MODULEENTRY32W *PMODULEENTRY32W;
134   typedef MODULEENTRY32W *LPMODULEENTRY32W;
135 
136   WINBOOL WINAPI Module32FirstW(HANDLE hSnapshot,LPMODULEENTRY32W lpme);
137   WINBOOL WINAPI Module32NextW(HANDLE hSnapshot,LPMODULEENTRY32W lpme);
138 
139   typedef struct tagMODULEENTRY32 {
140     DWORD dwSize;
141     DWORD th32ModuleID;
142     DWORD th32ProcessID;
143     DWORD GlblcntUsage;
144     DWORD ProccntUsage;
145     BYTE *modBaseAddr;
146     DWORD modBaseSize;
147     HMODULE hModule;
148     char szModule[MAX_MODULE_NAME32 + 1];
149     char szExePath[MAX_PATH];
150   } MODULEENTRY32;
151   typedef MODULEENTRY32 *PMODULEENTRY32;
152   typedef MODULEENTRY32 *LPMODULEENTRY32;
153 
154   WINBOOL WINAPI Module32First(HANDLE hSnapshot,LPMODULEENTRY32 lpme);
155   WINBOOL WINAPI Module32Next(HANDLE hSnapshot,LPMODULEENTRY32 lpme);
156 
157 #if defined(UNICODE)
158 #define Module32First Module32FirstW
159 #define Module32Next Module32NextW
160 #define MODULEENTRY32 MODULEENTRY32W
161 #define PMODULEENTRY32 PMODULEENTRY32W
162 #define LPMODULEENTRY32 LPMODULEENTRY32W
163 #endif
164 
165 #ifdef __cplusplus
166 }
167 #endif
168 #endif
169