Add a nice little KIDT_ACCESS structure for setting IDT entries in a pretty way

svn path=/trunk/; revision=16329
This commit is contained in:
Alex Ionescu 2005-06-29 19:06:28 +00:00
parent 356bf8d78c
commit 8ebf837814
2 changed files with 32 additions and 1 deletions

View file

@ -906,11 +906,19 @@ VOID
SetInterruptGate(ULONG index, ULONG address) SetInterruptGate(ULONG index, ULONG address)
{ {
KIDTENTRY *idt; KIDTENTRY *idt;
KIDT_ACCESS Access;
/* Set the IDT Access Bits */
Access.Reserved = 0;
Access.Present = 1;
Access.Dpl = 0; /* Kernel-Mode */
Access.SystemSegmentFlag = 0;
Access.SegmentType = I386_INTERRUPT_GATE;
idt = (KIDTENTRY*)((ULONG)KeGetCurrentKPCR()->IDT + index * sizeof(KIDTENTRY)); idt = (KIDTENTRY*)((ULONG)KeGetCurrentKPCR()->IDT + index * sizeof(KIDTENTRY));
idt->Offset = address & 0xffff; idt->Offset = address & 0xffff;
idt->Selector = KERNEL_CS; idt->Selector = KERNEL_CS;
idt->Access = 0x8e00; idt->Access = Access.Value;
idt->ExtendedOffset = address >> 16; idt->ExtendedOffset = address >> 16;
} }

View file

@ -23,6 +23,13 @@
#define THREAD_WAIT_OBJECTS 4 #define THREAD_WAIT_OBJECTS 4
/* X86 80386 Segment Types */
#define I386_TSS 0x9
#define I386_ACTIVE_TSS 0xB
#define I386_CALL_GATE 0xC
#define I386_INTERRUPT_GATE 0xE
#define I386_TRAP_GATE 0xF
/* EXPORTED DATA *************************************************************/ /* EXPORTED DATA *************************************************************/
extern CHAR NTOSAPI KeNumberProcessors; extern CHAR NTOSAPI KeNumberProcessors;
extern LOADER_PARAMETER_BLOCK NTOSAPI KeLoaderBlock; extern LOADER_PARAMETER_BLOCK NTOSAPI KeLoaderBlock;
@ -226,6 +233,22 @@ typedef struct _KGDTENTRY
} HighWord; } HighWord;
} KGDTENTRY, *PKGDTENTRY; } KGDTENTRY, *PKGDTENTRY;
typedef struct _KIDT_ACCESS
{
union
{
struct
{
UCHAR Reserved;
UCHAR SegmentType:4;
UCHAR SystemSegmentFlag:1;
UCHAR Dpl:2;
UCHAR Present:1;
};
USHORT Value;
};
} KIDT_ACCESS, *PKIDT_ACCESS;
typedef struct _KIDTENTRY typedef struct _KIDTENTRY
{ {
USHORT Offset; USHORT Offset;