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