[SDK] Hack more stuff together so we can compile a test kernel

This commit is contained in:
Justin Miller 2023-10-09 12:48:34 -07:00
parent ebcd3da889
commit 2bde5483f5
2 changed files with 383 additions and 53 deletions

View file

@ -157,13 +157,337 @@ typedef struct _TRAPFRAME_LOG_ENTRY
ULONG Reserved1;
} TRAPFRAME_LOG_ENTRY, *PTRAPFRAME_LOG_ENTRY;
//
// Special Registers Structure (outside of CONTEXT)
// Based on WoA symbols
//
typedef struct _KSPECIAL_REGISTERS
{
ULONG64 Elr_El1;
UINT32 Spsr_El1;
ULONG64 Tpidr_El0;
ULONG64 Tpidrro_El0;
ULONG64 Tpidr_El1;
ULONG64 KernelBvr[8];
ULONG KernelBcr[8];
ULONG64 KernelWvr[2];
ULONG KernelWcr[2];
} KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
//
// ARM64 Architecture State
// Based on WoA symbols
//
typedef struct _KARM64_ARCH_STATE
{
ULONG64 Midr_El1;
ULONG64 Sctlr_El1;
ULONG64 Actlr_El1;
ULONG64 Cpacr_El1;
ULONG64 Tcr_El1;
ULONG64 Ttbr0_El1;
ULONG64 Ttbr1_El1;
ULONG64 Esr_El1;
ULONG64 Far_El1;
ULONG64 Pmcr_El0;
ULONG64 Pmcntenset_El0;
ULONG64 Pmccntr_El0;
ULONG64 Pmxevcntr_El0[31];
ULONG64 Pmxevtyper_El0[31];
ULONG64 Pmovsclr_El0;
ULONG64 Pmselr_El0;
ULONG64 Pmuserenr_El0;
ULONG64 Mair_El1;
ULONG64 Vbar_El1;
} KARM64_ARCH_STATE, *PKARM64_ARCH_STATE;
typedef struct _KPROCESSOR_STATE
{
KSPECIAL_REGISTERS SpecialRegisters; // 0
KARM64_ARCH_STATE ArchState; // 160
CONTEXT ContextFrame; // 800
} KPROCESSOR_STATE, *PKPROCESSOR_STATE;
//
// Processor Region Control Block
// Based on WoA
//
typedef struct _KPRCB
{
ULONG dummy;
UCHAR LegacyNumber;
UCHAR ReservedMustBeZero;
UCHAR IdleHalt;
PKTHREAD CurrentThread;
PKTHREAD NextThread;
PKTHREAD IdleThread;
UCHAR NestingLevel;
UCHAR ClockOwner;
union
{
UCHAR PendingTickFlags;
struct
{
UCHAR PendingTick : 1;
UCHAR PendingBackupTick : 1;
};
};
UCHAR PrcbPad00[1];
ULONG Number;
ULONG PrcbLock;
PCHAR PriorityState;
KPROCESSOR_STATE ProcessorState;
USHORT ProcessorModel;
USHORT ProcessorRevision;
ULONG MHz;
UINT64 CycleCounterFrequency;
ULONG HalReserved[15];
USHORT MinorVersion;
USHORT MajorVersion;
UCHAR BuildType;
UCHAR CpuVendor;
UCHAR CoresPerPhysicalProcessor;
UCHAR LogicalProcessorsPerCore;
PVOID AcpiReserved;
ULONG GroupSetMember;
UCHAR Group;
UCHAR GroupIndex;
//UCHAR _PADDING1_[0x62];
KSPIN_LOCK_QUEUE DECLSPEC_ALIGN(128) LockQueue[17];
UCHAR ProcessorVendorString[2];
UCHAR _PADDING2_[0x2];
ULONG FeatureBits;
ULONG MaxBreakpoints;
ULONG MaxWatchpoints;
PCONTEXT Context;
ULONG ContextFlagsInit;
//UCHAR _PADDING3_[0x60];
PP_LOOKASIDE_LIST DECLSPEC_ALIGN(128) PPLookasideList[16];
LONG PacketBarrier;
SINGLE_LIST_ENTRY DeferredReadyListHead;
LONG MmPageFaultCount;
LONG MmCopyOnWriteCount;
LONG MmTransitionCount;
LONG MmDemandZeroCount;
LONG MmPageReadCount;
LONG MmPageReadIoCount;
LONG MmDirtyPagesWriteCount;
LONG MmDirtyWriteIoCount;
LONG MmMappedPagesWriteCount;
LONG MmMappedWriteIoCount;
ULONG KeSystemCalls;
ULONG KeContextSwitches;
ULONG CcFastReadNoWait;
ULONG CcFastReadWait;
ULONG CcFastReadNotPossible;
ULONG CcCopyReadNoWait;
ULONG CcCopyReadWait;
ULONG CcCopyReadNoWaitMiss;
LONG LookasideIrpFloat;
LONG IoReadOperationCount;
LONG IoWriteOperationCount;
LONG IoOtherOperationCount;
LARGE_INTEGER IoReadTransferCount;
LARGE_INTEGER IoWriteTransferCount;
LARGE_INTEGER IoOtherTransferCount;
UCHAR _PADDING4_[0x8];
struct _REQUEST_MAILBOX* Mailbox;
LONG TargetCount;
ULONG IpiFrozen;
ULONG RequestSummary;
KDPC_DATA DpcData[2];
PVOID DpcStack;
PVOID SpBase;
LONG MaximumDpcQueueDepth;
ULONG DpcRequestRate;
ULONG MinimumDpcRate;
ULONG DpcLastCount;
UCHAR ThreadDpcEnable;
UCHAR QuantumEnd;
UCHAR DpcRoutineActive;
UCHAR IdleSchedule;
#if (NTDDI_VERSION >= NTDDI_WIN8)
union
{
LONG DpcRequestSummary;
SHORT DpcRequestSlot[2];
struct
{
SHORT NormalDpcState;
SHORT ThreadDpcState;
};
struct
{
ULONG DpcNormalProcessingActive : 1;
ULONG DpcNormalProcessingRequested : 1;
ULONG DpcNormalThreadSignal : 1;
ULONG DpcNormalTimerExpiration : 1;
ULONG DpcNormalDpcPresent : 1;
ULONG DpcNormalLocalInterrupt : 1;
ULONG DpcNormalSpare : 10;
ULONG DpcThreadActive : 1;
ULONG DpcThreadRequested : 1;
ULONG DpcThreadSpare : 14;
};
};
#else
LONG DpcSetEventRequest;
#endif
ULONG LastTimerHand;
ULONG LastTick;
ULONG ClockInterrupts;
ULONG ReadyScanTick;
ULONG PrcbPad10[1];
ULONG InterruptLastCount;
ULONG InterruptRate;
UCHAR _PADDING5_[0x4];
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
KGATE DpcGate;
#else
KEVENT DpcEvent;
#endif
ULONG MPAffinity;
KDPC CallDpc;
LONG ClockKeepAlive;
UCHAR ClockCheckSlot;
UCHAR ClockPollCycle;
//UCHAR _PADDING6_[0x2];
LONG DpcWatchdogPeriod;
LONG DpcWatchdogCount;
LONG KeSpinLockOrdering;
UCHAR _PADDING7_[0x38];
LIST_ENTRY WaitListHead;
ULONG WaitLock;
ULONG ReadySummary;
LONG AffinitizedSelectionMask;
ULONG QueueIndex;
KDPC TimerExpirationDpc;
//RTL_RB_TREE ScbQueue;
LIST_ENTRY ScbList;
UCHAR _PADDING8_[0x38];
LIST_ENTRY DispatcherReadyListHead[32];
ULONG InterruptCount;
ULONG KernelTime;
ULONG UserTime;
ULONG DpcTime;
ULONG InterruptTime;
ULONG AdjustDpcThreshold;
UCHAR SkipTick;
UCHAR DebuggerSavedIRQL;
UCHAR PollSlot;
UCHAR GroupSchedulingOverQuota;
ULONG DpcTimeCount;
ULONG DpcTimeLimit;
ULONG PeriodicCount;
ULONG PeriodicBias;
ULONG AvailableTime;
ULONG ScbOffset;
ULONG KeExceptionDispatchCount;
struct _KNODE* ParentNode;
UCHAR _PADDING9_[0x4];
ULONG64 AffinitizedCycles;
ULONG64 StartCycles;
ULONG64 GenerationTarget;
ULONG64 CycleCounterHigh;
#if (NTDDI_VERSION >= NTDDI_WIN8)
KENTROPY_TIMING_STATE EntropyTimingState;
#endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
LONG MmSpinLockOrdering;
ULONG PageColor;
ULONG NodeColor;
ULONG NodeShiftedColor;
ULONG SecondaryColorMask;
ULONG64 CycleTime;
UCHAR _PADDING10_[0x58];
ULONG CcFastMdlReadNoWait;
ULONG CcFastMdlReadWait;
ULONG CcFastMdlReadNotPossible;
ULONG CcMapDataNoWait;
ULONG CcMapDataWait;
ULONG CcPinMappedDataCount;
ULONG CcPinReadNoWait;
ULONG CcPinReadWait;
ULONG CcMdlReadNoWait;
ULONG CcMdlReadWait;
ULONG CcLazyWriteHotSpots;
ULONG CcLazyWriteIos;
ULONG CcLazyWritePages;
ULONG CcDataFlushes;
ULONG CcDataPages;
ULONG CcLostDelayedWrites;
ULONG CcFastReadResourceMiss;
ULONG CcCopyReadWaitMiss;
ULONG CcFastMdlReadResourceMiss;
ULONG CcMapDataNoWaitMiss;
ULONG CcMapDataWaitMiss;
ULONG CcPinReadNoWaitMiss;
ULONG CcPinReadWaitMiss;
ULONG CcMdlReadNoWaitMiss;
ULONG CcMdlReadWaitMiss;
ULONG CcReadAheadIos;
LONG MmCacheTransitionCount;
LONG MmCacheReadCount;
LONG MmCacheIoCount;
UCHAR _PADDING11_[0xC];
PROCESSOR_POWER_STATE PowerState;
ULONG SharedReadyQueueOffset;
ULONG PrcbPad15[2];
ULONG DeviceInterrupts;
PVOID IsrDpcStats;
ULONG KeAlignmentFixupCount;
KDPC DpcWatchdogDpc;
KTIMER DpcWatchdogTimer;
SLIST_HEADER InterruptObjectPool;
//KAFFINITY_EX PackageProcessorSet;
UCHAR _PADDING12_[0x4];
ULONG SharedReadyQueueMask;
struct _KSHARED_READY_QUEUE* SharedReadyQueue;
ULONG CoreProcessorSet;
ULONG ScanSiblingMask;
ULONG LLCMask;
ULONG CacheProcessorMask[5];
ULONG ScanSiblingIndex;
CACHE_DESCRIPTOR Cache[6];
UCHAR CacheCount;
UCHAR PrcbPad20[3];
ULONG CachedCommit;
ULONG CachedResidentAvailable;
PVOID HyperPte;
PVOID WheaInfo;
PVOID EtwSupport;
UCHAR _PADDING13_[0x74];
SYNCH_COUNTERS SynchCounters;
//FILESYSTEM_DISK_COUNTERS FsCounters;
UCHAR _PADDING14_[0x8];
ULONG PanicStackBase;
PVOID IsrStack;
ULONG PteBitCache;
ULONG PteBitOffset;
KTIMER_TABLE TimerTable;
GENERAL_LOOKASIDE_POOL PPNxPagedLookasideList[32];
GENERAL_LOOKASIDE_POOL PPNPagedLookasideList[32];
GENERAL_LOOKASIDE_POOL PPPagedLookasideList[32];
SINGLE_LIST_ENTRY AbSelfIoBoostsList;
SINGLE_LIST_ENTRY AbPropagateBoostsList;
KDPC AbDpc;
UCHAR _PADDING15_[0x58];
//REQUEST_MAILBOX RequestMailbox[1];
// FIXME: Oldstyle stuff
#if (NTDDI_VERSION < NTDDI_WIN8) // FIXME
UCHAR CpuType;
volatile UCHAR DpcInterruptRequested;
volatile UCHAR DpcThreadRequested;
volatile UCHAR DpcThreadActive;
volatile ULONG TimerHand;
volatile ULONG TimerRequest;
ULONG DebugDpcTime;
LONG Sleeping;
KAFFINITY SetMember;
CHAR VendorString[13];
#endif
} KPRCB, *PKPRCB;
//
@ -218,58 +542,6 @@ typedef struct _KIPCR
PVOID PcrAlign[15];
KPRCB Prcb;
} KIPCR, *PKIPCR;
//
// Special Registers Structure (outside of CONTEXT)
// Based on WoA symbols
//
typedef struct _KSPECIAL_REGISTERS
{
ULONG64 Elr_El1;
UINT32 Spsr_El1;
ULONG64 Tpidr_El0;
ULONG64 Tpidrro_El0;
ULONG64 Tpidr_El1;
ULONG64 KernelBvr[8];
ULONG KernelBcr[8];
ULONG64 KernelWvr[2];
ULONG KernelWcr[2];
} KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
//
// ARM64 Architecture State
// Based on WoA symbols
//
typedef struct _KARM64_ARCH_STATE
{
ULONG64 Midr_El1;
ULONG64 Sctlr_El1;
ULONG64 Actlr_El1;
ULONG64 Cpacr_El1;
ULONG64 Tcr_El1;
ULONG64 Ttbr0_El1;
ULONG64 Ttbr1_El1;
ULONG64 Esr_El1;
ULONG64 Far_El1;
ULONG64 Pmcr_El0;
ULONG64 Pmcntenset_El0;
ULONG64 Pmccntr_El0;
ULONG64 Pmxevcntr_El0[31];
ULONG64 Pmxevtyper_El0[31];
ULONG64 Pmovsclr_El0;
ULONG64 Pmselr_El0;
ULONG64 Pmuserenr_El0;
ULONG64 Mair_El1;
ULONG64 Vbar_El1;
} KARM64_ARCH_STATE, *PKARM64_ARCH_STATE;
typedef struct _KPROCESSOR_STATE
{
KSPECIAL_REGISTERS SpecialRegisters; // 0
KARM64_ARCH_STATE ArchState; // 160
CONTEXT ContextFrame; // 800
} KPROCESSOR_STATE, *PKPROCESSOR_STATE;
//
// Macro to get current KPRCB
//

