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
10extern "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