bond/HOS-BAK/kclib/KeDef.h
hyperassembler a0c48a991e Initial
2014-05-30 01:55:32 -07:00

307 lines
8.3 KiB
C

#ifndef _KeDef_h_
#define _KeDef_h_
//Types
typedef unsigned int ULONG32,*PULONG32;
typedef unsigned int DWORD,*PDWORD;
typedef unsigned long long QWORD,*PQWORD;
typedef unsigned long long ULONG64,*PULONG64;
typedef unsigned char ULONG8,*PULONG8;
typedef unsigned char BYTE,*PBYTE;
typedef unsigned short ULONG16,*PULONG16;
typedef void VOID,*PVOID;
typedef char CHAR,*PCHAR;
//Physical Addresses
#define GDT_SELECTOR(Index,RPL) (((Index) << 3) + (RPL))
#define GDT_SELECTOR_DUMMY GDT_SELECTOR(0,0)
#define GDT_SELECTOR_GRAPH GDT_SELECTOR(1,0)
#define GDT_SELECTOR_CODE GDT_SELECTOR(2,0)
#define GDT_SELECTOR_DATA GDT_SELECTOR(3,0)
#define GDT_SELECTOR_USER_DATA GDT_SELECTOR(4,3)
#define GDT_SELECTOR_USER_CODE GDT_SELECTOR(5,3)
#define GDT_SELECTOR_LDT GDT_SELECTOR(6,0)
#define GDT_SELECTOR_TSS GDT_SELECTOR(7,0)
#define GDT_INDEX_DUMMY 0
#define GDT_INDEX_GRAPH 1
#define GDT_INDEX_CODE 2
#define GDT_INDEX_DATA 3
#define GDT_INDEX_USER_CODE 4
#define GDT_INDEX_USER_DATA 5
#define GDT_INDEX_LDT 6
#define GDT_INDEX_TSS 7
// #define LDT_SELECTOR_CODE 0
// #define LDT_SELECTOR_DATA 8
// #define LDT_SELECTOR_GRAPH 16
// #define LDT_INDEX_CODE 0
// #define LDT_INDEX_DATA 1
// #define LDT_INDEX_GRAPH 2
#define KeKernelPhysicalAddress 0x30000
#define KeLoaderPhysicalAddress 0x90000
#define KeBootPhysicalAddress 0x07c00
#define KePDEBase 0x100000
#define KePTEBase 0x101000
//DTs
#define GDT_DESCRIPTOR_NUMBER 128
#define IDT_GATE_NUMBER 256
#define LDT_DESCRIPTOR_NUMBER 3
#define MAXIMUM_PROCESS_NUMBER 1
#define PROCESS_STACK_MAX_SIZE 1024
//SegmentDescriptor_Attribute
//IDT
#define INT_M_CTL 0x20
#define INT_M_CTLMASK 0x21
#define INT_S_CTL 0xA0
#define INT_S_CTLMASK 0xA1
#define INT_VECTOR_IRQ0 0x20
#define INT_VECTOR_IRQ8 0x28
#define DA_32 0x4000 /* 32 λ¶Î */
#define DA_LIMIT_4K 0x8000 /* ¶Î½çÏÞÁ£¶ÈΪ 4K ×Ö½Ú */
#define DA_DPL0 0x00 /* DPL = 0 */
#define DA_DPL1 0x20 /* DPL = 1 */
#define DA_DPL2 0x40 /* DPL = 2 */
#define DA_DPL3 0x60 /* DPL = 3 */
/* ´æ´¢¶ÎÃèÊö·ûÀàÐÍֵ˵Ã÷ */
#define DA_DR 0x90 /* ´æÔÚµÄÖ»¶ÁÊý¾Ý¶ÎÀàÐÍÖµ */
#define DA_DRW 0x92 /* ´æÔڵĿɶÁдÊý¾Ý¶ÎÊôÐÔÖµ */
#define DA_DRWA 0x93 /* ´æÔÚµÄÒÑ·ÃÎʿɶÁдÊý¾Ý¶ÎÀàÐÍÖµ */
#define DA_C 0x98 /* ´æÔÚµÄÖ»Ö´ÐдúÂë¶ÎÊôÐÔÖµ */
#define DA_CR 0x9A /* ´æÔڵĿÉÖ´ÐпɶÁ´úÂë¶ÎÊôÐÔÖµ */
#define DA_CCO 0x9C /* ´æÔÚµÄÖ»Ö´ÐÐÒ»Ö´úÂë¶ÎÊôÐÔÖµ */
#define DA_CCOR 0x9E /* ´æÔڵĿÉÖ´ÐпɶÁÒ»Ö´úÂë¶ÎÊôÐÔÖµ */
/* ϵͳ¶ÎÃèÊö·ûÀàÐÍֵ˵Ã÷ */
#define DA_LDT 0x82 /* ¾Ö²¿ÃèÊö·û±í¶ÎÀàÐÍÖµ */
#define DA_TaskGate 0x85 /* ÈÎÎñÃÅÀàÐÍÖµ */
#define DA_386TSS 0x89 /* ¿ÉÓà 386 ÈÎÎñ״̬¶ÎÀàÐÍÖµ */
#define DA_386CGate 0x8C /* 386 µ÷ÓÃÃÅÀàÐÍÖµ */
#define DA_386IGate 0x8E /* 386 ÖжÏÃÅÀàÐÍÖµ */
#define DA_386TGate 0x8F /* 386 ÏÝÚåÃÅÀàÐÍÖµ */
/* Ñ¡Ôñ×ÓÀàÐÍֵ˵Ã÷ */
/* ÆäÖÐ, SA_ : Selector Attribute */
#define SA_RPL_MASK 0xFFFC
#define SA_RPL0 0
#define SA_RPL1 1
#define SA_RPL2 2
#define SA_RPL3 3
#define SA_TI_MASK 0xFFFB
#define SA_TIG 0
#define SA_TIL 4
/* RPL */
#define RPL_KRNL SA_RPL0
#define RPL_TASK SA_RPL1
#define RPL_USER SA_RPL3
//
#define INT_VECTOR_DIVIDE 0x0
#define INT_VECTOR_DEBUG 0x1
#define INT_VECTOR_NMI 0x2
#define INT_VECTOR_BREAKPOINT 0x3
#define INT_VECTOR_OVERFLOW 0x4
#define INT_VECTOR_BOUNDS 0x5
#define INT_VECTOR_INVAL_OP 0x6
#define INT_VECTOR_COPROC_NOT 0x7
#define INT_VECTOR_DOUBLE_FAULT 0x8
#define INT_VECTOR_COPROC_SEG 0x9
#define INT_VECTOR_INVAL_TSS 0xA
#define INT_VECTOR_SEG_NOT 0xB
#define INT_VECTOR_STACK_FAULT 0xC
#define INT_VECTOR_PROTECTION 0xD
#define INT_VECTOR_PAGE_FAULT 0xE
#define INT_VECTOR_COPROC_ERR 0x10
//System Data Structures
#pragma pack(push)
#pragma pack(1)
typedef struct _GDT_DESCRIPTOR
{
ULONG16 LimitLow;
ULONG16 BaseLow;
ULONG8 BaseMid;
ULONG8 Attr1;
ULONG8 LimitHigh_Attr2;
ULONG8 BaseHigh;
} GDT_DESCRIPTOR,*PGDT_DESCRIPTOR;
typedef GDT_DESCRIPTOR LDT_DESCRIPTOR,*PLDT_DESCRIPTRO;
typedef struct _GATE
{
ULONG16 OffsetLow;
ULONG16 Selector;
ULONG8 Count;
ULONG8 Attr;
ULONG16 OffsetHigh;
} GATE,*PGATE;
//Write GDT
#define KeWriteGDT_AVL_1 0x00100000
#define KeWriteGDT_AVL_0 0x0
#define KeWriteGDT_DB_0 0x0
#define KeWriteGDT_DB_1 0x00400000
#define KeWriteGDT_P_0 0x0
#define KeWriteGDT_P_1 0x00008000
#define KeWriteGDT_G_0 0x0
#define KeWriteGDT_G_1 0x00800000
#define KeWriteGDT_L_0 0x0
#define KeWriteGDT_L_1 0x00200000
#define KeWriteGDT_DPL_0 0x0
#define KeWriteGDT_DPL_1 0x00002000
#define KeWriteGDT_DPL_2 0x00004000
#define KeWriteGDT_DPL_3 0x00006000
#define KeWriteGDT_S_0 0x0
#define KeWriteGDT_S_1 0x00001000
#define KeWriteGDT_Type_Data_ReadOnly 0x0
#define KeWriteGDT_Type_Data_ReadOnlyAccessed 0x00000100
#define KeWriteGDT_Type_Data_ReadWrite 0x00000200
#define KeWriteGDT_Type_Data_ReadWriteAccessed 0x00000300
#define KeWriteGDT_Type_Data_ReadOnlyExpandDown 0x00000400
#define KeWriteGDT_Type_Data_ReadOnlyExpandDownAccessed 0x00000500
#define KeWriteGDT_Type_Data_ReadWriteExpandDown 0x00000600
#define KeWriteGDT_Type_Data_ReadWriteExpandDownAccessed 0x00000700
#define KeWriteGDT_Type_Code_ExecuteOnly 0x00000800
#define KeWriteGDT_Type_Code_ExecuteOnlyAccessed 0x00000900
#define KeWriteGDT_Type_Code_ExecuteRead 0x00000A00
#define KeWriteGDT_Type_Code_ExecuteReadAccessed 0x00000B00
#define KeWriteGDT_Type_Code_ExecuteOnlyConforming 0x00000C00
#define KeWriteGDT_Type_Code_ExecuteOnlyConformingAccessed 0x00000D00
#define KeWriteGDT_Type_Code_ExecuteReadConforming 0x00000E00
#define KeWriteGDT_Type_Code_ExecuteReadConformingAccessed 0x00000F00
#define KeWriteGDT_Type_System_Reserved1 0x00000000
#define KeWriteGDT_Type_System_16BitsTssAvailable 0x00000100
#define KeWriteGDT_Type_System_LDT 0x00000200
#define KeWriteGDT_Type_System_16BitsTssBusy 0x00000300
#define KeWriteGDT_Type_System_16BitsCallGate 0x00000400
#define KeWriteGDT_Type_System_TaskGate 0x00000500
#define KeWriteGDT_Type_System_16BitsInterruptGate 0x00000600
#define KeWriteGDT_Type_System_16BitsTrapGate 0x00000700
#define KeWriteGDT_Type_System_Reserved2 0x00000800
#define KeWriteGDT_Type_System_32BitsTSSAvailable 0x00000900
#define KeWriteGDT_Type_System_Reserved3 0x00000A00
#define KeWriteGDT_Type_System_32BitsTSSBusy 0x00000B00
#define KeWriteGDT_Type_System_32BitsCallGate 0x00000C00
#define KeWriteGDT_Type_System_Reserved4 0x00000D00
#define KeWriteGDT_Type_System_32BitsInterruptGate 0x00000E00
#define KeWriteGDT_Type_System_32BitsTrapGate 0x00000F00
typedef struct _Write_GDT_DESCRIPTOR
{
ULONG32 Base; //+0
ULONG32 Limit; //+4
ULONG32 AVL; //+8
ULONG32 DB; // +12
ULONG32 P; //+16
ULONG32 DPL; // +20
ULONG32 G; //+24
ULONG32 S; //+28
ULONG32 Type; //+32
} Write_GDT_DESCRIPTOR, *PWrite_GDT_DESCRIPTOR;
#define KeWriteIDT_P_0 0x0
#define KeWriteIDT_P_1 0x00008000
#define KeWriteIDT_DPL_0 0x0
#define KeWriteIDT_DPL_1 0x00002000
#define KeWriteIDT_DPL_2 0x00004000
#define KeWriteIDT_DPL_3 0x00006000
#define KeWriteIDT_D_0 0x0
#define KeWriteIDT_D_1 2048
#define KeWriteIDT_GateType_TaskGate 256
#define KeWriteIDT_GateType_InterruptGate 1536
#define KeWriteIDT_GateType_TrapGate 1792
//IDT Descriptor
typedef struct _Write_IDT_DESCRIPTOR
{
ULONG32 D;
ULONG32 Offset;
ULONG32 Selector;
ULONG32 DPL;
ULONG32 P;
ULONG32 GateType;
} Write_IDT_DESCRIPTOR, *PWrite_IDT_DESCRIPTOR;
//Process Stuff
typedef struct _hProcess_RestartStack
{
ULONG32 gs;
ULONG32 fs;
ULONG32 es;
ULONG32 ds;
ULONG32 edi;
ULONG32 esi;
ULONG32 ebp;
ULONG32 Kernel_esp;
ULONG32 ebx;
ULONG32 edx;
ULONG32 ecx;
ULONG32 eax;
ULONG32 ReturnAddress;
ULONG32 eip;
ULONG32 cs;
ULONG32 eFlags;
ULONG32 esp;
ULONG32 ss;
} hProcess_RestartStack,*PhProcess_RestartStack;
typedef ULONG32 PROCESSPRIVILEGE;
#define Process_Priviliege_User 0x01
#define Process_Priviliege_Kernel 0x00
typedef struct _hProcess
{
hProcess_RestartStack RestartStack;
//ULONG16 LDTSelector;
//LDT_DESCRIPTOR ProcessLDT[LDT_DESCRIPTOR_NUMBER];
ULONG32 ProcessID;
PCHAR ProcessName;
PROCESSPRIVILEGE Privilege;
} hPrcocess,*PhProcess;
typedef struct _TSS {
ULONG32 BackLine;
ULONG32 esp0;
ULONG32 ss0;
ULONG32 esp1;
ULONG32 ss1;
ULONG32 esp2;
ULONG32 ss2;
ULONG32 cr3;
ULONG32 eip;
ULONG32 flags;
ULONG32 eax;
ULONG32 ecx;
ULONG32 edx;
ULONG32 ebx;
ULONG32 esp;
ULONG32 ebp;
ULONG32 esi;
ULONG32 edi;
ULONG32 es;
ULONG32 cs;
ULONG32 ss;
ULONG32 ds;
ULONG32 fs;
ULONG32 gs;
ULONG32 LDT;
ULONG16 Trap;
ULONG16 IOBase;
} TSS,*PTSS;
typedef VOID (*PExceptionHandleFunc)(VOID);
#pragma pack(pop)
#endif