View file

@ -46,6 +46,64 @@ $if (_WDMDDK_)
#define EXCEPTION_WRITE_FAULT 1
#define EXCEPTION_EXECUTE_FAULT 8
#define PCR_MINOR_VERSION 1
#define PCR_MAJOR_VERSION 1
/* this is just ARM32 KPCR, it's a hack to move on*/
typedef struct _KPCR
{
_ANONYMOUS_UNION union
{
_ANONYMOUS_STRUCT struct
{
ULONG TibPad0[2];
PVOID Spare1;
struct _KPCR *Self;
struct _KPRCB *CurrentPrcb;
PKSPIN_LOCK_QUEUE LockArray;
PVOID Used_Self;
};
};
KIRQL CurrentIrql;
UCHAR SecondLevelCacheAssociativity;
ULONG Unused0[3];
USHORT MajorVersion;
USHORT MinorVersion;
ULONG StallScaleFactor;
PVOID Unused1[3];
ULONG KernelReserved[15];
ULONG SecondLevelCacheSize;
_ANONYMOUS_UNION union
{
USHORT SoftwareInterruptPending; // Software Interrupt Pending Flag
struct
{
UCHAR ApcInterrupt; // 0x01 if APC int pending
UCHAR DispatchInterrupt; // 0x01 if dispatch int pending
};
};
USHORT InterruptPad;
ULONG HalReserved[32];
PVOID KdVersionBlock;
PVOID Unused3;
ULONG PcrAlign1[8];
} KPCR, *PKPCR;
/* this isn't correct.. There's a far better way to do this then this static address. */
#define KIP0PCRADDRESS 0xFFFFF78000001000ULL /* FIXME!!! */
#define PCR ((KPCR * const)KIP0PCRADDRESS)
FORCEINLINE
PKPCR
KeGetPcr(
VOID)
{
return (PKPCR)(PCR);
}
NTSYSAPI
PKTHREAD
NTAPI