My Project
Loading...
Searching...
No Matches
me.h File Reference
#include <stdint.h>
#include <stdbool.h>
#include "annotations.h"
#include "macros.h"
#include "../mtstatus.h"
#include "../intrinsics/intrin.h"
#include "../intrinsics/atomic.h"
#include "mm.h"
#include "mh.h"
#include "ms.h"
#include "core.h"

Go to the source code of this file.

Data Structures

struct  _DEBUG_ENTRY
struct  _WAIT_BLOCK
struct  _TRAP_FRAME
struct  _DBG_CALLBACK_INFO
struct  _DPC
struct  _DPC_DATA
struct  _APC_STATE
struct  _IPROCESS
struct  _ITHREAD
struct  _PROCESSOR

Macros

#define MSR_IA32_DEBUGCTL   0x1D9
#define MSR_LASTBRANCH_TOS   0x1C9
#define MSR_LASTBRANCH_FROM0   0x680
#define MSR_LASTBRANCH_TO0   0x6C0
#define DPC_TARGET_CURRENT   0xFF
#define TICK_MS   4
#define LASTFUNC_BUFFER_SIZE   128
#define LASTFUNC_HISTORY_SIZE   25
#define DEFAULT_TIMESLICE   1
#define KERNEL_CS   0x08
#define KERNEL_DS   0x10
#define KERNEL_SS   0x10
#define USER_CS   0x1B
#define USER_DS   0x23
#define USER_SS   0x23
#define INITIAL_RFLAGS   0x202
#define USER_RFLAGS   0x246

Typedefs

typedef enum _TimeSliceTicks TimeSliceTicks
typedef enum _TimeSliceTicksPTimeSliceTicks
typedef enum _WAIT_REASON WAIT_REASON
typedef enum _DPC_PRIORITY DPC_PRIORITY
typedef enum _BUGCHECK_CODES BUGCHECK_CODES
typedef void(* DebugCallback) (void *)
typedef struct _DEBUG_ENTRY DEBUG_ENTRY
typedef struct _WAIT_BLOCK WAIT_BLOCK
typedef struct _WAIT_BLOCKPWAIT_BLOCK
typedef struct _TRAP_FRAME TRAP_FRAME
typedef struct _TRAP_FRAMEPTRAP_FRAME
typedef enum _DEBUG_ACCESS_MODE DEBUG_ACCESS_MODE
typedef enum _DEBUG_LENGTH DEBUG_LENGTH
typedef struct _DBG_CALLBACK_INFO DBG_CALLBACK_INFO
typedef void DEFERRED_ROUTINE(struct _DPC *Dpc, void *DeferredContext, void *SystemArgument1, void *SystemArgument2)
typedef DEFERRED_ROUTINEPDEFERRED_ROUTINE
typedef struct _DPC DPC
typedef struct _DPCPDPC
typedef enum _CPU_FLAGS CPU_FLAGS
typedef struct _DPC_DATA DPC_DATA
typedef struct _DPC_DATAPDPC_DATA
typedef struct _APC_STATE APC_STATE
typedef struct _APC_STATEPAPC_STATE
typedef struct _IPROCESS IPROCESS
typedef struct _IPROCESSPIPROCESS
typedef struct _ITHREAD ITHREAD
typedef struct _ITHREADPITHREAD
typedef struct _PROCESSOR PROCESSOR
typedef struct _PROCESSORPPROCESSOR

Enumerations

