kernel
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
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 KERNEL_CS   0x08
#define KERNEL_DS   0x10
#define KERNEL_SS   0x10
#define USER_DS   0x1B
#define USER_CS   0x23
#define USER_SS   USER_DS
#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 APC
typedef struct _APCPAPC
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 , CRITICAL_PROCESS_DIED , WORKER_THREAD_ATTEMPTED_TERMINATION , ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY
}
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)
FORCEINLINE bool MeIsAttachedProcess (void)
FORCEINLINE uint32_t MeGetCurrentProcessorNumber (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

◆ 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 249 of file me.h.

◆ KERNEL_CS

#define KERNEL_CS   0x08

Definition at line 243 of file me.h.

◆ KERNEL_DS

#define KERNEL_DS   0x10

Definition at line 244 of file me.h.

◆ KERNEL_SS

#define KERNEL_SS   0x10

Definition at line 245 of file me.h.

◆ LASTFUNC_BUFFER_SIZE

#define LASTFUNC_BUFFER_SIZE   128

Definition at line 240 of file me.h.

◆ LASTFUNC_HISTORY_SIZE

#define LASTFUNC_HISTORY_SIZE   25

Definition at line 241 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   0x23

Definition at line 247 of file me.h.

◆ USER_DS

#define USER_DS   0x1B

Definition at line 246 of file me.h.

◆ USER_RFLAGS

#define USER_RFLAGS   0x246

Definition at line 250 of file me.h.

◆ USER_SS

#define USER_SS   USER_DS

Definition at line 248 of file me.h.

Typedef Documentation

◆ APC

typedef struct _APC APC

◆ 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 142 of file me.h.

◆ DEFERRED_ROUTINE

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

Definition at line 191 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

typedef struct _APC * PAPC

◆ PAPC_STATE

typedef struct _APC_STATE * PAPC_STATE

◆ PDEFERRED_ROUTINE

Definition at line 198 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 
CRITICAL_PROCESS_DIED 
WORKER_THREAD_ATTEMPTED_TERMINATION 
ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY 

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 221 of file me.h.

◆ _DEBUG_ACCESS_MODE

Enumerator
DEBUG_ACCESS_EXECUTE 
DEBUG_ACCESS_WRITE 
DEBUG_ACCESS_IO 
DEBUG_ACCESS_READWRITE 

Definition at line 167 of file me.h.

◆ _DEBUG_LENGTH

Enumerator
DEBUG_LEN_BYTE 
DEBUG_LEN_WORD 
DEBUG_LEN_QWORD 
DEBUG_LEN_DWORD 

Definition at line 174 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 158 of file irql.c.

◆ CleanStacks()

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

◆ InitScheduler()

void InitScheduler ( void )

Definition at line 27 of file scheduler.c.

◆ MeAcquireSchedulerLock()

FORCEINLINE void MeAcquireSchedulerLock ( void )

Definition at line 378 of file me.h.

◆ MeAreInterruptsEnabled()

bool MeAreInterruptsEnabled ( void )

Definition at line 227 of file irql.c.

◆ MeAttachProcess()

void MeAttachProcess ( IN PIPROCESS Process,
OUT PAPC_STATE ApcState )

Definition at line 24 of file attach.c.

◆ MeBugCheck()

NORETURN void MeBugCheck ( IN enum _BUGCHECK_CODES BugCheckCode)

Definition at line 220 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 245 of file bugcheck.c.

◆ MeDetachProcess()

void MeDetachProcess ( IN PAPC_STATE ApcState)

Definition at line 90 of file attach.c.

◆ MeDisableInterrupts()

bool MeDisableInterrupts ( void )

Definition at line 203 of file irql.c.

◆ MeEnableInterrupts()

void MeEnableInterrupts ( IN bool EnabledBefore)

Definition at line 216 of file irql.c.

◆ MeGetActiveProcessorCount()

FORCEINLINE uint8_t MeGetActiveProcessorCount ( void )

Definition at line 407 of file me.h.

◆ MeGetCurrentIrql()

FORCEINLINE IRQL MeGetCurrentIrql ( void )

Definition at line 415 of file me.h.

◆ MeGetCurrentProcessor()

FORCEINLINE PPROCESSOR MeGetCurrentProcessor ( void )

Definition at line 369 of file me.h.

◆ MeGetCurrentProcessorNumber()

FORCEINLINE uint32_t MeGetCurrentProcessorNumber ( void )

Definition at line 484 of file me.h.

◆ MeGetCurrentThread()

FORCEINLINE PITHREAD MeGetCurrentThread ( void )

Definition at line 444 of file me.h.

◆ MeGetPreviousMode()

FORCEINLINE PRIVILEGE_MODE MeGetPreviousMode ( void )

Definition at line 568 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 385 of file dpc.c.

◆ MeInitializeProcessor()

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

Definition at line 172 of file meinit.c.

◆ MeInsertQueueDpc()

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

Definition at line 48 of file dpc.c.

◆ MeIsAttachedProcess()

FORCEINLINE bool MeIsAttachedProcess ( void )

Definition at line 474 of file me.h.

◆ MeIsExecutingDpc()

FORCEINLINE bool MeIsExecutingDpc ( void )

Definition at line 466 of file me.h.

◆ MeLowerIrql()

void MeLowerIrql ( IN IRQL NewIrql)

Definition at line 102 of file irql.c.

◆ MeRaiseIrql()

void MeRaiseIrql ( IN IRQL NewIrql,
OUT PIRQL OldIrql )

Definition at line 62 of file irql.c.

◆ MeReleaseSchedulerLock()

FORCEINLINE void MeReleaseSchedulerLock ( void )

Definition at line 393 of file me.h.

◆ MeRemoveQueueDpc()

bool MeRemoveQueueDpc ( IN PDPC Dpc)

Definition at line 168 of file dpc.c.

◆ MeRetireDPCs()

void MeRetireDPCs ( void )

Definition at line 223 of file dpc.c.

◆ MeSetTargetProcessorDpc()

void MeSetTargetProcessorDpc ( IN PDPC Dpc,
IN uint32_t CpuNumber )

Definition at line 351 of file dpc.c.

◆ ReapOb()

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

Definition at line 19 of file dpc.c.

◆ Schedule()

NORETURN void Schedule ( void )

Definition at line 110 of file scheduler.c.

Variable Documentation

◆ g_cpuCount

uint32_t g_cpuCount
extern

Definition at line 128 of file smp.c.