1 use crate::ntexapi::SYSTEM_MEMORY_LIST_INFORMATION; 2 use crate::ntmmapi::MMPFN_IDENTITY; 3 use winapi::shared::basetsd::{SIZE_T, ULONG_PTR}; 4 use winapi::shared::ntdef::{CHAR, LONGLONG, PVOID, ULONG, ULONGLONG, WCHAR}; 5 ENUM!{enum PF_BOOT_PHASE_ID { 6 PfKernelInitPhase = 0, 7 PfBootDriverInitPhase = 90, 8 PfSystemDriverInitPhase = 120, 9 PfSessionManagerInitPhase = 150, 10 PfSMRegistryInitPhase = 180, 11 PfVideoInitPhase = 210, 12 PfPostVideoInitPhase = 240, 13 PfBootAcceptedRegistryInitPhase = 270, 14 PfUserShellReadyPhase = 300, 15 PfMaxBootPhaseId = 900, 16 }} 17 ENUM!{enum PF_ENABLE_STATUS { 18 PfSvNotSpecified = 0, 19 PfSvEnabled = 1, 20 PfSvDisabled = 2, 21 PfSvMaxEnableStatus = 3, 22 }} 23 STRUCT!{struct PF_TRACE_LIMITS { 24 MaxNumPages: ULONG, 25 MaxNumSections: ULONG, 26 TimerPeriod: LONGLONG, 27 }} 28 pub type PPF_TRACE_LIMITS = *mut PF_TRACE_LIMITS; 29 STRUCT!{struct PF_SYSTEM_PREFETCH_PARAMETERS { 30 EnableStatus: [PF_ENABLE_STATUS; 2], 31 TraceLimits: [PF_TRACE_LIMITS; 2], 32 MaxNumActiveTraces: ULONG, 33 MaxNumSavedTraces: ULONG, 34 RootDirPath: [WCHAR; 32], 35 HostingApplicationList: [WCHAR; 128], 36 }} 37 pub type PPF_SYSTEM_PREFETCH_PARAMETERS = *mut PF_SYSTEM_PREFETCH_PARAMETERS; 38 pub const PF_BOOT_CONTROL_VERSION: u32 = 1; 39 STRUCT!{struct PF_BOOT_CONTROL { 40 Version: ULONG, 41 DisableBootPrefetching: ULONG, 42 }} 43 pub type PPF_BOOT_CONTROL = *mut PF_BOOT_CONTROL; 44 ENUM!{enum PREFETCHER_INFORMATION_CLASS { 45 PrefetcherRetrieveTrace = 1, 46 PrefetcherSystemParameters = 2, 47 PrefetcherBootPhase = 3, 48 PrefetcherRetrieveBootLoaderTrace = 4, 49 PrefetcherBootControl = 5, 50 }} 51 pub const PREFETCHER_INFORMATION_VERSION: ULONG = 23; 52 pub const PREFETCHER_INFORMATION_MAGIC: ULONG = 0x6b756843; 53 STRUCT!{struct PREFETCHER_INFORMATION { 54 Version: ULONG, 55 Magic: ULONG, 56 PrefetcherInformationClass: PREFETCHER_INFORMATION_CLASS, 57 PrefetcherInformation: PVOID, 58 PrefetcherInformationLength: ULONG, 59 }} 60 pub type PPREFETCHER_INFORMATION = *mut PREFETCHER_INFORMATION; 61 STRUCT!{struct PF_SYSTEM_SUPERFETCH_PARAMETERS { 62 EnabledComponents: ULONG, 63 BootID: ULONG, 64 SavedSectInfoTracesMax: ULONG, 65 SavedPageAccessTracesMax: ULONG, 66 ScenarioPrefetchTimeoutStandby: ULONG, 67 ScenarioPrefetchTimeoutHibernate: ULONG, 68 }} 69 pub type PPF_SYSTEM_SUPERFETCH_PARAMETERS = *mut PF_SYSTEM_SUPERFETCH_PARAMETERS; 70 pub const PF_PFN_PRIO_REQUEST_VERSION: u32 = 1; 71 pub const PF_PFN_PRIO_REQUEST_QUERY_MEMORY_LIST: u32 = 0x1; 72 pub const PF_PFN_PRIO_REQUEST_VALID_FLAGS: u32 = 0x1; 73 STRUCT!{struct PF_PFN_PRIO_REQUEST { 74 Version: ULONG, 75 RequestFlags: ULONG, 76 PfnCount: ULONG_PTR, 77 MemInfo: SYSTEM_MEMORY_LIST_INFORMATION, 78 PageData: [MMPFN_IDENTITY; 256], 79 }} 80 pub type PPF_PFN_PRIO_REQUEST = *mut PF_PFN_PRIO_REQUEST; 81 ENUM!{enum PFS_PRIVATE_PAGE_SOURCE_TYPE { 82 PfsPrivateSourceKernel = 0, 83 PfsPrivateSourceSession = 1, 84 PfsPrivateSourceProcess = 2, 85 PfsPrivateSourceMax = 3, 86 }} 87 UNION!{union PFS_PRIVATE_PAGE_SOURCE_u { 88 SessionId: ULONG, 89 ProcessId: ULONG, 90 }} 91 STRUCT!{struct PFS_PRIVATE_PAGE_SOURCE { 92 Type: PFS_PRIVATE_PAGE_SOURCE_TYPE, 93 u: PFS_PRIVATE_PAGE_SOURCE_u, 94 ImagePathHash: ULONG, 95 UniqueProcessHash: ULONG_PTR, 96 }} 97 UNION!{union PF_PRIVSOURCE_INFO_u { 98 WsSwapPages: ULONG_PTR, 99 SessionPagedPoolPages: ULONG_PTR, 100 StoreSizePages: ULONG_PTR, 101 }} 102 pub type PPFS_PRIVATE_PAGE_SOURCE = *mut PFS_PRIVATE_PAGE_SOURCE; 103 STRUCT!{struct PF_PRIVSOURCE_INFO { 104 DbInfo: PFS_PRIVATE_PAGE_SOURCE, 105 EProcess: PVOID, 106 WsPrivatePages: SIZE_T, 107 TotalPrivatePages: SIZE_T, 108 SessionID: ULONG, 109 ImageName: [CHAR; 16], 110 u: PF_PRIVSOURCE_INFO_u, 111 WsTotalPages: ULONG_PTR, 112 DeepFreezeTimeMs: ULONG, 113 BitFields: ULONG, 114 }} 115 BITFIELD!{PF_PRIVSOURCE_INFO BitFields: ULONG [ 116 ModernApp set_ModernApp[0..1], 117 DeepFrozen set_DeepFrozen[1..2], 118 Foreground set_Foreground[2..3], 119 PerProcessStore set_PerProcessStore[3..4], 120 Spare set_Spare[4..32], 121 ]} 122 pub type PPF_PRIVSOURCE_INFO = *mut PF_PRIVSOURCE_INFO; 123 pub const PF_PRIVSOURCE_QUERY_REQUEST_VERSION: u32 = 3; 124 STRUCT!{struct PF_PRIVSOURCE_QUERY_REQUEST { 125 Version: ULONG, 126 Flags: ULONG, 127 InfoCount: ULONG, 128 InfoArray: [PF_PRIVSOURCE_INFO; 1], 129 }} 130 pub type PPF_PRIVSOURCE_QUERY_REQUEST = *mut PF_PRIVSOURCE_QUERY_REQUEST; 131 ENUM!{enum PF_PHASED_SCENARIO_TYPE { 132 PfScenarioTypeNone = 0, 133 PfScenarioTypeStandby = 1, 134 PfScenarioTypeHibernate = 2, 135 PfScenarioTypeFUS = 3, 136 PfScenarioTypeMax = 4, 137 }} 138 pub const PF_SCENARIO_PHASE_INFO_VERSION: u32 = 4; 139 STRUCT!{struct PF_SCENARIO_PHASE_INFO { 140 Version: ULONG, 141 ScenType: PF_PHASED_SCENARIO_TYPE, 142 PhaseId: ULONG, 143 SequenceNumber: ULONG, 144 Flags: ULONG, 145 FUSUserId: ULONG, 146 }} 147 pub type PPF_SCENARIO_PHASE_INFO = *mut PF_SCENARIO_PHASE_INFO; 148 STRUCT!{struct PF_MEMORY_LIST_NODE { 149 Bitfields: ULONGLONG, 150 StandbyLowPageCount: ULONGLONG, 151 StandbyMediumPageCount: ULONGLONG, 152 StandbyHighPageCount: ULONGLONG, 153 FreePageCount: ULONGLONG, 154 ModifiedPageCount: ULONGLONG, 155 }} 156 BITFIELD!{PF_MEMORY_LIST_NODE Bitfields: ULONGLONG [ 157 Node set_Node[0..8], 158 Spare set_Spare[8..64], 159 ]} 160 pub type PPF_MEMORY_LIST_NODE = *mut PF_MEMORY_LIST_NODE; 161 pub const PF_MEMORY_LIST_INFO_VERSION: u32 = 1; 162 STRUCT!{struct PF_MEMORY_LIST_INFO { 163 Version: ULONG, 164 Size: ULONG, 165 NodeCount: ULONG, 166 Nodes: [PF_MEMORY_LIST_NODE; 1], 167 }} 168 pub type PPF_MEMORY_LIST_INFO = *mut PF_MEMORY_LIST_INFO; 169 STRUCT!{struct PF_PHYSICAL_MEMORY_RANGE { 170 BasePfn: ULONG_PTR, 171 PageCount: ULONG_PTR, 172 }} 173 pub type PPF_PHYSICAL_MEMORY_RANGE = *mut PF_PHYSICAL_MEMORY_RANGE; 174 pub const PF_PHYSICAL_MEMORY_RANGE_INFO_VERSION: u32 = 1; 175 STRUCT!{struct PF_PHYSICAL_MEMORY_RANGE_INFO { 176 Version: ULONG, 177 RangeCount: ULONG, 178 Ranges: [PF_PHYSICAL_MEMORY_RANGE; 1], 179 }} 180 pub type PPF_PHYSICAL_MEMORY_RANGE_INFO = *mut PF_PHYSICAL_MEMORY_RANGE_INFO; 181 pub const PF_REPURPOSED_BY_PREFETCH_INFO_VERSION: u32 = 1; 182 STRUCT!{struct PF_REPURPOSED_BY_PREFETCH_INFO { 183 Version: ULONG, 184 RepurposedByPrefetch: ULONG, 185 }} 186 pub type PPF_REPURPOSED_BY_PREFETCH_INFO = *mut PF_REPURPOSED_BY_PREFETCH_INFO; 187 ENUM!{enum SUPERFETCH_INFORMATION_CLASS { 188 SuperfetchRetrieveTrace = 1, 189 SuperfetchSystemParameters = 2, 190 SuperfetchLogEvent = 3, 191 SuperfetchGenerateTrace = 4, 192 SuperfetchPrefetch = 5, 193 SuperfetchPfnQuery = 6, 194 SuperfetchPfnSetPriority = 7, 195 SuperfetchPrivSourceQuery = 8, 196 SuperfetchSequenceNumberQuery = 9, 197 SuperfetchScenarioPhase = 10, 198 SuperfetchWorkerPriority = 11, 199 SuperfetchScenarioQuery = 12, 200 SuperfetchScenarioPrefetch = 13, 201 SuperfetchRobustnessControl = 14, 202 SuperfetchTimeControl = 15, 203 SuperfetchMemoryListQuery = 16, 204 SuperfetchMemoryRangesQuery = 17, 205 SuperfetchTracingControl = 18, 206 SuperfetchTrimWhileAgingControl = 19, 207 SuperfetchRepurposedByPrefetch = 20, 208 SuperfetchInformationMax = 21, 209 }} 210 pub const SUPERFETCH_INFORMATION_VERSION: ULONG = 45; 211 pub const SUPERFETCH_INFORMATION_MAGIC: ULONG = 0x6b756843; 212 STRUCT!{struct SUPERFETCH_INFORMATION { 213 Version: ULONG, 214 Magic: ULONG, 215 InfoClass: SUPERFETCH_INFORMATION_CLASS, 216 Data: PVOID, 217 Length: ULONG, 218 }} 219 pub type PSUPERFETCH_INFORMATION = *mut SUPERFETCH_INFORMATION; 220