enum  _TimeSliceTicks { LOW_TIMESLICE_TICKS = 16 / TICK_MS , DEFAULT_TIMESLICE_TICKS = 40 / TICK_MS , HIGH_TIMESLICE_TICKS = 100 / TICK_MS }
enum  _WAIT_REASON { Mutex = 0 , Sleeping = 1 }
enum  _DPC_PRIORITY {
  NO_PRIORITY = 0 , LOW_PRIORITY = 25 , MEDIUM_PRIORITY = 50 , HIGH_PRIORITY = 75 ,
  SYSTEM_PRIORITY = 99
}
enum  _BUGCHECK_CODES {
  DIVIDE_BY_ZERO , SINGLE_STEP , NON_MASKABLE_INTERRUPT , BREAKPOINT ,
  OVERFLOW , BOUNDS_CHECK , INVALID_OPCODE , NO_COPROCESSOR ,
  DOUBLE_FAULT , COPROCESSOR_SEGMENT_OVERRUN , INVALID_TSS , SEGMENT_SELECTOR_NOTPRESENT ,
  STACK_SEGMENT_OVERRUN , GENERAL_PROTECTION_FAULT , PAGE_FAULT , RESERVED ,
  FLOATING_POINT_ERROR , ALIGNMENT_CHECK , SEVERE_MACHINE_CHECK , MEMORY_MAP_SIZE_OVERRUN = 0xBEEF ,
  MANUALLY_INITIATED_CRASH = 0xBABE , BAD_PAGING = 0xBAD , BLOCK_DEVICE_LIMIT_REACHED = 0x420 , NULL_POINTER_DEREFERENCE = 0xDEAD ,
  FILESYSTEM_PANIC = 0xFA11 , UNABLE_TO_INIT_TRACELASTFUNC = 0xACE , FRAME_LIMIT_REACHED = 0xBADA55 , IRQL_NOT_LESS_OR_EQUAL = 0x1337 ,
  IRQL_NOT_GREATER_OR_EQUAL = 0x1338 , INVALID_IRQL_SUPPLIED = 0x69420 , NULL_CTX_RECEIVED = 0xF1FA , THREAD_EXIT_FAILURE = 0x123123FF ,
  BAD_AHCI_COUNT , AHCI_INIT_FAILED , MEMORY_LIMIT_REACHED , HEAP_ALLOCATION_FAILED ,
  NULL_THREAD , FATAL_IRQL_CORRUPTION , THREAD_ID_CREATION_FAILURE , FRAME_ALLOCATION_FAILED ,
  FRAME_BITMAP_CREATION_FAILURE , ASSERTION_FAILURE , MEMORY_INVALID_FREE , MEMORY_CORRUPT_HEADER ,
  MEMORY_DOUBLE_FREE , MEMORY_CORRUPT_FOOTER , GUARD_PAGE_DEREFERENCE , KERNEL_STACK_OVERFLOWN ,
  KMODE_EXCEPTION_NOT_HANDLED , PFN_DATABASE_INIT_FAILURE , VA_SPACE_INIT_FAILURE , POOL_INIT_FAILURE ,
  BAD_POOL_CALLER , ATTEMPTED_WRITE_TO_READONLY_MEMORY , INVALID_INITIALIZATION_PHASE , PAGE_FAULT_IN_FREED_NONPAGED_POOL ,
  PAGE_FAULT_IN_FREED_PAGED_POOL , ATTEMPTED_SWITCH_FROM_DPC , INVALID_INTERRUPT_REQUEST , MANUALLY_INITIATED_CRASH2 ,
  PSMGR_INIT_FAILED , PSWORKER_INIT_FAILED , DPC_NOT_INITIALIZED , CID_TABLE_NULL ,
  INVALID_PROCESS_ATTACH_ATTEMPT
}
enum  _DEBUG_ACCESS_MODE { DEBUG_ACCESS_EXECUTE = 0b00 , DEBUG_ACCESS_WRITE = 0b01 , DEBUG_ACCESS_IO = 0b10 , DEBUG_ACCESS_READWRITE = 0b11 }
enum  _DEBUG_LENGTH { DEBUG_LEN_BYTE = 0b00 , DEBUG_LEN_WORD = 0b01 , DEBUG_LEN_QWORD = 0b10 , DEBUG_LEN_DWORD = 0b11 }
enum  _CPU_FLAGS { CPU_ONLINE = 1 << 0 , CPU_HALTED = 1 << 1 , CPU_DOING_IPI = 1 << 2 , CPU_UNAVAILABLE = 1 << 3 }

Functions

