1 // Copyright © 2015-2017 winapi-rs developers
2 // Licensed under the Apache License, Version 2.0
3 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
4 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
5 // All files in the project carrying such notice may not be copied, modified, or distributed
6 // except according to those terms.
7 //! WIN32 tool help functions, types, and definitions
8 use shared
::basetsd
::{SIZE_T, ULONG_PTR}
;
9 use shared
::minwindef
::{BOOL, BYTE, DWORD, HMODULE, LPCVOID, LPVOID, MAX_PATH}
;
10 use um
::winnt
::{CHAR, HANDLE, LONG, WCHAR}
;
11 pub const MAX_MODULE_NAME32
: usize = 255;
13 pub fn CreateToolhelp32Snapshot(
18 pub const TH32CS_SNAPHEAPLIST
: DWORD
= 0x00000001;
19 pub const TH32CS_SNAPPROCESS
: DWORD
= 0x00000002;
20 pub const TH32CS_SNAPTHREAD
: DWORD
= 0x00000004;
21 pub const TH32CS_SNAPMODULE
: DWORD
= 0x00000008;
22 pub const TH32CS_SNAPMODULE32
: DWORD
= 0x00000010;
23 pub const TH32CS_SNAPALL
: DWORD
=
24 (TH32CS_SNAPHEAPLIST
| TH32CS_SNAPPROCESS
| TH32CS_SNAPTHREAD
| TH32CS_SNAPMODULE
);
25 pub const TH32CS_INHERIT
: DWORD
= 0x80000000;
26 STRUCT
!{struct HEAPLIST32
{
29 th32HeapID
: ULONG_PTR
,
32 pub type PHEAPLIST32
= *mut HEAPLIST32
;
33 pub type LPHEAPLIST32
= *mut HEAPLIST32
;
34 pub const HF32_DEFAULT
: DWORD
= 1;
35 pub const HF32_SHARED
: DWORD
= 2;
37 pub fn Heap32ListFirst(
41 pub fn Heap32ListNext(
46 STRUCT
!{struct HEAPENTRY32
{
55 th32HeapID
: ULONG_PTR
,
57 pub type PHEAPENTRY32
= *mut HEAPENTRY32
;
58 pub type LPHEAPENTRY32
= *mut HEAPENTRY32
;
59 pub const LF32_FIXED
: DWORD
= 0x00000001;
60 pub const LF32_FREE
: DWORD
= 0x00000002;
61 pub const LF32_MOVEABLE
: DWORD
= 0x00000004;
66 th32HeapID
: ULONG_PTR
,
71 pub fn Toolhelp32ReadProcessMemory(
73 lpBaseAddress
: LPCVOID
,
76 lpNumberOfBytesRead
: *mut SIZE_T
,
79 STRUCT
!{struct PROCESSENTRY32W
{
83 th32DefaultHeapID
: ULONG_PTR
,
86 th32ParentProcessID
: DWORD
,
89 szExeFile
: [WCHAR
; MAX_PATH
],
91 pub type PPROCESSENTRY32W
= *mut PROCESSENTRY32W
;
92 pub type LPPROCESSENTRY32W
= *mut PROCESSENTRY32W
;
94 pub fn Process32FirstW(
96 lppe
: LPPROCESSENTRY32W
,
98 pub fn Process32NextW(
100 lppe
: LPPROCESSENTRY32W
,
103 STRUCT
!{struct PROCESSENTRY32
{
106 th32ProcessID
: DWORD
,
107 th32DefaultHeapID
: ULONG_PTR
,
110 th32ParentProcessID
: DWORD
,
111 pcPriClassBase
: LONG
,
113 szExeFile
: [CHAR
; MAX_PATH
],
115 pub type PPROCESSENTRY32
= *mut PROCESSENTRY32
;
116 pub type LPPROCESSENTRY32
= *mut PROCESSENTRY32
;
118 pub fn Process32First(
120 lppe
: LPPROCESSENTRY32
,
122 pub fn Process32Next(
124 lppe
: LPPROCESSENTRY32
,
127 STRUCT
!{struct THREADENTRY32
{
131 th32OwnerProcessID
: DWORD
,
136 pub type PTHREADENTRY32
= *mut THREADENTRY32
;
137 pub type LPTHREADENTRY32
= *mut THREADENTRY32
;
139 pub fn Thread32First(
141 lpte
: LPTHREADENTRY32
,
145 lpte
: LPTHREADENTRY32
,
148 STRUCT
!{struct MODULEENTRY32W
{
151 th32ProcessID
: DWORD
,
154 modBaseAddr
: *mut BYTE
,
157 szModule
: [WCHAR
; MAX_MODULE_NAME32
+ 1],
158 szExePath
: [WCHAR
; MAX_PATH
],
160 pub type PMODULEENTRY32W
= *mut MODULEENTRY32W
;
161 pub type LPMODULEENTRY32W
= *mut MODULEENTRY32W
;
163 pub fn Module32FirstW(
165 lpme
: LPMODULEENTRY32W
,
167 pub fn Module32NextW(
169 lpme
: LPMODULEENTRY32W
,
172 STRUCT
!{struct MODULEENTRY32
{
175 th32ProcessID
: DWORD
,
178 modBaseAddr
: *mut BYTE
,
181 szModule
: [CHAR
; MAX_MODULE_NAME32
+ 1],
182 szExePath
: [CHAR
; MAX_PATH
],
184 pub type PMODULEENTRY32
= *mut MODULEENTRY32
;
185 pub type LPMODULEENTRY32
= *mut MODULEENTRY32
;
187 pub fn Module32First(
189 lpme
: LPMODULEENTRY32
,
193 lpme
: LPMODULEENTRY32
,