From 9132c47cd9ee7a3bee8a913f7f2f0661891fb0c8 Mon Sep 17 00:00:00 2001 From: belliash Date: Wed, 8 Feb 2023 23:40:58 +0100 Subject: [PATCH] Initial process and thread related structures --- sdk/xtdk/amd64/ketypes.h | 1 + sdk/xtdk/i686/ketypes.h | 1 + sdk/xtdk/ketypes.h | 34 ++++++++++++++++++++++++++++++++-- sdk/xtdk/xtkmapi.h | 1 + sdk/xtdk/xtstruct.h | 6 ++++++ xtoskrnl/includes/globals.h | 6 ++++++ xtoskrnl/ke/globals.c | 6 ++++++ 7 files changed, 53 insertions(+), 2 deletions(-) diff --git a/sdk/xtdk/amd64/ketypes.h b/sdk/xtdk/amd64/ketypes.h index a654b8a..ac1e213 100644 --- a/sdk/xtdk/amd64/ketypes.h +++ b/sdk/xtdk/amd64/ketypes.h @@ -444,6 +444,7 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK { ULONG MxCsr; UCHAR Number; + PKTHREAD CurrentThread; ULONG64 RspBase; ULONG_PTR SetMember; KPROCESSOR_STATE ProcessorState; diff --git a/sdk/xtdk/i686/ketypes.h b/sdk/xtdk/i686/ketypes.h index 8e75574..eaf05f8 100644 --- a/sdk/xtdk/i686/ketypes.h +++ b/sdk/xtdk/i686/ketypes.h @@ -347,6 +347,7 @@ typedef struct _KPROCESSOR_STATE /* Processor Control Block (PRCB) structure definition */ typedef struct _KPROCESSOR_CONTROL_BLOCK { + PKTHREAD CurrentThread; UCHAR Number; ULONG_PTR SetMember; KPROCESSOR_STATE ProcessorState; diff --git a/sdk/xtdk/ketypes.h b/sdk/xtdk/ketypes.h index 4e4175a..3158cd5 100644 --- a/sdk/xtdk/ketypes.h +++ b/sdk/xtdk/ketypes.h @@ -18,6 +18,14 @@ /* Maximum number of exception parameters */ #define EXCEPTION_MAXIMUM_PARAMETERS 15 +/* APC Types */ +typedef enum _MODE +{ + KernelMode, + UserMode, + MaximumMode +} MODE, *PMODE; + /* Exception disposition return values */ typedef enum _EXCEPTION_DISPOSITION { @@ -41,8 +49,30 @@ typedef struct _EXCEPTION_RECORD /* Exception registration record structure definition */ typedef struct _EXCEPTION_REGISTRATION_RECORD { - PEXCEPTION_REGISTRATION_RECORD Next; - PEXCEPTION_ROUTINE Handler; + PEXCEPTION_REGISTRATION_RECORD Next; + PEXCEPTION_ROUTINE Handler; } EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD; +/* APC state structure definition */ +typedef struct _KAPC_STATE +{ + LIST_ENTRY ApcListHead[MaximumMode]; + PKPROCESS Process; + BOOLEAN KernelApcInProgress; + BOOLEAN KernelApcPending; + BOOLEAN UserApcPending; +} KAPC_STATE, *PKAPC_STATE; + +/* Process control block structure definition */ +typedef struct _KPROCESS +{ + INT PlaceHolder; +} KPROCESS, *PKPROCESS; + +/* Thread control block structure definition */ +typedef struct _KTHREAD +{ + KAPC_STATE ApcState; +} KTHREAD, *PKTHREAD; + #endif /* __XTDK_KEFUNCS_H */ diff --git a/sdk/xtdk/xtkmapi.h b/sdk/xtdk/xtkmapi.h index b7bc1f5..825faa9 100644 --- a/sdk/xtdk/xtkmapi.h +++ b/sdk/xtdk/xtkmapi.h @@ -30,6 +30,7 @@ #include #include #include +#include #include /* Architecture-specific low level data types headers */ diff --git a/sdk/xtdk/xtstruct.h b/sdk/xtdk/xtstruct.h index ba9a9c1..19d2e6f 100644 --- a/sdk/xtdk/xtstruct.h +++ b/sdk/xtdk/xtstruct.h @@ -38,6 +38,7 @@ typedef enum _EFI_UART_PARITY_TYPE EFI_UART_PARITY_TYPE, *PEFI_UART_PARITY_TYPE; typedef enum _EFI_UART_STOP_BITS_TYPE EFI_UART_STOP_BITS_TYPE, *PEFI_UART_STOP_BITS_TYPE; typedef enum _EFI_UNIVERSA_GRAPHICS_BLT_OPERATION EFI_UNIVERSA_GRAPHICS_BLT_OPERATION, *PEFI_UNIVERSA_GRAPHICS_BLT_OPERATION; typedef enum _LOADER_MEMORY_TYPE LOADER_MEMORY_TYPE, *PLOADER_MEMORY_TYPE; +typedef enum _MODE MODE, *PMODE; typedef enum _SYSTEM_FIRMWARE_TYPE SYSTEM_FIRMWARE_TYPE, *PSYSTEM_FIRMWARE_TYPE; /* Structures forward references */ @@ -182,12 +183,17 @@ typedef struct _EFI_USB_DEVICE_PATH EFI_USB_DEVICE_PATH, *PEFI_USB_DEVICE_PATH; typedef struct _EFI_USB_WWID_DEVICE_PATH EFI_USB_WWID_DEVICE_PATH, *PEFI_USB_WWID_DEVICE_PATH; typedef struct _EFI_VENDOR_DEVICE_PATH EFI_VENDOR_DEVICE_PATH, *PEFI_VENDOR_DEVICE_PATH; typedef struct _EFI_VLAN_DEVICE_PATH EFI_VLAN_DEVICE_PATH, *PEFI_VLAN_DEVICE_PATH; +typedef struct _EPROCESS EPROCESS, *PEPROCESS; +typedef struct _ETHREAD ETHREAD, *PETHREAD; typedef struct _EXCEPTION_RECORD EXCEPTION_RECORD, *PEXCEPTION_RECORD; typedef struct _EXCEPTION_REGISTRATION_RECORD EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD; typedef struct _FIRMWARE_INFORMATION_BLOCK FIRMWARE_INFORMATION_BLOCK, *PFIRMWARE_INFORMATION_BLOCK; typedef struct _FLOAT128 FLOAT128, *PFLOAT128; typedef struct _GUID GUID, *PGUID; +typedef struct _KAPC_STATE KAPC_STATE, *PKAPC_STATE; typedef struct _KERNEL_INITIALIZATION_BLOCK KERNEL_INITIALIZATION_BLOCK, *PKERNEL_INITIALIZATION_BLOCK; +typedef struct _KPROCESS KPROCESS, *PKPROCESS; +typedef struct _KTHREAD KTHREAD, *PKTHREAD; typedef struct _LDR_DATA_TABLE_ENTRY LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; typedef struct _LIST_ENTRY LIST_ENTRY, *PLIST_ENTRY; typedef struct _LIST_ENTRY32 LIST_ENTRY32, *PLIST_ENTRY32; diff --git a/xtoskrnl/includes/globals.h b/xtoskrnl/includes/globals.h index 4407ac3..5237814 100644 --- a/xtoskrnl/includes/globals.h +++ b/xtoskrnl/includes/globals.h @@ -22,4 +22,10 @@ EXTERN VOID (*KeDbgPrint)(IN PWCHAR Format, IN ...); /* Kernel initialization block passed by boot loader */ EXTERN PKERNEL_INITIALIZATION_BLOCK KeInitializationBlock; +/* Kernel initial process */ +EXTERN EPROCESS KeInitialProcess; + +/* Kernel initial thread */ +EXTERN ETHREAD KeInitialThread; + #endif /* __XTOSKRNL_GLOBALS_H */ diff --git a/xtoskrnl/ke/globals.c b/xtoskrnl/ke/globals.c index 2dd9bd3..58d399c 100644 --- a/xtoskrnl/ke/globals.c +++ b/xtoskrnl/ke/globals.c @@ -17,3 +17,9 @@ VOID (*KeDbgPrint)(IN PWCHAR Format, IN ...) = NULL; /* Kernel initialization block passed by boot loader */ PKERNEL_INITIALIZATION_BLOCK KeInitializationBlock; + +/* Kernel initial process */ +EPROCESS KeInitialProcess; + +/* Kernel initial thread */ +ETHREAD KeInitialThread;