1use shared::basetsd::{SIZE_T, ULONG_PTR};
8use shared::minwindef::{BOOL, BYTE, DWORD, HMODULE, LPCVOID, LPVOID, MAX_PATH};
9use um::winnt::{CHAR, HANDLE, LONG, WCHAR};
10pub const MAX_MODULE_NAME32: usize = 255;
11extern "system" {
12 pub fn CreateToolhelp32Snapshot(
13 dwFlags: DWORD,
14 th32ProcessID: DWORD,
15 ) -> HANDLE;
16}
17pub const TH32CS_SNAPHEAPLIST: DWORD = 0x00000001;
18pub const TH32CS_SNAPPROCESS: DWORD = 0x00000002;
19pub const TH32CS_SNAPTHREAD: DWORD = 0x00000004;
20pub const TH32CS_SNAPMODULE: DWORD = 0x00000008;
21pub const TH32CS_SNAPMODULE32: DWORD = 0x00000010;
22pub const TH32CS_SNAPALL: DWORD =
23 TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE;
24pub const TH32CS_INHERIT: DWORD = 0x80000000;
25STRUCT!{struct HEAPLIST32 {
26 dwSize: SIZE_T,
27 th32ProcessID: DWORD,
28 th32HeapID: ULONG_PTR,
29 dwFlags: DWORD,
30}}
31pub type PHEAPLIST32 = *mut HEAPLIST32;
32pub type LPHEAPLIST32 = *mut HEAPLIST32;
33pub const HF32_DEFAULT: DWORD = 1;
34pub const HF32_SHARED: DWORD = 2;
35extern "system" {
36 pub fn Heap32ListFirst(
37 hSnapshot: HANDLE,
38 lphl: LPHEAPLIST32,
39 ) -> BOOL;
40 pub fn Heap32ListNext(
41 hSnapshot: HANDLE,
42 lphl: LPHEAPLIST32,
43 ) -> BOOL;
44}
45STRUCT!{struct HEAPENTRY32 {
46 dwSize: SIZE_T,
47 hHandle: HANDLE,
48 dwAddress: ULONG_PTR,
49 dwBlockSize: SIZE_T,
50 dwFlags: DWORD,
51 dwLockCount: DWORD,
52 dwResvd: DWORD,
53 th32ProcessID: DWORD,
54 th32HeapID: ULONG_PTR,
55}}
56pub type PHEAPENTRY32 = *mut HEAPENTRY32;
57pub type LPHEAPENTRY32 = *mut HEAPENTRY32;
58pub const LF32_FIXED: DWORD = 0x00000001;
59pub const LF32_FREE: DWORD = 0x00000002;
60pub const LF32_MOVEABLE: DWORD = 0x00000004;
61extern "system" {
62 pub fn Heap32First(
63 lphe: LPHEAPENTRY32,
64 th32ProcessID: DWORD,
65 th32HeapID: ULONG_PTR,
66 ) -> BOOL;
67 pub fn Heap32Next(
68 lphe: LPHEAPENTRY32,
69 ) -> BOOL;
70 pub fn Toolhelp32ReadProcessMemory(
71 th32ProcessID: DWORD,
72 lpBaseAddress: LPCVOID,
73 lpBuffer: LPVOID,
74 cbRead: SIZE_T,
75 lpNumberOfBytesRead: *mut SIZE_T,
76 ) -> BOOL;
77}
78STRUCT!{struct PROCESSENTRY32W {
79 dwSize: DWORD,
80 cntUsage: DWORD,
81 th32ProcessID: DWORD,
82 th32DefaultHeapID: ULONG_PTR,
83 th32ModuleID: DWORD,
84 cntThreads: DWORD,
85 th32ParentProcessID: DWORD,
86 pcPriClassBase: LONG,
87 dwFlags: DWORD,
88 szExeFile: [WCHAR; MAX_PATH],
89}}
90pub type PPROCESSENTRY32W = *mut PROCESSENTRY32W;
91pub type LPPROCESSENTRY32W = *mut PROCESSENTRY32W;
92extern "system" {
93 pub fn Process32FirstW(
94 hSnapshot: HANDLE,
95 lppe: LPPROCESSENTRY32W,
96 ) -> BOOL;
97 pub fn Process32NextW(
98 hSnapshot: HANDLE,
99 lppe: LPPROCESSENTRY32W,
100 ) -> BOOL;
101}
102STRUCT!{struct PROCESSENTRY32 {
103 dwSize: DWORD,
104 cntUsage: DWORD,
105 th32ProcessID: DWORD,
106 th32DefaultHeapID: ULONG_PTR,
107 th32ModuleID: DWORD,
108 cntThreads: DWORD,
109 th32ParentProcessID: DWORD,
110 pcPriClassBase: LONG,
111 dwFlags: DWORD,
112 szExeFile: [CHAR; MAX_PATH],
113}}
114pub type PPROCESSENTRY32 = *mut PROCESSENTRY32;
115pub type LPPROCESSENTRY32 = *mut PROCESSENTRY32;
116extern "system" {
117 pub fn Process32First(
118 hSnapshot: HANDLE,
119 lppe: LPPROCESSENTRY32,
120 ) -> BOOL;
121 pub fn Process32Next(
122 hSnapshot: HANDLE,
123 lppe: LPPROCESSENTRY32,
124 ) -> BOOL;
125}
126STRUCT!{struct THREADENTRY32 {
127 dwSize: DWORD,
128 cntUsage: DWORD,
129 th32ThreadID: DWORD,
130 th32OwnerProcessID: DWORD,
131 tpBasePri: LONG,
132 tpDeltaPri: LONG,
133 dwFlags: DWORD,
134}}
135pub type PTHREADENTRY32 = *mut THREADENTRY32;
136pub type LPTHREADENTRY32 = *mut THREADENTRY32;
137extern "system" {
138 pub fn Thread32First(
139 hSnapshot: HANDLE,
140 lpte: LPTHREADENTRY32,
141 ) -> BOOL;
142 pub fn Thread32Next(
143 hSnapshot: HANDLE,
144 lpte: LPTHREADENTRY32,
145 ) -> BOOL;
146}
147STRUCT!{struct MODULEENTRY32W {
148 dwSize: DWORD,
149 th32ModuleID: DWORD,
150 th32ProcessID: DWORD,
151 GlblcntUsage: DWORD,
152 ProccntUsage: DWORD,
153 modBaseAddr: *mut BYTE,
154 modBaseSize: DWORD,
155 hModule: HMODULE,
156 szModule: [WCHAR; MAX_MODULE_NAME32 + 1],
157 szExePath: [WCHAR; MAX_PATH],
158}}
159pub type PMODULEENTRY32W = *mut MODULEENTRY32W;
160pub type LPMODULEENTRY32W = *mut MODULEENTRY32W;
161extern "system" {
162 pub fn Module32FirstW(
163 hSnapshot: HANDLE,
164 lpme: LPMODULEENTRY32W,
165 ) -> BOOL;
166 pub fn Module32NextW(
167 hSnapshot: HANDLE,
168 lpme: LPMODULEENTRY32W,
169 ) -> BOOL;
170}
171STRUCT!{struct MODULEENTRY32 {
172 dwSize: DWORD,
173 th32ModuleID: DWORD,
174 th32ProcessID: DWORD,
175 GlblcntUsage: DWORD,
176 ProccntUsage: DWORD,
177 modBaseAddr: *mut BYTE,
178 modBaseSize: DWORD,
179 hModule: HMODULE,
180 szModule: [CHAR; MAX_MODULE_NAME32 + 1],
181 szExePath: [CHAR; MAX_PATH],
182}}
183pub type PMODULEENTRY32 = *mut MODULEENTRY32;
184pub type LPMODULEENTRY32 = *mut MODULEENTRY32;
185extern "system" {
186 pub fn Module32First(
187 hSnapshot: HANDLE,
188 lpme: LPMODULEENTRY32,
189 ) -> BOOL;
190 pub fn Module32Next(
191 hSnapshot: HANDLE,
192 lpme: LPMODULEENTRY32,
193 ) -> BOOL;
194}