NORETURN void MeBugCheck (IN enum _BUGCHECK_CODES BugCheckCode)
NORETURN void MeBugCheckEx (IN enum _BUGCHECK_CODES BugCheckCode, IN void *BugCheckParameter1, IN void *BugCheckParameter2, IN void *BugCheckParameter3, IN void *BugCheckParameter4)
FORCEINLINE PPROCESSOR MeGetCurrentProcessor (void)
FORCEINLINE void MeAcquireSchedulerLock (void)
FORCEINLINE void MeReleaseSchedulerLock (void)
FORCEINLINE uint8_t MeGetActiveProcessorCount (void)
FORCEINLINE IRQL MeGetCurrentIrql (void)
FORCEINLINE PITHREAD MeGetCurrentThread (void)
FORCEINLINE bool MeIsExecutingDpc (void)
void MeInitializeProcessor (IN PPROCESSOR CPU, IN bool InitializeStandardRoutine, IN bool AreYouAP)
void MeRaiseIrql (IN IRQL NewIrql, OUT PIRQL OldIrql)
void MeLowerIrql (IN IRQL NewIrql)
void _MeSetIrql (IN IRQL NewIrql)
void MeSetTargetProcessorDpc (IN PDPC Dpc, IN uint32_t CpuNumber)
void MeInitializeDpc (IN PDPC DpcAllocated, IN PDEFERRED_ROUTINE DeferredRoutine, IN void *DeferredContext, IN DPC_PRIORITY DeferredPriority)
bool MeInsertQueueDpc (IN PDPC Dpc, IN void *SystemArgument1, IN void *SystemArgument2)
bool MeRemoveQueueDpc (IN PDPC Dpc)
void MeRetireDPCs (void)
void CleanStacks (DPC *dpc, void *thread, void *allocatedDPC, void *arg4)
void ReapOb (DPC *dpc, void *DeferredContext, void *SystemArgument1, void *SystemArgument2)
void InitScheduler (void)
void MeAttachProcess (IN PIPROCESS Process, OUT PAPC_STATE ApcState)
void MeDetachProcess (IN PAPC_STATE ApcState)
NORETURN void Schedule (void)
FORCEINLINE PRIVILEGE_MODE MeGetPreviousMode (void)
void MeEnableInterrupts (IN bool EnabledBefore)
bool MeDisableInterrupts (void)
bool MeAreInterruptsEnabled (void)
PPROCESSOR MeGetProcessorBlock (uint8_t ProcessorNumber)

Variables

uint32_t g_cpuCount

Macro Definition Documentation

◆ DEFAULT_TIMESLICE

#define DEFAULT_TIMESLICE   1

Definition at line 236 of file me.h.

◆ DPC_TARGET_CURRENT

#define DPC_TARGET_CURRENT   0xFF

Definition at line 26 of file me.h.

◆ INITIAL_RFLAGS

#define INITIAL_RFLAGS   0x202

Definition at line 244 of file me.h.

◆ KERNEL_CS

#define KERNEL_CS   0x08

Definition at line 238 of file me.h.

◆ KERNEL_DS

#define KERNEL_DS   0x10

Definition at line 239 of file me.h.

◆ KERNEL_SS

#define KERNEL_SS   0x10

Definition at line 240 of file me.h.

◆ LASTFUNC_BUFFER_SIZE

#define LASTFUNC_BUFFER_SIZE   128

Definition at line 233 of file me.h.

◆ LASTFUNC_HISTORY_SIZE

#define LASTFUNC_HISTORY_SIZE   25

Definition at line 234 of file me.h.

◆ MSR_IA32_DEBUGCTL

#define MSR_IA32_DEBUGCTL   0x1D9

Definition at line 22 of file me.h.

◆ MSR_LASTBRANCH_FROM0

#define MSR_LASTBRANCH_FROM0   0x680

Definition at line 24 of file me.h.

◆ MSR_LASTBRANCH_TO0

#define MSR_LASTBRANCH_TO0   0x6C0

Definition at line 25 of file me.h.

◆ MSR_LASTBRANCH_TOS

#define MSR_LASTBRANCH_TOS   0x1C9

Definition at line 23 of file me.h.

◆ TICK_MS

#define TICK_MS   4

