use winapi::shared::ntdef::{BOOLEAN, NTSTATUS, PVOID, ULONG}; pub const LOW_PRIORITY: u32 = 0; pub const LOW_REALTIME_PRIORITY: u32 = 16; pub const HIGH_PRIORITY: u32 = 31; pub const MAXIMUM_PRIORITY: u32 = 32; ENUM!{enum KTHREAD_STATE { Initialized = 0, Ready = 1, Running = 2, Standby = 3, Terminated = 4, Waiting = 5, Transition = 6, DeferredReady = 7, GateWaitObsolete = 8, WaitingForProcessInSwap = 9, MaximumThreadState = 10, }} pub type PKTHREAD_STATE = *mut KTHREAD_STATE; ENUM!{enum KHETERO_CPU_POLICY { KHeteroCpuPolicyAll = 0, KHeteroCpuPolicyLarge = 1, KHeteroCpuPolicyLargeOrIdle = 2, KHeteroCpuPolicySmall = 3, KHeteroCpuPolicySmallOrIdle = 4, KHeteroCpuPolicyDynamic = 5, KHeteroCpuPolicyStaticMax = 6, KHeteroCpuPolicyBiasedSmall = 7, KHeteroCpuPolicyBiasedLarge = 8, KHeteroCpuPolicyDefault = 9, KHeteroCpuPolicyMax = 10, }} pub type PKHETERO_CPU_POLICY = *mut KHETERO_CPU_POLICY; ENUM!{enum KWAIT_REASON { Executive = 0, FreePage = 1, PageIn = 2, PoolAllocation = 3, DelayExecution = 4, Suspended = 5, UserRequest = 6, WrExecutive = 7, WrFreePage = 8, WrPageIn = 9, WrPoolAllocation = 10, WrDelayExecution = 11, WrSuspended = 12, WrUserRequest = 13, WrEventPair = 14, WrQueue = 15, WrLpcReceive = 16, WrLpcReply = 17, WrVirtualMemory = 18, WrPageOut = 19, WrRendezvous = 20, WrKeyedEvent = 21, WrTerminated = 22, WrProcessInSwap = 23, WrCpuRateControl = 24, WrCalloutStack = 25, WrKernel = 26, WrResource = 27, WrPushLock = 28, WrMutex = 29, WrQuantumEnd = 30, WrDispatchInt = 31, WrPreempted = 32, WrYieldExecution = 33, WrFastMutex = 34, WrGuardedMutex = 35, WrRundown = 36, WrAlertByThreadId = 37, WrDeferredPreempt = 38, MaximumWaitReason = 39, }} pub type PKWAIT_REASON = *mut KWAIT_REASON; ENUM!{enum KPROFILE_SOURCE { ProfileTime = 0, ProfileAlignmentFixup = 1, ProfileTotalIssues = 2, ProfilePipelineDry = 3, ProfileLoadInstructions = 4, ProfilePipelineFrozen = 5, ProfileBranchInstructions = 6, ProfileTotalNonissues = 7, ProfileDcacheMisses = 8, ProfileIcacheMisses = 9, ProfileCacheMisses = 10, ProfileBranchMispredictions = 11, ProfileStoreInstructions = 12, ProfileFpInstructions = 13, ProfileIntegerInstructions = 14, Profile2Issue = 15, Profile3Issue = 16, Profile4Issue = 17, ProfileSpecialInstructions = 18, ProfileTotalCycles = 19, ProfileIcacheIssues = 20, ProfileDcacheAccesses = 21, ProfileMemoryBarrierCycles = 22, ProfileLoadLinkedIssues = 23, ProfileMaximum = 24, }} EXTERN!{extern "system" { fn NtCallbackReturn( OutputBuffer: PVOID, OutputLength: ULONG, Status: NTSTATUS, ) -> NTSTATUS; fn NtFlushProcessWriteBuffers(); fn NtQueryDebugFilterState( ComponentId: ULONG, Level: ULONG, ) -> NTSTATUS; fn NtSetDebugFilterState( ComponentId: ULONG, Level: ULONG, State: BOOLEAN, ) -> NTSTATUS; fn NtYieldExecution() -> NTSTATUS; }}