mirror of
https://github.com/reactos/reactos.git
synced 2024-09-30 22:47:28 +00:00
- Copy kernel's IDT entries to the IDT we've got from the bootloader. Fixes boot-process initiated by ntldr-compatible loaders.
svn path=/trunk/; revision=29477
This commit is contained in:
parent
336b29de42
commit
5257ae8196
|
@ -661,6 +661,7 @@ KiSystemStartup(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
|||
ULONG InitialStack;
|
||||
PKGDTENTRY Gdt;
|
||||
PKIDTENTRY Idt;
|
||||
KIDTENTRY NmiEntry, DoubleFaultEntry;
|
||||
PKTSS Tss;
|
||||
PKIPCR Pcr;
|
||||
|
||||
|
@ -722,6 +723,19 @@ KiSystemStartup(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
|||
Ke386SetDs(KGDT_R3_DATA | RPL_MASK);
|
||||
Ke386SetEs(KGDT_R3_DATA | RPL_MASK);
|
||||
|
||||
/* Save NMI and double fault traps */
|
||||
RtlCopyMemory(&NmiEntry, &Idt[2], sizeof(KIDTENTRY));
|
||||
RtlCopyMemory(&DoubleFaultEntry, &Idt[8], sizeof(KIDTENTRY));
|
||||
|
||||
/* Copy kernel's trap handlers */
|
||||
RtlCopyMemory(Idt,
|
||||
(PVOID)KiIdtDescriptor.Base,
|
||||
KiIdtDescriptor.Limit + 1);
|
||||
|
||||
/* Restore NMI and double fault */
|
||||
RtlCopyMemory(&Idt[2], &NmiEntry, sizeof(KIDTENTRY));
|
||||
RtlCopyMemory(&Idt[8], &DoubleFaultEntry, sizeof(KIDTENTRY));
|
||||
|
||||
AppCpuInit:
|
||||
/* Loop until we can release the freeze lock */
|
||||
do
|
||||
|
|
Loading…
Reference in a new issue