forked from xt-sys/exectos
Replace manual IDT manipulation with SetIdtGate function call
This commit is contained in:
@@ -31,6 +31,13 @@ namespace AR
|
|||||||
OUT PVOID *TrampolineCode,
|
OUT PVOID *TrampolineCode,
|
||||||
OUT PULONG_PTR TrampolineSize);
|
OUT PULONG_PTR TrampolineSize);
|
||||||
STATIC XTAPI VOID InitializeProcessor(IN PVOID ProcessorStructures);
|
STATIC XTAPI VOID InitializeProcessor(IN PVOID ProcessorStructures);
|
||||||
|
STATIC XTAPI VOID SetIdtGate(IN PKIDTENTRY Idt,
|
||||||
|
IN USHORT Vector,
|
||||||
|
IN PVOID Handler,
|
||||||
|
IN USHORT Selector,
|
||||||
|
IN USHORT Ist,
|
||||||
|
IN USHORT Dpl,
|
||||||
|
IN USHORT Type);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
STATIC XTAPI VOID IdentifyProcessor(VOID);
|
STATIC XTAPI VOID IdentifyProcessor(VOID);
|
||||||
@@ -62,13 +69,6 @@ namespace AR
|
|||||||
STATIC XTAPI VOID SetGdtEntryBase(IN PKGDTENTRY Gdt,
|
STATIC XTAPI VOID SetGdtEntryBase(IN PKGDTENTRY Gdt,
|
||||||
IN USHORT Selector,
|
IN USHORT Selector,
|
||||||
IN ULONG_PTR Base);
|
IN ULONG_PTR Base);
|
||||||
STATIC XTAPI VOID SetIdtGate(IN PKIDTENTRY Idt,
|
|
||||||
IN USHORT Vector,
|
|
||||||
IN PVOID Handler,
|
|
||||||
IN USHORT Selector,
|
|
||||||
IN USHORT Ist,
|
|
||||||
IN USHORT Dpl,
|
|
||||||
IN USHORT Type);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,13 @@ namespace AR
|
|||||||
OUT PVOID *TrampolineCode,
|
OUT PVOID *TrampolineCode,
|
||||||
OUT PULONG_PTR TrampolineSize);
|
OUT PULONG_PTR TrampolineSize);
|
||||||
STATIC XTAPI VOID InitializeProcessor(IN PVOID ProcessorStructures);
|
STATIC XTAPI VOID InitializeProcessor(IN PVOID ProcessorStructures);
|
||||||
|
STATIC XTAPI VOID SetIdtGate(IN PKIDTENTRY Idt,
|
||||||
|
IN USHORT Vector,
|
||||||
|
IN PVOID Handler,
|
||||||
|
IN USHORT Selector,
|
||||||
|
IN USHORT Ist,
|
||||||
|
IN USHORT Dpl,
|
||||||
|
IN USHORT Type);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
STATIC XTAPI VOID IdentifyProcessor(VOID);
|
STATIC XTAPI VOID IdentifyProcessor(VOID);
|
||||||
@@ -67,13 +74,6 @@ namespace AR
|
|||||||
STATIC XTAPI VOID SetGdtEntryBase(IN PKGDTENTRY Gdt,
|
STATIC XTAPI VOID SetGdtEntryBase(IN PKGDTENTRY Gdt,
|
||||||
IN USHORT Selector,
|
IN USHORT Selector,
|
||||||
IN ULONG_PTR Base);
|
IN ULONG_PTR Base);
|
||||||
STATIC XTAPI VOID SetIdtGate(IN PKIDTENTRY Idt,
|
|
||||||
IN USHORT Vector,
|
|
||||||
IN PVOID Handler,
|
|
||||||
IN USHORT Selector,
|
|
||||||
IN USHORT Ist,
|
|
||||||
IN USHORT Dpl,
|
|
||||||
IN USHORT Type);
|
|
||||||
STATIC XTAPI VOID SetNonMaskableInterruptTssEntry(IN PKPROCESSOR_BLOCK ProcessorBlock,
|
STATIC XTAPI VOID SetNonMaskableInterruptTssEntry(IN PKPROCESSOR_BLOCK ProcessorBlock,
|
||||||
IN PVOID KernelFaultStack);
|
IN PVOID KernelFaultStack);
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,11 @@ KE::Irq::SetInterruptHandler(IN ULONG Vector,
|
|||||||
ProcessorBlock = KE::Processor::GetCurrentProcessorBlock();
|
ProcessorBlock = KE::Processor::GetCurrentProcessorBlock();
|
||||||
|
|
||||||
/* Update interrupt handler */
|
/* Update interrupt handler */
|
||||||
ProcessorBlock->IdtBase[(UCHAR) Vector].OffsetLow = ((ULONG_PTR)Handler & 0xFFFF);
|
AR::ProcSup::SetIdtGate(ProcessorBlock->IdtBase,
|
||||||
ProcessorBlock->IdtBase[(UCHAR) Vector].OffsetMiddle = (((ULONG_PTR)Handler >> 16) & 0xFFFF);
|
Vector,
|
||||||
ProcessorBlock->IdtBase[(UCHAR) Vector].OffsetHigh = (ULONG_PTR)Handler >> 32;
|
Handler,
|
||||||
|
KGDT_R0_CODE,
|
||||||
|
0,
|
||||||
|
KIDT_ACCESS_RING0,
|
||||||
|
AMD64_INTERRUPT_GATE);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,11 @@ KE::Irq::SetInterruptHandler(IN ULONG Vector,
|
|||||||
ProcessorBlock = KE::Processor::GetCurrentProcessorBlock();
|
ProcessorBlock = KE::Processor::GetCurrentProcessorBlock();
|
||||||
|
|
||||||
/* Update interrupt handler */
|
/* Update interrupt handler */
|
||||||
ProcessorBlock->IdtBase[(UCHAR) Vector].Offset = (USHORT)((ULONG)Handler & 0xFFFF);
|
AR::ProcSup::SetIdtGate(ProcessorBlock->IdtBase,
|
||||||
ProcessorBlock->IdtBase[(UCHAR) Vector].ExtendedOffset = (USHORT)((ULONG)Handler >> 16);
|
Vector,
|
||||||
|
Handler,
|
||||||
|
KGDT_R0_CODE,
|
||||||
|
0,
|
||||||
|
KIDT_ACCESS_RING0,
|
||||||
|
I686_INTERRUPT_GATE);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user