1 /**
2  * @file tlhelp32.h
3  * Copyright 2012, 2013 MinGW.org project
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 /* Written by Mumit Khan <khan@nanotech.wisc.edu> */
25 #ifndef _TLHELP32_H
26 #define _TLHELP32_H
27 #pragma GCC system_header
28 #include <_mingw.h>
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 #define HF32_DEFAULT	1
35 #define HF32_SHARED	2
36 #define LF32_FIXED	0x1
37 #define LF32_FREE	0x2
38 #define LF32_MOVEABLE	0x4
39 #define MAX_MODULE_NAME32	255
40 #define TH32CS_SNAPHEAPLIST	0x1
41 #define TH32CS_SNAPPROCESS	0x2
42 #define TH32CS_SNAPTHREAD	0x4
43 #define TH32CS_SNAPMODULE	0x8
44 #define TH32CS_SNAPALL	(TH32CS_SNAPHEAPLIST|TH32CS_SNAPPROCESS|TH32CS_SNAPTHREAD|TH32CS_SNAPMODULE)
45 #define TH32CS_INHERIT	0x80000000
46 typedef struct tagHEAPLIST32 {
47 	DWORD dwSize;
48 	DWORD th32ProcessID;
49 	DWORD th32HeapID;
50 	DWORD dwFlags;
51 } HEAPLIST32,*PHEAPLIST32,*LPHEAPLIST32;
52 typedef struct tagHEAPENTRY32 {
53 	DWORD dwSize;
54 	HANDLE hHandle;
55 	DWORD dwAddress;
56 	DWORD dwBlockSize;
57 	DWORD dwFlags;
58 	DWORD dwLockCount;
59 	DWORD dwResvd;
60 	DWORD th32ProcessID;
61 	DWORD th32HeapID;
62 } HEAPENTRY32,*PHEAPENTRY32,*LPHEAPENTRY32;
63 typedef struct tagPROCESSENTRY32W {
64 	DWORD dwSize;
65 	DWORD cntUsage;
66 	DWORD th32ProcessID;
67 	DWORD th32DefaultHeapID;
68 	DWORD th32ModuleID;
69 	DWORD cntThreads;
70 	DWORD th32ParentProcessID;
71 	LONG pcPriClassBase;
72 	DWORD dwFlags;
73 	WCHAR szExeFile[MAX_PATH];
74 } PROCESSENTRY32W,*PPROCESSENTRY32W,*LPPROCESSENTRY32W;
75 typedef struct tagPROCESSENTRY32 {
76 	DWORD dwSize;
77 	DWORD cntUsage;
78 	DWORD th32ProcessID;
79 	DWORD th32DefaultHeapID;
80 	DWORD th32ModuleID;
81 	DWORD cntThreads;
82 	DWORD th32ParentProcessID;
83 	LONG pcPriClassBase;
84 	DWORD dwFlags;
85 	CHAR  szExeFile[MAX_PATH];
86 } PROCESSENTRY32,*PPROCESSENTRY32,*LPPROCESSENTRY32;
87 typedef struct tagTHREADENTRY32 {
88 	DWORD dwSize;
89 	DWORD cntUsage;
90 	DWORD th32ThreadID;
91 	DWORD th32OwnerProcessID;
92 	LONG tpBasePri;
93 	LONG tpDeltaPri;
94 	DWORD dwFlags;
95 } THREADENTRY32,*PTHREADENTRY32,*LPTHREADENTRY32;
96 typedef struct tagMODULEENTRY32W {
97 	DWORD dwSize;
98 	DWORD th32ModuleID;
99 	DWORD th32ProcessID;
100 	DWORD GlblcntUsage;
101 	DWORD ProccntUsage;
102 	BYTE *modBaseAddr;
103 	DWORD modBaseSize;
104 	HMODULE hModule;
105 	WCHAR szModule[MAX_MODULE_NAME32 + 1];
106 	WCHAR szExePath[MAX_PATH];
107 } MODULEENTRY32W,*PMODULEENTRY32W,*LPMODULEENTRY32W;
108 typedef struct tagMODULEENTRY32 {
109 	DWORD dwSize;
110 	DWORD th32ModuleID;
111 	DWORD th32ProcessID;
112 	DWORD GlblcntUsage;
113 	DWORD ProccntUsage;
114 	BYTE *modBaseAddr;
115 	DWORD modBaseSize;
116 	HMODULE hModule;
117 	char szModule[MAX_MODULE_NAME32 + 1];
118 	char szExePath[MAX_PATH];
119 } MODULEENTRY32,*PMODULEENTRY32,*LPMODULEENTRY32;
120 BOOL WINAPI Heap32First(LPHEAPENTRY32,DWORD,DWORD);
121 BOOL WINAPI Heap32ListFirst(HANDLE,LPHEAPLIST32);
122 BOOL WINAPI Heap32ListNext(HANDLE,LPHEAPLIST32);
123 BOOL WINAPI Heap32Next(LPHEAPENTRY32);
124 BOOL WINAPI Module32First(HANDLE,LPMODULEENTRY32);
125 BOOL WINAPI Module32FirstW(HANDLE,LPMODULEENTRY32W);
126 BOOL WINAPI Module32Next(HANDLE,LPMODULEENTRY32);
127 BOOL WINAPI Module32NextW(HANDLE,LPMODULEENTRY32W);
128 BOOL WINAPI Process32First(HANDLE,LPPROCESSENTRY32);
129 BOOL WINAPI Process32FirstW(HANDLE,LPPROCESSENTRY32W);
130 BOOL WINAPI Process32Next(HANDLE,LPPROCESSENTRY32);
131 BOOL WINAPI Process32NextW(HANDLE,LPPROCESSENTRY32W);
132 BOOL WINAPI Thread32First(HANDLE,LPTHREADENTRY32);
133 BOOL WINAPI Thread32Next(HANDLE,LPTHREADENTRY32);
134 BOOL WINAPI Toolhelp32ReadProcessMemory(DWORD,LPCVOID,LPVOID,DWORD,LPDWORD);
135 HANDLE WINAPI CreateToolhelp32Snapshot(DWORD,DWORD);
136 
137 /* Cannot use __AW() since there is no A version. */
138 #ifdef UNICODE
139 #define LPMODULEENTRY32 LPMODULEENTRY32W
140 #define LPPROCESSENTRY32 LPPROCESSENTRY32W
141 #define MODULEENTRY32 MODULEENTRY32W
142 #define Module32First Module32FirstW
143 #define Module32Next Module32NextW
144 #define PMODULEENTRY32 PMODULEENTRY32W
145 #define PPROCESSENTRY32 PPROCESSENTRY32W
146 #define PROCESSENTRY32 PROCESSENTRY32W
147 #define Process32First Process32FirstW
148 #define Process32Next Process32NextW
149 #endif /* UNICODE */
150 
151 #ifdef __cplusplus
152 }
153 #endif
154 
155 #endif /* _TLHELP32_H */
156