16#define REQUIRED_FEATURE_BITS (KF_RDTSC|KF_CR4|KF_CMPXCHG8B|KF_XMMI|KF_XMMI64| \
17 KF_LARGE_PAGE|KF_FAST_SYSCALL|KF_GLOBAL_PAGE| \
18 KF_CMOV|KF_PAT|KF_MMX|KF_FXSR|KF_NX_BIT|KF_MTRR)
54 DPRINT(
"Large Page support detected but not yet taken advantage of!\n");
61 DPRINT(
"Global Page support detected but not yet taken advantage of!\n");
68 DPRINT(
"MTRR support detected but not yet taken advantage of!\n");
75 DPRINT(
"PAT support detected but not yet taken advantage of!\n");
97 KDESCRIPTOR GdtDescriptor = {{0},0,0}, IdtDescriptor = {{0},0,0};
105 Pcr->Self = (
PKPCR)Pcr;
106 Pcr->CurrentPrcb = &Pcr->Prcb;
117 Pcr->Prcb.BuildType = 0;
126 Pcr->Prcb.Number = (
UCHAR)ProcessorNumber;
127 Pcr->Prcb.SetMember = 1ULL << ProcessorNumber;
130 __sgdt(&GdtDescriptor.
Limit);
131 __sidt(&IdtDescriptor.Limit);
132 Pcr->GdtBase = (
PVOID)GdtDescriptor.
Base;
133 Pcr->IdtBase = (
PKIDTENTRY)IdtDescriptor.Base;
145 Pcr->Prcb.RspBase = Pcr->TssBase->Rsp0;
148 Pcr->Prcb.DpcStack = DpcStack;
151 Pcr->Prcb.MultiThreadProcessorSet = Pcr->Prcb.SetMember;
154 Pcr->Prcb.ProcessorState.SpecialRegisters.KernelDr6 = 0;
155 Pcr->Prcb.ProcessorState.SpecialRegisters.KernelDr7 = 0;
161 Pcr->Prcb.CurrentThread = IdleThread;
192 FrLdrDbgPrint(
"CPU doesn't have needed features! Has: 0x%x, required: 0x%x\n",
261 Tss->IoMapBase = 0x68;
359 for (
Entry = LoaderBlock->LoadOrderListHead.Flink,
i = 0;
360 Entry != &LoaderBlock->LoadOrderListHead &&
i < 3;
417 LoaderBlock->KernelStack &= ~(16 - 1);
420 InitialStack = LoaderBlock->KernelStack;
421 InitialThread = (
PKTHREAD)LoaderBlock->Thread;
424 InitialThread->
ApcState.Process = (
PVOID)LoaderBlock->Process;
451 DPRINT1(
"Pcr = %p, Gdt = %p, Idt = %p, Tss = %p\n",
unsigned long long UINT64
char * strstr(char *String1, char *String2)
FORCEINLINE PVOID KiGetGdtDescriptorBase(PKGDTENTRY Entry)
FORCEINLINE VOID KiInitGdtEntry(PKGDTENTRY64 Entry, ULONG64 Base, ULONG Size, UCHAR Type, UCHAR Dpl)
void KiInitializeSegments()
void KiSystemCallEntry32()
ULONG(* FrLdrDbgPrint)(const char *Format,...)
VOID FASTCALL KiInitializeTss(IN PKTSS64 Tss, IN UINT64 Stack)
DECLSPEC_NORETURN VOID NTAPI KiSystemStartup(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
KSPIN_LOCK KiFreezeExecutionLock
VOID NTAPI KiInitializePcr(IN PKIPCR Pcr, IN ULONG ProcessorNumber, IN PKTHREAD IdleThread, IN PVOID DpcStack)
static LDR_DATA_TABLE_ENTRY LdrCoreEntries[3]
void KiInitModuleList(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
VOID NTAPI KiInitMachineDependent(VOID)
VOID NTAPI KiInitializeKernelMachineDependent(IN PKPRCB Prcb, IN PLOADER_PARAMETER_BLOCK LoaderBlock)
void KiSystemCallEntry64()
ULONG_PTR KiDoubleFaultStack
#define REQUIRED_FEATURE_BITS
VOID NTAPI KiInitializeCpu(PKIPCR Pcr)
FORCEINLINE PKGDTENTRY KiGetGdtEntry(IN PVOID pGdt, IN USHORT Selector)
DECLSPEC_NORETURN VOID NTAPI KeBugCheck(ULONG BugCheckCode)
#define InsertTailList(ListHead, Entry)
#define InitializeListHead(ListHead)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
KIRQL FASTCALL KfRaiseIrql(IN KIRQL NewIrql)
VOID NTAPI HalInitializeProcessor(IN ULONG ProcessorNumber, IN PLOADER_PARAMETER_BLOCK LoaderBlock)
PPC_QUAL void __writemsr(const unsigned long Value)
PPC_QUAL unsigned long long __readmsr()
PPC_QUAL unsigned long long __rdtsc(void)
__INTRIN_INLINE unsigned long __readcr4(void)
__INTRIN_INLINE unsigned long __readcr0(void)
__INTRIN_INLINE void __writecr0(unsigned int Data)
__INTRIN_INLINE void __sidt(void *Destination)
__INTRIN_INLINE void __writecr4(unsigned int Data)
BOOLEAN NTAPI KdInitSystem(_In_ ULONG BootPhase, _In_opt_ PLOADER_PARAMETER_BLOCK LoaderBlock)
BOOLEAN NTAPI KdPollBreakIn(VOID)
PLOADER_PARAMETER_BLOCK KeLoaderBlock
VOID KeSetCurrentIrql(KIRQL NewIrql)
#define PRCB_MINOR_VERSION
#define PRCB_MAJOR_VERSION
#define PRCB_BUILD_UNIPROCESSOR
#define DBG_STATUS_CONTROL_C
#define PROCESSOR_ARCHITECTURE_AMD64
struct _KTHREAD * PKTHREAD
#define DECLSPEC_ALIGN(x)
#define DECLSPEC_NORETURN
DECLSPEC_NORETURN VOID KiSwitchToBootStack(IN ULONG_PTR InitialStack)
ULONG KiGetFeatureBits(VOID)
VOID KiSetProcessorType(VOID)
EPROCESS KiInitialProcess
PKPRCB KiProcessorBlock[]
KAFFINITY KeActiveProcessors
VOID NTAPI KeInitExceptions(VOID)
USHORT KeProcessorRevision
USHORT KeProcessorArchitecture
LIST_ENTRY PsLoadedModuleList
#define KERNEL_STACK_SIZE
#define PCR_MINOR_VERSION
#define PCR_MAJOR_VERSION
base of all file and directory entries
union _KGDTENTRY64 * GdtBase
union _KIDTENTRY64 * IdtBase
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
__analysis_noreturn NTSYSAPI VOID NTAPI DbgBreakPointWithStatus(_In_ ULONG Status)
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
#define NX_SUPPORT_POLICY_ALWAYSOFF
#define PF_3DNOW_INSTRUCTIONS_AVAILABLE
#define PF_MMX_INSTRUCTIONS_AVAILABLE
#define PF_XMMI64_INSTRUCTIONS_AVAILABLE
#define PF_PPC_MOVEMEM_64BIT_OK
#define PF_XMMI_INSTRUCTIONS_AVAILABLE
#define NX_SUPPORT_POLICY_OPTIN
#define NX_SUPPORT_POLICY_OPTOUT
#define NX_SUPPORT_POLICY_ALWAYSON
#define PF_COMPARE_EXCHANGE_DOUBLE
#define PF_FASTFAIL_AVAILABLE
#define PF_SSE3_INSTRUCTIONS_AVAILABLE
#define PF_RDTSC_INSTRUCTION_AVAILABLE
#define PF_COMPARE_EXCHANGE128
void _mm_setcsr(unsigned int a)