1 /***********************************************************************\
2 *                               tlhelp32.d                              *
3 *                                                                       *
4 *                       Windows API header module                       *
5 *                                                                       *
6 *                 Translated from MinGW Windows headers                 *
7 *                                                                       *
8 *                       Placed into public domain                       *
9 \***********************************************************************/
10 module win32.tlhelp32;
11 
12 private import win32.windef;
13 
14 enum : uint {
15 	HF32_DEFAULT = 1,
16 	HF32_SHARED
17 }
18 
19 enum : uint {
20 	LF32_FIXED    = 0x1,
21 	LF32_FREE     = 0x2,
22 	LF32_MOVEABLE = 0x4
23 }
24 
25 const MAX_MODULE_NAME32 = 255;
26 
27 enum : uint {
28 	TH32CS_SNAPHEAPLIST = 0x1,
29 	TH32CS_SNAPPROCESS  = 0x2,
30 	TH32CS_SNAPTHREAD   = 0x4,
31 	TH32CS_SNAPMODULE   = 0x8,
32 	TH32CS_SNAPALL      = (TH32CS_SNAPHEAPLIST|TH32CS_SNAPPROCESS|TH32CS_SNAPTHREAD|TH32CS_SNAPMODULE),
33 	TH32CS_INHERIT      = 0x80000000
34 }
35 
36 struct HEAPLIST32 {
37 	DWORD dwSize;
38 	DWORD th32ProcessID;
39 	DWORD th32HeapID;
40 	DWORD dwFlags;
41 } 
42 alias HEAPLIST32* PHEAPLIST32;
43 alias HEAPLIST32* LPHEAPLIST32;
44 
45 struct HEAPENTRY32 {
46 	DWORD dwSize;
47 	HANDLE hHandle;
48 	DWORD dwAddress;
49 	DWORD dwBlockSize;
50 	DWORD dwFlags;
51 	DWORD dwLockCount;
52 	DWORD dwResvd;
53 	DWORD th32ProcessID;
54 	DWORD th32HeapID;
55 }
56 alias HEAPENTRY32* PHEAPENTRY32;
57 alias HEAPENTRY32* LPHEAPENTRY32;
58 
59 struct PROCESSENTRY32W {
60 	DWORD dwSize;
61 	DWORD cntUsage;
62 	DWORD th32ProcessID;
63 	DWORD th32DefaultHeapID;
64 	DWORD th32ModuleID;
65 	DWORD cntThreads;
66 	DWORD th32ParentProcessID;
67 	LONG pcPriClassBase;
68 	DWORD dwFlags;
69 	WCHAR szExeFile[MAX_PATH];
70 }
71 alias PROCESSENTRY32W* PPROCESSENTRY32W;
72 alias PROCESSENTRY32W* LPPROCESSENTRY32W;
73 
74 struct THREADENTRY32 {
75 	DWORD dwSize;
76 	DWORD cntUsage;
77 	DWORD th32ThreadID;
78 	DWORD th32OwnerProcessID;
79 	LONG tpBasePri;
80 	LONG tpDeltaPri;
81 	DWORD dwFlags;
82 }
83 alias THREADENTRY32* PTHREADENTRY32;
84 alias THREADENTRY32* LPTHREADENTRY32;
85 
86 struct MODULEENTRY32W {
87 	DWORD dwSize;
88 	DWORD th32ModuleID;
89 	DWORD th32ProcessID;
90 	DWORD GlblcntUsage;
91 	DWORD ProccntUsage;
92 	BYTE *modBaseAddr;
93 	DWORD modBaseSize;
94 	HMODULE hModule; 
95 	WCHAR szModule[MAX_MODULE_NAME32 + 1];
96 	WCHAR szExePath[MAX_PATH];
97 }
98 alias MODULEENTRY32W* PMODULEENTRY32W;
99 alias MODULEENTRY32W* LPMODULEENTRY32W;
100 
101 version(Unicode) {
102 	alias PROCESSENTRY32W PROCESSENTRY32;
103 	alias PPROCESSENTRY32W PPROCESSENTRY32;
104 	alias LPPROCESSENTRY32W LPPROCESSENTRY32;
105 
106 	alias MODULEENTRY32W MODULEENTRY32;
107 	alias PMODULEENTRY32W PMODULEENTRY32;
108 	alias LPMODULEENTRY32W LPMODULEENTRY32;
109 } else {
110 	struct PROCESSENTRY32 {
111 		DWORD dwSize;
112 		DWORD cntUsage;
113 		DWORD th32ProcessID;
114 		DWORD th32DefaultHeapID;
115 		DWORD th32ModuleID;
116 		DWORD cntThreads;
117 		DWORD th32ParentProcessID;
118 		LONG pcPriClassBase;
119 		DWORD dwFlags;
120 		CHAR  szExeFile[MAX_PATH];
121 	}
122 	alias PROCESSENTRY32* PPROCESSENTRY32;
123 	alias PROCESSENTRY32* LPPROCESSENTRY32;
124 
125 	struct MODULEENTRY32 {
126 		DWORD dwSize;
127 		DWORD th32ModuleID;
128 		DWORD th32ProcessID;
129 		DWORD GlblcntUsage;
130 		DWORD ProccntUsage;
131 		BYTE *modBaseAddr;
132 		DWORD modBaseSize;
133 		HMODULE hModule;
134 		char szModule[MAX_MODULE_NAME32 + 1];
135 		char szExePath[MAX_PATH];
136 	}
137 	alias MODULEENTRY32* PMODULEENTRY32;
138 	alias MODULEENTRY32* LPMODULEENTRY32;
139 }
140 
141 
142 extern(Windows) {
143 	BOOL Heap32First(LPHEAPENTRY32,DWORD,DWORD);
144 	BOOL Heap32ListFirst(HANDLE,LPHEAPLIST32);
145 	BOOL Heap32ListNext(HANDLE,LPHEAPLIST32);
146 	BOOL Heap32Next(LPHEAPENTRY32);
147 	BOOL Thread32First(HANDLE,LPTHREADENTRY32);
148 	BOOL Thread32Next(HANDLE,LPTHREADENTRY32);
149 	BOOL Toolhelp32ReadProcessMemory(DWORD,LPCVOID,LPVOID,DWORD,LPDWORD);
150 	HANDLE CreateToolhelp32Snapshot(DWORD,DWORD);
151 	BOOL Module32FirstW(HANDLE,LPMODULEENTRY32W);
152 	BOOL Module32NextW(HANDLE,LPMODULEENTRY32W);
153 	BOOL Process32FirstW(HANDLE,LPPROCESSENTRY32W);
154 	BOOL Process32NextW(HANDLE,LPPROCESSENTRY32W);
155 }
156 
157 version(Unicode) {
158 	alias Module32FirstW Module32First;
159 	alias Module32NextW Module32Next;
160 	alias Process32FirstW Process32First;
161 	alias Process32NextW Process32Next;
162 } else {
163 	extern(Windows) {
164 		BOOL Module32First(HANDLE,LPMODULEENTRY32);
165 		BOOL Module32Next(HANDLE,LPMODULEENTRY32);
166 		BOOL Process32First(HANDLE,LPPROCESSENTRY32);
167 		BOOL Process32Next(HANDLE,LPPROCESSENTRY32);
168 	}
169 }