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