use crate::ntexapi::SYSTEM_MEMORY_LIST_INFORMATION; use crate::ntmmapi::MMPFN_IDENTITY; use winapi::shared::basetsd::{SIZE_T, ULONG_PTR}; use winapi::shared::ntdef::{CHAR, LONGLONG, PVOID, ULONG, ULONGLONG, WCHAR}; ENUM!{enum PF_BOOT_PHASE_ID { PfKernelInitPhase = 0, PfBootDriverInitPhase = 90, PfSystemDriverInitPhase = 120, PfSessionManagerInitPhase = 150, PfSMRegistryInitPhase = 180, PfVideoInitPhase = 210, PfPostVideoInitPhase = 240, PfBootAcceptedRegistryInitPhase = 270, PfUserShellReadyPhase = 300, PfMaxBootPhaseId = 900, }} ENUM!{enum PF_ENABLE_STATUS { PfSvNotSpecified = 0, PfSvEnabled = 1, PfSvDisabled = 2, PfSvMaxEnableStatus = 3, }} STRUCT!{struct PF_TRACE_LIMITS { MaxNumPages: ULONG, MaxNumSections: ULONG, TimerPeriod: LONGLONG, }} pub type PPF_TRACE_LIMITS = *mut PF_TRACE_LIMITS; STRUCT!{struct PF_SYSTEM_PREFETCH_PARAMETERS { EnableStatus: [PF_ENABLE_STATUS; 2], TraceLimits: [PF_TRACE_LIMITS; 2], MaxNumActiveTraces: ULONG, MaxNumSavedTraces: ULONG, RootDirPath: [WCHAR; 32], HostingApplicationList: [WCHAR; 128], }} pub type PPF_SYSTEM_PREFETCH_PARAMETERS = *mut PF_SYSTEM_PREFETCH_PARAMETERS; pub const PF_BOOT_CONTROL_VERSION: u32 = 1; STRUCT!{struct PF_BOOT_CONTROL { Version: ULONG, DisableBootPrefetching: ULONG, }} pub type PPF_BOOT_CONTROL = *mut PF_BOOT_CONTROL; ENUM!{enum PREFETCHER_INFORMATION_CLASS { PrefetcherRetrieveTrace = 1, PrefetcherSystemParameters = 2, PrefetcherBootPhase = 3, PrefetcherRetrieveBootLoaderTrace = 4, PrefetcherBootControl = 5, }} pub const PREFETCHER_INFORMATION_VERSION: ULONG = 23; pub const PREFETCHER_INFORMATION_MAGIC: ULONG = 0x6b756843; STRUCT!{struct PREFETCHER_INFORMATION { Version: ULONG, Magic: ULONG, PrefetcherInformationClass: PREFETCHER_INFORMATION_CLASS, PrefetcherInformation: PVOID, PrefetcherInformationLength: ULONG, }} pub type PPREFETCHER_INFORMATION = *mut PREFETCHER_INFORMATION; STRUCT!{struct PF_SYSTEM_SUPERFETCH_PARAMETERS { EnabledComponents: ULONG, BootID: ULONG, SavedSectInfoTracesMax: ULONG, SavedPageAccessTracesMax: ULONG, ScenarioPrefetchTimeoutStandby: ULONG, ScenarioPrefetchTimeoutHibernate: ULONG, }} pub type PPF_SYSTEM_SUPERFETCH_PARAMETERS = *mut PF_SYSTEM_SUPERFETCH_PARAMETERS; pub const PF_PFN_PRIO_REQUEST_VERSION: u32 = 1; pub const PF_PFN_PRIO_REQUEST_QUERY_MEMORY_LIST: u32 = 0x1; pub const PF_PFN_PRIO_REQUEST_VALID_FLAGS: u32 = 0x1; STRUCT!{struct PF_PFN_PRIO_REQUEST { Version: ULONG, RequestFlags: ULONG, PfnCount: ULONG_PTR, MemInfo: SYSTEM_MEMORY_LIST_INFORMATION, PageData: [MMPFN_IDENTITY; 256], }} pub type PPF_PFN_PRIO_REQUEST = *mut PF_PFN_PRIO_REQUEST; ENUM!{enum PFS_PRIVATE_PAGE_SOURCE_TYPE { PfsPrivateSourceKernel = 0, PfsPrivateSourceSession = 1, PfsPrivateSourceProcess = 2, PfsPrivateSourceMax = 3, }} UNION!{union PFS_PRIVATE_PAGE_SOURCE_u { SessionId: ULONG, ProcessId: ULONG, }} STRUCT!{struct PFS_PRIVATE_PAGE_SOURCE { Type: PFS_PRIVATE_PAGE_SOURCE_TYPE, u: PFS_PRIVATE_PAGE_SOURCE_u, ImagePathHash: ULONG, UniqueProcessHash: ULONG_PTR, }} UNION!{union PF_PRIVSOURCE_INFO_u { WsSwapPages: ULONG_PTR, SessionPagedPoolPages: ULONG_PTR, StoreSizePages: ULONG_PTR, }} pub type PPFS_PRIVATE_PAGE_SOURCE = *mut PFS_PRIVATE_PAGE_SOURCE; STRUCT!{struct PF_PRIVSOURCE_INFO { DbInfo: PFS_PRIVATE_PAGE_SOURCE, EProcess: PVOID, WsPrivatePages: SIZE_T, TotalPrivatePages: SIZE_T, SessionID: ULONG, ImageName: [CHAR; 16], u: PF_PRIVSOURCE_INFO_u, WsTotalPages: ULONG_PTR, DeepFreezeTimeMs: ULONG, BitFields: ULONG, }} BITFIELD!{PF_PRIVSOURCE_INFO BitFields: ULONG [ ModernApp set_ModernApp[0..1], DeepFrozen set_DeepFrozen[1..2], Foreground set_Foreground[2..3], PerProcessStore set_PerProcessStore[3..4], Spare set_Spare[4..32], ]} pub type PPF_PRIVSOURCE_INFO = *mut PF_PRIVSOURCE_INFO; pub const PF_PRIVSOURCE_QUERY_REQUEST_VERSION: u32 = 3; STRUCT!{struct PF_PRIVSOURCE_QUERY_REQUEST { Version: ULONG, Flags: ULONG, InfoCount: ULONG, InfoArray: [PF_PRIVSOURCE_INFO; 1], }} pub type PPF_PRIVSOURCE_QUERY_REQUEST = *mut PF_PRIVSOURCE_QUERY_REQUEST; ENUM!{enum PF_PHASED_SCENARIO_TYPE { PfScenarioTypeNone = 0, PfScenarioTypeStandby = 1, PfScenarioTypeHibernate = 2, PfScenarioTypeFUS = 3, PfScenarioTypeMax = 4, }} pub const PF_SCENARIO_PHASE_INFO_VERSION: u32 = 4; STRUCT!{struct PF_SCENARIO_PHASE_INFO { Version: ULONG, ScenType: PF_PHASED_SCENARIO_TYPE, PhaseId: ULONG, SequenceNumber: ULONG, Flags: ULONG, FUSUserId: ULONG, }} pub type PPF_SCENARIO_PHASE_INFO = *mut PF_SCENARIO_PHASE_INFO; STRUCT!{struct PF_MEMORY_LIST_NODE { Bitfields: ULONGLONG, StandbyLowPageCount: ULONGLONG, StandbyMediumPageCount: ULONGLONG, StandbyHighPageCount: ULONGLONG, FreePageCount: ULONGLONG, ModifiedPageCount: ULONGLONG, }} BITFIELD!{PF_MEMORY_LIST_NODE Bitfields: ULONGLONG [ Node set_Node[0..8], Spare set_Spare[8..64], ]} pub type PPF_MEMORY_LIST_NODE = *mut PF_MEMORY_LIST_NODE; pub const PF_MEMORY_LIST_INFO_VERSION: u32 = 1; STRUCT!{struct PF_MEMORY_LIST_INFO { Version: ULONG, Size: ULONG, NodeCount: ULONG, Nodes: [PF_MEMORY_LIST_NODE; 1], }} pub type PPF_MEMORY_LIST_INFO = *mut PF_MEMORY_LIST_INFO; STRUCT!{struct PF_PHYSICAL_MEMORY_RANGE { BasePfn: ULONG_PTR, PageCount: ULONG_PTR, }} pub type PPF_PHYSICAL_MEMORY_RANGE = *mut PF_PHYSICAL_MEMORY_RANGE; pub const PF_PHYSICAL_MEMORY_RANGE_INFO_VERSION: u32 = 1; STRUCT!{struct PF_PHYSICAL_MEMORY_RANGE_INFO { Version: ULONG, RangeCount: ULONG, Ranges: [PF_PHYSICAL_MEMORY_RANGE; 1], }} pub type PPF_PHYSICAL_MEMORY_RANGE_INFO = *mut PF_PHYSICAL_MEMORY_RANGE_INFO; pub const PF_REPURPOSED_BY_PREFETCH_INFO_VERSION: u32 = 1; STRUCT!{struct PF_REPURPOSED_BY_PREFETCH_INFO { Version: ULONG, RepurposedByPrefetch: ULONG, }} pub type PPF_REPURPOSED_BY_PREFETCH_INFO = *mut PF_REPURPOSED_BY_PREFETCH_INFO; ENUM!{enum SUPERFETCH_INFORMATION_CLASS { SuperfetchRetrieveTrace = 1, SuperfetchSystemParameters = 2, SuperfetchLogEvent = 3, SuperfetchGenerateTrace = 4, SuperfetchPrefetch = 5, SuperfetchPfnQuery = 6, SuperfetchPfnSetPriority = 7, SuperfetchPrivSourceQuery = 8, SuperfetchSequenceNumberQuery = 9, SuperfetchScenarioPhase = 10, SuperfetchWorkerPriority = 11, SuperfetchScenarioQuery = 12, SuperfetchScenarioPrefetch = 13, SuperfetchRobustnessControl = 14, SuperfetchTimeControl = 15, SuperfetchMemoryListQuery = 16, SuperfetchMemoryRangesQuery = 17, SuperfetchTracingControl = 18, SuperfetchTrimWhileAgingControl = 19, SuperfetchRepurposedByPrefetch = 20, SuperfetchInformationMax = 21, }} pub const SUPERFETCH_INFORMATION_VERSION: ULONG = 45; pub const SUPERFETCH_INFORMATION_MAGIC: ULONG = 0x6b756843; STRUCT!{struct SUPERFETCH_INFORMATION { Version: ULONG, Magic: ULONG, InfoClass: SUPERFETCH_INFORMATION_CLASS, Data: PVOID, Length: ULONG, }} pub type PSUPERFETCH_INFORMATION = *mut SUPERFETCH_INFORMATION;