Definition at line 45 of file me.h.

◆ USER_CS

#define USER_CS   0x1B

Definition at line 241 of file me.h.

◆ USER_DS

#define USER_DS   0x23

Definition at line 242 of file me.h.

◆ USER_RFLAGS

#define USER_RFLAGS   0x246

Definition at line 245 of file me.h.

◆ USER_SS

#define USER_SS   0x23

Definition at line 243 of file me.h.

Typedef Documentation

◆ APC_STATE

typedef struct _APC_STATE APC_STATE

◆ BUGCHECK_CODES

◆ CPU_FLAGS

typedef enum _CPU_FLAGS CPU_FLAGS

◆ DBG_CALLBACK_INFO

◆ DEBUG_ACCESS_MODE

◆ DEBUG_ENTRY

typedef struct _DEBUG_ENTRY DEBUG_ENTRY

◆ DEBUG_LENGTH

◆ DebugCallback

typedef void(* DebugCallback) (void *)

Definition at line 139 of file me.h.

◆ DEFERRED_ROUTINE

typedef void DEFERRED_ROUTINE(struct _DPC *Dpc, void *DeferredContext, void *SystemArgument1, void *SystemArgument2)

Definition at line 188 of file me.h.

◆ DPC

typedef struct _DPC DPC

◆ DPC_DATA

typedef struct _DPC_DATA DPC_DATA

◆ DPC_PRIORITY

◆ IPROCESS

typedef struct _IPROCESS IPROCESS

◆ ITHREAD

typedef struct _ITHREAD ITHREAD

◆ PAPC_STATE

typedef struct _APC_STATE * PAPC_STATE

◆ PDEFERRED_ROUTINE

Definition at line 195 of file me.h.

◆ PDPC

typedef struct _DPC * PDPC

◆ PDPC_DATA

typedef struct _DPC_DATA * PDPC_DATA

◆ PIPROCESS

typedef struct _IPROCESS * PIPROCESS

◆ PITHREAD

typedef struct _ITHREAD * PITHREAD

◆ PPROCESSOR

typedef struct _PROCESSOR * PPROCESSOR

◆ PROCESSOR

typedef struct _PROCESSOR PROCESSOR

◆ PTimeSliceTicks

◆ PTRAP_FRAME

typedef struct _TRAP_FRAME * PTRAP_FRAME

◆ PWAIT_BLOCK

typedef struct _WAIT_BLOCK * PWAIT_BLOCK

◆ TimeSliceTicks

◆ TRAP_FRAME

typedef struct _TRAP_FRAME TRAP_FRAME

◆ WAIT_BLOCK

typedef struct _WAIT_BLOCK WAIT_BLOCK

◆ WAIT_REASON

typedef enum _WAIT_REASON WAIT_REASON

Enumeration Type Documentation

◆ _BUGCHECK_CODES

Enumerator
DIVIDE_BY_ZERO 
SINGLE_STEP 
NON_MASKABLE_INTERRUPT 
BREAKPOINT 
OVERFLOW 
BOUNDS_CHECK 
INVALID_OPCODE 
NO_COPROCESSOR 
DOUBLE_FAULT 
COPROCESSOR_SEGMENT_OVERRUN 
INVALID_TSS 
SEGMENT_SELECTOR_NOTPRESENT 
STACK_SEGMENT_OVERRUN 
GENERAL_PROTECTION_FAULT 
PAGE_FAULT 
RESERVED 
FLOATING_POINT_ERROR 
ALIGNMENT_CHECK 
SEVERE_MACHINE_CHECK 
MEMORY_MAP_SIZE_OVERRUN 

Custom ones.

