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) 52 DPRINT(
"Large Page support detected but not yet taken advantage of!\n");
59 DPRINT(
"Global Page support detected but not yet taken advantage of!\n");
66 DPRINT(
"MTRR support detected but not yet taken advantage of!\n");
73 DPRINT(
"PAT support detected but not yet taken advantage of!\n");
95 KDESCRIPTOR GdtDescriptor = {{0},0,0}, IdtDescriptor = {{0},0,0};
103 Pcr->Self = (
PKPCR)Pcr;
104 Pcr->CurrentPrcb = &Pcr->Prcb;
115 Pcr->Prcb.BuildType = 0;
124 Pcr->Prcb.Number = (
UCHAR)ProcessorNumber;
125 Pcr->Prcb.SetMember = 1
ULL << ProcessorNumber;
128 __sgdt(&GdtDescriptor.
Limit);
129 __sidt(&IdtDescriptor.Limit);
130 Pcr->GdtBase = (
PVOID)GdtDescriptor.
Base;
131 Pcr->IdtBase = (
PKIDTENTRY)IdtDescriptor.Base;
143 Pcr->Prcb.RspBase = Pcr->TssBase->Rsp0;
146 Pcr->Prcb.DpcStack = DpcStack;
149 Pcr->Prcb.MultiThreadProcessorSet = Pcr->Prcb.SetMember;
152 Pcr->Prcb.ProcessorState.SpecialRegisters.KernelDr6 = 0;
153 Pcr->Prcb.ProcessorState.SpecialRegisters.KernelDr7 = 0;
156 Pcr->Prcb.CurrentThread = IdleThread;
187 FrLdrDbgPrint(
"CPU doesn't have needed features! Has: 0x%x, required: 0x%x\n",
197 Pcr->Prcb.FeatureBits = FeatureBits;
253 Tss->IoMapBase = 0x68;
351 for (
Entry = LoaderBlock->LoadOrderListHead.Flink,
i = 0;
352 Entry != &LoaderBlock->LoadOrderListHead &&
i < 3;
406 LoaderBlock->KernelStack &= ~(16 - 1);
409 InitialStack = LoaderBlock->KernelStack;
410 InitialThread = (
PKTHREAD)LoaderBlock->Thread;
413 InitialThread->
ApcState.Process = (
PVOID)LoaderBlock->Process;
440 DPRINT1(
"Pcr = %p, Gdt = %p, Idt = %p, Tss = %p\n",
VOID NTAPI KiInitMachineDependent(VOID)
FORCEINLINE PVOID KiGetGdtDescriptorBase(PKGDTENTRY Entry)
#define PF_COMPARE_EXCHANGE128
__INTRIN_INLINE void __writecr4(unsigned int Data)
VOID FASTCALL KiInitializeTss(IN PKTSS64 Tss, IN UINT64 Stack)
#define REQUIRED_FEATURE_BITS
DECLSPEC_NORETURN VOID KiSwitchToBootStack(IN ULONG_PTR InitialStack)
union _KGDTENTRY64 * GdtBase
char * strstr(char *String1, char *String2)
#define NX_SUPPORT_POLICY_OPTIN
VOID NTAPI KeInitExceptions(VOID)
ULONG KiGetFeatureBits(VOID)
#define PF_PPC_MOVEMEM_64BIT_OK
#define PF_COMPARE_EXCHANGE_DOUBLE
void KiSystemCallEntry32()
void KiInitializeSegments()
VOID KeSetCurrentIrql(KIRQL NewIrql)
#define InsertTailList(ListHead, Entry)
static LDR_DATA_TABLE_ENTRY LdrCoreEntries[3]
#define DECLSPEC_NORETURN
#define NX_SUPPORT_POLICY_ALWAYSON
VOID NTAPI KiInitializePcr(IN PKIPCR Pcr, IN ULONG ProcessorNumber, IN PKTHREAD IdleThread, IN PVOID DpcStack)
ULONG(* FrLdrDbgPrint)(const char *Format,...)
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
struct _KTHREAD * PKTHREAD
VOID NTAPI KiInitializeKernelMachineDependent(IN PKPRCB Prcb, IN PLOADER_PARAMETER_BLOCK LoaderBlock)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define NX_SUPPORT_POLICY_ALWAYSOFF
VOID NTAPI HalInitializeProcessor(IN ULONG ProcessorNumber, IN PLOADER_PARAMETER_BLOCK LoaderBlock)
DECLSPEC_NORETURN VOID NTAPI KeBugCheck(ULONG BugCheckCode)
__INTRIN_INLINE void __sidt(void *Destination)
#define NX_SUPPORT_POLICY_OPTOUT
#define PF_XMMI_INSTRUCTIONS_AVAILABLE
__INTRIN_INLINE void __writecr0(unsigned int Data)
PPC_QUAL unsigned long long __readmsr()
void KiInitModuleList(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
PLOADER_PARAMETER_BLOCK KeLoaderBlock
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
ULONG_PTR KiDoubleFaultStack
KIRQL FASTCALL KfRaiseIrql(IN KIRQL NewIrql)
DECLSPEC_NORETURN VOID NTAPI KiSystemStartup(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
USHORT KeProcessorArchitecture
USHORT KeProcessorRevision
void KiSystemCallEntry64()
LIST_ENTRY PsLoadedModuleList
#define PF_FASTFAIL_AVAILABLE
VOID NTAPI KiInitializeCpu(PKIPCR Pcr)
#define KERNEL_STACK_SIZE
#define PROCESSOR_ARCHITECTURE_AMD64
#define PF_SSE3_INSTRUCTIONS_AVAILABLE
__INTRIN_INLINE unsigned long __readcr0(void)
__INTRIN_INLINE unsigned long __readcr4(void)
BOOLEAN NTAPI KdPollBreakIn(VOID)
KAFFINITY KeActiveProcessors
EPROCESS KiInitialProcess
PPC_QUAL void __writemsr(const unsigned long Value)
union _KIDTENTRY64 * IdtBase
FORCEINLINE VOID KiInitGdtEntry(PKGDTENTRY64 Entry, ULONG64 Base, ULONG Size, UCHAR Type, UCHAR Dpl)
#define PCR_MINOR_VERSION
#define PF_RDTSC_INSTRUCTION_AVAILABLE
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
BOOLEAN NTAPI KdInitSystem(ULONG Reserved, PLOADER_PARAMETER_BLOCK LoaderBlock)
PKPRCB KiProcessorBlock[]
#define InitializeListHead(ListHead)
#define PRCB_BUILD_UNIPROCESSOR
#define DBG_STATUS_CONTROL_C
#define PF_XMMI64_INSTRUCTIONS_AVAILABLE
KSPIN_LOCK KiFreezeExecutionLock
#define RtlZeroMemory(Destination, Length)
__analysis_noreturn NTSYSAPI VOID NTAPI DbgBreakPointWithStatus(_In_ ULONG Status)
#define PRCB_MINOR_VERSION
unsigned long long UINT64
VOID KiSetProcessorType(VOID)
#define PF_3DNOW_INSTRUCTIONS_AVAILABLE
#define PCR_MAJOR_VERSION
base of all file and directory entries
#define PRCB_MAJOR_VERSION
FORCEINLINE PKGDTENTRY KiGetGdtEntry(IN PVOID pGdt, IN USHORT Selector)
#define PF_MMX_INSTRUCTIONS_AVAILABLE
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char * Format