diff --git a/src/core/kernel/common/types.h b/src/core/kernel/common/types.h index bf5774d94..ab29c23dd 100644 --- a/src/core/kernel/common/types.h +++ b/src/core/kernel/common/types.h @@ -1401,7 +1401,7 @@ typedef struct _KTIMER ULARGE_INTEGER DueTime; // 0x10 LIST_ENTRY TimerListEntry; // 0x18 struct _KDPC *Dpc; // 0x20 - long_xt Period; // 0x24 + long_xt Period; // 0x24 } KTIMER, *PKTIMER; @@ -1424,7 +1424,7 @@ typedef void_xt (NTAPI *PKSTART_ROUTINE) // * opposed to 1. // * // ****************************************************************** -typedef void_xt (*PKSYSTEM_ROUTINE) +typedef void_xt (NTAPI *PKSYSTEM_ROUTINE) ( IN PKSTART_ROUTINE StartRoutine OPTIONAL, IN PVOID StartContext OPTIONAL @@ -1435,7 +1435,7 @@ struct _KDPC; // ****************************************************************** // * PKDEFERRED_ROUTINE // ****************************************************************** -typedef void_xt (__stdcall *PKDEFERRED_ROUTINE) +typedef void_xt (NTAPI *PKDEFERRED_ROUTINE) ( IN struct _KDPC *Dpc, IN PVOID DeferredContext, @@ -1474,6 +1474,14 @@ typedef struct _DPC_QUEUE_ENTRY } DPC_QUEUE_ENTRY, *PDPC_QUEUE_ENTRY; + +// ****************************************************************** +// * NPX_STATE flags +// ****************************************************************** +// Source: ReactOS +#define NPX_STATE_NOT_LOADED 0xA +#define NPX_STATE_LOADED 0x0 + // ****************************************************************** // * KFLOATING_SAVE // ****************************************************************** @@ -1492,6 +1500,21 @@ typedef struct _KFLOATING_SAVE } KFLOATING_SAVE, *PKFLOATING_SAVE; +// ****************************************************************** +// * KTHREAD_STATE +// ****************************************************************** +// Source: ReactOS +typedef enum _KTHREAD_STATE +{ + Initialized, + Ready, + Running, + Standby, + Terminated, + Waiting, + Transition +} KTHREAD_STATE, * PKTHREAD_STATE; + #define DISPATCHER_OBJECT_TYPE_MASK 0x7 // ****************************************************************** // * KOBJECTS @@ -1529,7 +1552,7 @@ typedef void_xt (NTAPI *PKNORMAL_ROUTINE) // ****************************************************************** // * PKKERNEL_ROUTINE // ****************************************************************** -typedef void_xt (*PKKERNEL_ROUTINE) +typedef void_xt (NTAPI *PKKERNEL_ROUTINE) ( IN struct _KAPC *Apc, IN OUT PKNORMAL_ROUTINE *NormalRoutine, @@ -1541,7 +1564,7 @@ typedef void_xt (*PKKERNEL_ROUTINE) // ****************************************************************** // * PKRUNDOWN_ROUTINE // ****************************************************************** -typedef void_xt (*PKRUNDOWN_ROUTINE) +typedef void_xt (NTAPI *PKRUNDOWN_ROUTINE) ( IN struct _KAPC *Apc ); @@ -1549,7 +1572,7 @@ typedef void_xt (*PKRUNDOWN_ROUTINE) // ****************************************************************** // * PKSYNCHRONIZE_ROUTINE // ****************************************************************** -typedef boolean_xt (*PKSYNCHRONIZE_ROUTINE) +typedef boolean_xt (NTAPI *PKSYNCHRONIZE_ROUTINE) ( IN PVOID SynchronizeContext ); @@ -1557,7 +1580,7 @@ typedef boolean_xt (*PKSYNCHRONIZE_ROUTINE) // ****************************************************************** // * PKSERVICE_ROUTINE // ****************************************************************** -typedef boolean_xt (*PKSERVICE_ROUTINE) +typedef boolean_xt (NTAPI *PKSERVICE_ROUTINE) ( IN struct _KINTERRUPT *Interrupt, IN PVOID ServiceContext @@ -1636,8 +1659,8 @@ PS_STATISTICS, *PPS_STATISTICS; typedef struct _RTL_CRITICAL_SECTION { DISPATCHER_HEADER Event; // 0x00 - long_xt LockCount; // 0x10 - long_xt RecursionCount; // 0x14 + long_xt LockCount; // 0x10 + long_xt RecursionCount; // 0x14 HANDLE OwningThread; // 0x18 } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION; @@ -1654,7 +1677,7 @@ typedef struct _NT_TIB union { PVOID FiberData; // 0x10 for TIB - ulong_xt Version; // 0x10 for TEB (?) + ulong_xt Version; // 0x10 for TEB (?) } u_a; PVOID ArbitraryUserPointer; // 0x14 @@ -1753,6 +1776,40 @@ typedef struct _KQUEUE } KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE; +// ****************************************************************** +// * KSTART_FRAME +// ****************************************************************** +typedef struct _KSTART_FRAME +{ + PKSYSTEM_ROUTINE SystemRoutine; + PKSTART_ROUTINE StartRoutine; + PVOID StartContext; +} KSTART_FRAME, *PKSTART_FRAME; + +// ****************************************************************** +// * KSWITCHFRAME +// ****************************************************************** +typedef struct _KSWITCHFRAME +{ + PVOID ExceptionList; + dword_xt Unknown; + PVOID RetAddr; +} KSWITCHFRAME, *PKSWITCHFRAME; + +// Exception record flags +// Source: ReactOS +// NOTE: Do not exclude X_ prefix, they will conflict with the macros provided by Windows +#define X_EXCEPTION_NONCONTINUABLE 0x01 +#define X_EXCEPTION_UNWINDING 0x02 +#define X_EXCEPTION_EXIT_UNWIND 0x04 +#define X_EXCEPTION_STACK_INVALID 0x08 +#define X_EXCEPTION_NESTED_CALL 0x10 +#define X_EXCEPTION_TARGET_UNWIND 0x20 +#define X_EXCEPTION_COLLIDED_UNWIND 0x40 +#define X_EXCEPTION_UNWIND (X_EXCEPTION_UNWINDING | X_EXCEPTION_EXIT_UNWIND | X_EXCEPTION_TARGET_UNWIND | X_EXCEPTION_COLLIDED_UNWIND) + +#define X_EXCEPTION_CHAIN_END 0xFFFFFFFF + // ****************************************************************** // * EXCEPTION_DISPOSITION // ****************************************************************** @@ -1925,11 +1982,14 @@ typedef struct _ETHREAD LARGE_INTEGER CreateTime; // 0x110 LARGE_INTEGER ExitTime; // 0x118 ntstatus_xt ExitStatus; // 0x120 - uchar_xt Unknown[0x8]; // 0x124 + LIST_ENTRY ReaperLink; // 0x124 HANDLE UniqueThread; // 0x12C + PVOID StartAddress; // 0x130 + LIST_ENTRY IrpList; // 0x134 + PVOID DebugData; // 0x13C } ETHREAD, *PETHREAD; -static_assert(sizeof(ETHREAD) == 0x130); +static_assert(sizeof(ETHREAD) == 0x140); // ****************************************************************** // * PCREATE_THREAD_NOTIFY_ROUTINE @@ -1954,13 +2014,13 @@ typedef struct _KPRCB struct _KTHREAD* NextThread; // 0x04, KPCR : 0x2C struct _KTHREAD* IdleThread; // 0x08, KPCR : 0x30 - ulong_xt Unknown1[7]; // 0x0C, KPCR : 0x34 + ulong_xt Unknown1[7]; // 0x0C, KPCR : 0x34 LIST_ENTRY DpcListHead; // 0x28, KPCR : 0x50 - ulong_xt DpcRoutineActive; // 0x30, KPCR : 0x58 + ulong_xt DpcRoutineActive; // 0x30, KPCR : 0x58 // This completes the total size of the structure (presumably) - uchar_xt Unknown[0x224]; + uchar_xt Unknown[0x224]; } KPRCB, *PKPRCB; @@ -1977,7 +2037,7 @@ typedef struct _KPCR struct _NT_TIB NtTib; // 0x00 struct _KPCR *SelfPcr; // 0x1C struct _KPRCB *Prcb; // 0x20 - uchar_xt Irql; // 0x24 + uchar_xt Irql; // 0x24 struct _KPRCB PrcbData; // 0x28 } KPCR, *PKPCR; @@ -2532,6 +2592,13 @@ typedef struct _FLOATING_SAVE_AREA dword_xt Cr0NpxState; } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; #pragma pack(pop) +static_assert(sizeof(_FLOATING_SAVE_AREA) == 0x204); + +typedef struct _FX_SAVE_AREA { + FLOATING_SAVE_AREA FloatSave; + ulong_xt Unknown[3]; +} FX_SAVE_AREA, *PFX_SAVE_AREA; +static_assert(sizeof(_FX_SAVE_AREA) == 0x210); typedef struct _CONTEXT { diff --git a/src/core/kernel/exports/EmuKrnlRtl.cpp b/src/core/kernel/exports/EmuKrnlRtl.cpp index 23875ba04..0f065f379 100644 --- a/src/core/kernel/exports/EmuKrnlRtl.cpp +++ b/src/core/kernel/exports/EmuKrnlRtl.cpp @@ -50,29 +50,9 @@ namespace NtDll #undef RtlFillMemory #undef RtlMoveMemory #undef RtlZeroMemory -#undef EXCEPTION_NONCONTINUABLE -#undef EXCEPTION_UNWINDING -#undef EXCEPTION_EXIT_UNWIND -#undef EXCEPTION_STACK_INVALID -#undef EXCEPTION_NESTED_CALL -#undef EXCEPTION_TARGET_UNWIND -#undef EXCEPTION_COLLIDED_UNWIND -#undef EXCEPTION_UNWIND #endif // _WIN32 -// Exception record flags -// Source: ReactOS -// NOTE: don't put these in xboxkrnl.h, they will conflict with the macros provided by Windows -#define EXCEPTION_NONCONTINUABLE 0x01 -#define EXCEPTION_UNWINDING 0x02 -#define EXCEPTION_EXIT_UNWIND 0x04 -#define EXCEPTION_STACK_INVALID 0x08 -#define EXCEPTION_NESTED_CALL 0x10 -#define EXCEPTION_TARGET_UNWIND 0x20 -#define EXCEPTION_COLLIDED_UNWIND 0x40 -#define EXCEPTION_UNWIND (EXCEPTION_UNWINDING | EXCEPTION_EXIT_UNWIND | EXCEPTION_TARGET_UNWIND | EXCEPTION_COLLIDED_UNWIND) - xbox::dword_xt WINAPI RtlAnsiStringToUnicodeSize(const xbox::STRING *str) { return (str->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR); @@ -1503,7 +1483,7 @@ XBSYSAPI EXPORTNUM(303) xbox::void_xt NTAPI xbox::RtlRaiseStatus EXCEPTION_RECORD record; record.ExceptionCode = Status; - record.ExceptionFlags = EXCEPTION_NONCONTINUABLE; + record.ExceptionFlags = X_EXCEPTION_NONCONTINUABLE; record.ExceptionRecord = NULL; record.NumberParameters = 0;