winapi_ui_automation/um/
tlhelp32.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6//! WIN32 tool help functions, types, and definitions
7use 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}