1 // Copyright © 2015, skdltmxn
2 // Licensed under the MIT License <LICENSE.md>
3 //! API Prototypes and Definitions for PSAPI.DLL
4 pub const LIST_MODULES_DEFAULT: ::DWORD = 0x0;
5 pub const LIST_MODULES_32BIT: ::DWORD = 0x01;
6 pub const LIST_MODULES_64BIT: ::DWORD = 0x02;
7 pub const LIST_MODULES_ALL: ::DWORD = LIST_MODULES_32BIT | LIST_MODULES_64BIT;
8 STRUCT!{struct MODULEINFO {
9     lpBaseOfDll: ::LPVOID,
10     SizeOfImage: ::DWORD,
11     EntryPoint: ::LPVOID,
12 }}
13 pub type LPMODULEINFO = *mut MODULEINFO;
14 STRUCT!{struct PSAPI_WORKING_SET_BLOCK {
15     Flags: ::ULONG_PTR,
16     BitFields: ::ULONG_PTR,
17 }}
18 #[cfg(target_arch="x86")]
19 BITFIELD!(PSAPI_WORKING_SET_BLOCK BitFields: ::ULONG_PTR [
20     Protection set_Protection[0..5],
21     ShareCount set_ShareCount[5..8],
22     Shared set_Shared[8..9],
23     Reserved set_Reserved[9..12],
24     VirtualPage set_VirtualPage[12..32],
25 ]);
26 #[cfg(target_arch="x86_64")]
27 BITFIELD!(PSAPI_WORKING_SET_BLOCK BitFields: ::ULONG_PTR [
28     Protection set_Protection[0..5],
29     ShareCount set_ShareCount[5..8],
30     Shared set_Shared[8..9],
31     Reserved set_Reserved[9..12],
32     VirtualPage set_VirtualPage[12..64],
33 ]);
34 pub type PPSAPI_WORKING_SET_BLOCK = *mut PSAPI_WORKING_SET_BLOCK;
35 STRUCT!{struct PSAPI_WORKING_SET_INFORMATION {
36     NumberOfEntries: ::ULONG_PTR,
37     WorkingSetInfo: [PSAPI_WORKING_SET_BLOCK; 1],
38 }}
39 pub type PPSAPI_WORKING_SET_INFORMATION = *mut PSAPI_WORKING_SET_INFORMATION;
40 STRUCT!{struct PSAPI_WORKING_SET_EX_BLOCK_Invalid {
41     BitFields: ::ULONG_PTR,
42 }}
43 #[cfg(target_arch="x86")]
44 BITFIELD!(PSAPI_WORKING_SET_EX_BLOCK_Invalid BitFields: ::ULONG_PTR [
45     Valid set_Valid[0..1],
46     Reserved0 set_Reserved0[1..15],
47     Shared set_Shared[15..16],
48     Reserved1 set_Reserved1[16..31],
49     Bad set_Bad[31..32],
50 ]);
51 #[cfg(target_arch="x86_64")]
52 BITFIELD!(PSAPI_WORKING_SET_EX_BLOCK_Invalid BitFields: ::ULONG_PTR [
53     Valid set_Valid[0..1],
54     Reserved0 set_Reserved0[1..15],
55     Shared set_Shared[15..16],
56     Reserved1 set_Reserved1[16..31],
57     Bad set_Bad[31..32],
58     ReservedUlong set_ReservedUlong[32..64],
59 ]);
60 STRUCT!{struct PSAPI_WORKING_SET_EX_BLOCK {
61     Flags: ::ULONG_PTR,
62     BitFields: ::ULONG_PTR,
63 }}
64 #[cfg(target_arch="x86")]
65 BITFIELD!(PSAPI_WORKING_SET_EX_BLOCK BitFields: ::ULONG_PTR [
66     Valid set_Valid[0..1],
67     ShareCount set_ShareCount[1..4],
68     Win32Protection set_Win32Protection[4..15],
69     Shared set_Shared[15..16],
70     Node set_Node[16..22],
71     Locked set_Locked[22..23],
72     LargePage set_LargePage[23..24],
73     Reserved set_Reserved[24..31],
74     Bad set_Bad[31..32],
75 ]);
76 #[cfg(target_arch="x86_64")]
77 BITFIELD!(PSAPI_WORKING_SET_EX_BLOCK BitFields: ::ULONG_PTR [
78     Valid set_Valid[0..1],
79     ShareCount set_ShareCount[1..4],
80     Win32Protection set_Win32Protection[4..15],
81     Shared set_Shared[15..16],
82     Node set_Node[16..22],
83     Locked set_Locked[22..23],
84     LargePage set_LargePage[23..24],
85     Reserved set_Reserved[24..31],
86     Bad set_Bad[31..32],
87     ReservedUlong set_ReservedUlong[32..64],
88 ]);
89 UNION!(
90     PSAPI_WORKING_SET_EX_BLOCK, BitFields, Invalid, Invalid_mut, PSAPI_WORKING_SET_EX_BLOCK_Invalid
91 );
92 pub type PPSAPI_WORKING_SET_EX_BLOCK = *mut PSAPI_WORKING_SET_EX_BLOCK;
93 STRUCT!{struct PSAPI_WORKING_SET_EX_INFORMATION {
94     VirtualAddress: ::PVOID,
95     VirtualAttributes: PSAPI_WORKING_SET_EX_BLOCK,
96 }}
97 pub type PPSAPI_WORKING_SET_EX_INFORMATION = *mut PSAPI_WORKING_SET_EX_INFORMATION;
98 STRUCT!{struct PSAPI_WS_WATCH_INFORMATION {
99     FaultingPc: ::LPVOID,
100     FaultingVa: ::LPVOID,
101 }}
102 pub type PPSAPI_WS_WATCH_INFORMATION = *mut PSAPI_WS_WATCH_INFORMATION;
103 STRUCT!{struct PSAPI_WS_WATCH_INFORMATION_EX {
104     BasicInfo: PSAPI_WS_WATCH_INFORMATION,
105     FaultingThreadId: ::ULONG_PTR,
106     Flags: ::ULONG_PTR,
107 }}
108 pub type PPSAPI_WS_WATCH_INFORMATION_EX = *mut PSAPI_WS_WATCH_INFORMATION_EX;
109 STRUCT!{struct PROCESS_MEMORY_COUNTERS {
110     cb: ::DWORD,
111     PageFaultCount: ::DWORD,
112     PeakWorkingSetSize: ::SIZE_T,
113     WorkingSetSize: ::SIZE_T,
114     QuotaPeakPagedPoolUsage: ::SIZE_T,
115     QuotaPagedPoolUsage: ::SIZE_T,
116     QuotaPeakNonPagedPoolUsage: ::SIZE_T,
117     QuotaNonPagedPoolUsage: ::SIZE_T,
118     PagefileUsage: ::SIZE_T,
119     PeakPagefileUsage: ::SIZE_T,
120 }}
121 pub type PPROCESS_MEMORY_COUNTERS = *mut PROCESS_MEMORY_COUNTERS;
122 STRUCT!{struct PROCESS_MEMORY_COUNTERS_EX {
123     cb: ::DWORD,
124     PageFaultCount: ::DWORD,
125     PeakWorkingSetSize: ::SIZE_T,
126     WorkingSetSize: ::SIZE_T,
127     QuotaPeakPagedPoolUsage: ::SIZE_T,
128     QuotaPagedPoolUsage: ::SIZE_T,
129     QuotaPeakNonPagedPoolUsage: ::SIZE_T,
130     QuotaNonPagedPoolUsage: ::SIZE_T,
131     PagefileUsage: ::SIZE_T,
132     PeakPagefileUsage: ::SIZE_T,
133     PrivateUsage: ::SIZE_T,
134 }}
135 pub type PPROCESS_MEMORY_COUNTERS_EX = *mut PROCESS_MEMORY_COUNTERS_EX;
136 STRUCT!{struct PERFORMANCE_INFORMATION {
137     cb: ::DWORD,
138     CommitTotal: ::SIZE_T,
139     CommitLimit: ::SIZE_T,
140     CommitPeak: ::SIZE_T,
141     PhysicalTotal: ::SIZE_T,
142     PhysicalAvailable: ::SIZE_T,
143     SystemCache: ::SIZE_T,
144     KernelTotal: ::SIZE_T,
145     KernelPaged: ::SIZE_T,
146     KernelNonpaged: ::SIZE_T,
147     PageSize: ::SIZE_T,
148     HandleCount: ::DWORD,
149     ProcessCount: ::DWORD,
150     ThreadCount: ::DWORD,
151 }}
152 pub type PPERFORMANCE_INFORMATION = *mut PERFORMANCE_INFORMATION;
153 STRUCT!{struct ENUM_PAGE_FILE_INFORMATION {
154     cb: ::DWORD,
155     Reserved: ::DWORD,
156     TotalSize: ::SIZE_T,
157     TotalInUse: ::SIZE_T,
158     PeakUsage: ::SIZE_T,
159 }}
160 pub type PENUM_PAGE_FILE_INFORMATION = *mut ENUM_PAGE_FILE_INFORMATION;
161 pub type PENUM_PAGE_FILE_CALLBACKA = Option<unsafe extern "system" fn(
162     pContext: ::LPVOID, pPageFileInfo: PENUM_PAGE_FILE_INFORMATION, lpFilename: ::LPCSTR,
163 ) -> ::BOOL>;
164 pub type PENUM_PAGE_FILE_CALLBACKW = Option<unsafe extern "system" fn(
165     pContext: ::LPVOID, pPageFileInfo: PENUM_PAGE_FILE_INFORMATION, lpFilename: ::LPCWSTR,
166 ) -> ::BOOL>;
167