MANUALLY_INITIATED_CRASH 
BAD_PAGING 
BLOCK_DEVICE_LIMIT_REACHED 
NULL_POINTER_DEREFERENCE 
FILESYSTEM_PANIC 
UNABLE_TO_INIT_TRACELASTFUNC 
FRAME_LIMIT_REACHED 
IRQL_NOT_LESS_OR_EQUAL 
IRQL_NOT_GREATER_OR_EQUAL 
INVALID_IRQL_SUPPLIED 
NULL_CTX_RECEIVED 
THREAD_EXIT_FAILURE 
BAD_AHCI_COUNT 
AHCI_INIT_FAILED 
MEMORY_LIMIT_REACHED 
HEAP_ALLOCATION_FAILED 
NULL_THREAD 
FATAL_IRQL_CORRUPTION 
THREAD_ID_CREATION_FAILURE 
FRAME_ALLOCATION_FAILED 
FRAME_BITMAP_CREATION_FAILURE 
ASSERTION_FAILURE 
MEMORY_INVALID_FREE 
MEMORY_CORRUPT_HEADER 
MEMORY_DOUBLE_FREE 
MEMORY_CORRUPT_FOOTER 
GUARD_PAGE_DEREFERENCE 
KERNEL_STACK_OVERFLOWN 
KMODE_EXCEPTION_NOT_HANDLED 
PFN_DATABASE_INIT_FAILURE 
VA_SPACE_INIT_FAILURE 
POOL_INIT_FAILURE 
BAD_POOL_CALLER 
ATTEMPTED_WRITE_TO_READONLY_MEMORY 
INVALID_INITIALIZATION_PHASE 
PAGE_FAULT_IN_FREED_NONPAGED_POOL 
PAGE_FAULT_IN_FREED_PAGED_POOL 
ATTEMPTED_SWITCH_FROM_DPC 
INVALID_INTERRUPT_REQUEST 
MANUALLY_INITIATED_CRASH2 
PSMGR_INIT_FAILED 
PSWORKER_INIT_FAILED 
DPC_NOT_INITIALIZED 
CID_TABLE_NULL 
INVALID_PROCESS_ATTACH_ATTEMPT 

Definition at line 68 of file me.h.

◆ _CPU_FLAGS

enum _CPU_FLAGS
Enumerator
CPU_ONLINE 
CPU_HALTED 
CPU_DOING_IPI 
CPU_UNAVAILABLE 

Definition at line 218 of file me.h.

◆ _DEBUG_ACCESS_MODE

Enumerator
DEBUG_ACCESS_EXECUTE 
DEBUG_ACCESS_WRITE 
DEBUG_ACCESS_IO 
DEBUG_ACCESS_READWRITE 

Definition at line 164 of file me.h.

◆ _DEBUG_LENGTH

Enumerator
DEBUG_LEN_BYTE 
DEBUG_LEN_WORD 
DEBUG_LEN_QWORD 
DEBUG_LEN_DWORD 

Definition at line 171 of file me.h.

◆ _DPC_PRIORITY

Enumerator
NO_PRIORITY 
LOW_PRIORITY 
MEDIUM_PRIORITY 
HIGH_PRIORITY 
SYSTEM_PRIORITY 

Definition at line 57 of file me.h.

◆ _TimeSliceTicks

Enumerator
LOW_TIMESLICE_TICKS 
DEFAULT_TIMESLICE_TICKS 
HIGH_TIMESLICE_TICKS 

Definition at line 46 of file me.h.

◆ _WAIT_REASON

Enumerator
Mutex 
Sleeping 

Definition at line 52 of file me.h.

Function Documentation

◆ _MeSetIrql()

void _MeSetIrql ( IN IRQL NewIrql)

Definition at line 153 of file irql.c.

◆ CleanStacks()

void CleanStacks ( DPC * dpc,
void * thread,
void * allocatedDPC,
void * arg4 )

◆ InitScheduler()

void InitScheduler ( void )

Definition at line 26 of file scheduler.c.

◆ MeAcquireSchedulerLock()

FORCEINLINE void MeAcquireSchedulerLock ( void )

Definition at line 365 of file me.h.

◆ MeAreInterruptsEnabled()

bool MeAreInterruptsEnabled ( void )

Definition at line 210 of file irql.c.

◆ MeAttachProcess()

void MeAttachProcess ( IN PIPROCESS Process,
OUT PAPC_STATE ApcState )

Definition at line 23 of file attach.c.

◆ MeBugCheck()

