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