NORETURN void MeBugCheck ( IN enum _BUGCHECK_CODES BugCheckCode)

Definition at line 214 of file bugcheck.c.

◆ MeBugCheckEx()

NORETURN void MeBugCheckEx ( IN enum _BUGCHECK_CODES BugCheckCode,
IN void * BugCheckParameter1,
IN void * BugCheckParameter2,
IN void * BugCheckParameter3,
IN void * BugCheckParameter4 )

Definition at line 305 of file bugcheck.c.

◆ MeDetachProcess()

void MeDetachProcess ( IN PAPC_STATE ApcState)

Definition at line 86 of file attach.c.

◆ MeDisableInterrupts()

bool MeDisableInterrupts ( void )

Definition at line 186 of file irql.c.

◆ MeEnableInterrupts()

void MeEnableInterrupts ( IN bool EnabledBefore)

Definition at line 199 of file irql.c.

◆ MeGetActiveProcessorCount()

FORCEINLINE uint8_t MeGetActiveProcessorCount ( void )

Definition at line 394 of file me.h.

◆ MeGetCurrentIrql()

FORCEINLINE IRQL MeGetCurrentIrql ( void )

Definition at line 402 of file me.h.

◆ MeGetCurrentProcessor()

FORCEINLINE PPROCESSOR MeGetCurrentProcessor ( void )

Definition at line 356 of file me.h.

◆ MeGetCurrentThread()

FORCEINLINE PITHREAD MeGetCurrentThread ( void )

Definition at line 431 of file me.h.

◆ MeGetPreviousMode()

FORCEINLINE PRIVILEGE_MODE MeGetPreviousMode ( void )

Definition at line 534 of file me.h.

◆ MeGetProcessorBlock()

PPROCESSOR MeGetProcessorBlock ( uint8_t ProcessorNumber)

Definition at line 196 of file smp.c.

◆ MeInitializeDpc()

void MeInitializeDpc ( IN PDPC DpcAllocated,
IN PDEFERRED_ROUTINE DeferredRoutine,
IN void * DeferredContext,
IN DPC_PRIORITY DeferredPriority )

Definition at line 384 of file dpc.c.

◆ MeInitializeProcessor()

void MeInitializeProcessor ( IN PPROCESSOR CPU,
IN bool InitializeStandardRoutine,
IN bool AreYouAP )

Definition at line 164 of file meinit.c.

◆ MeInsertQueueDpc()

bool MeInsertQueueDpc ( IN PDPC Dpc,
IN void * SystemArgument1,
IN void * SystemArgument2 )

Definition at line 47 of file dpc.c.

◆ MeIsExecutingDpc()

FORCEINLINE bool MeIsExecutingDpc ( void )

Definition at line 453 of file me.h.

◆ MeLowerIrql()

void MeLowerIrql ( IN IRQL NewIrql)

Definition at line 97 of file irql.c.

◆ MeRaiseIrql()

void MeRaiseIrql ( IN IRQL NewIrql,
OUT PIRQL OldIrql )

Definition at line 57 of file irql.c.

◆ MeReleaseSchedulerLock()

FORCEINLINE void MeReleaseSchedulerLock ( void )

Definition at line 380 of file me.h.

◆ MeRemoveQueueDpc()

bool MeRemoveQueueDpc ( IN PDPC Dpc)

Definition at line 167 of file dpc.c.

◆ MeRetireDPCs()

void MeRetireDPCs ( void )

Definition at line 222 of file dpc.c.

◆ MeSetTargetProcessorDpc()

void MeSetTargetProcessorDpc ( IN PDPC Dpc,
IN uint32_t CpuNumber )

Definition at line 350 of file dpc.c.

◆ ReapOb()

void ReapOb ( DPC * dpc,
void * DeferredContext,
void * SystemArgument1,
void * SystemArgument2 )

Definition at line 18 of file dpc.c.

◆ Schedule()

NORETURN void Schedule ( void )

Definition at line 105 of file scheduler.c.

Variable Documentation

◆ g_cpuCount

uint32_t g_cpuCount
extern

Definition at line 128 of file smp.c.