Add a hack in KiSystemStartupReal function until Better Times.

svn path=/trunk/; revision=42305
This commit is contained in:
Dmitry Gorbachev 2009-07-30 17:54:01 +00:00
parent cd03260db2
commit a640545b8b

View file

@ -712,18 +712,34 @@ KiSystemStartupReal(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Ke386SetDs(KGDT_R3_DATA | RPL_MASK); Ke386SetDs(KGDT_R3_DATA | RPL_MASK);
Ke386SetEs(KGDT_R3_DATA | RPL_MASK); Ke386SetEs(KGDT_R3_DATA | RPL_MASK);
/* Save NMI and double fault traps */ /* HACK compensates for KiRosPrepareForSystemStartup hack */
RtlCopyMemory(&NmiEntry, &Idt[2], sizeof(KIDTENTRY)); if ((ULONG)Idt == KiIdtDescriptor.Base)
RtlCopyMemory(&DoubleFaultEntry, &Idt[8], sizeof(KIDTENTRY)); {
USHORT FlippedSelector;
/* Copy kernel's trap handlers */ FlippedSelector = KiIdt[2].Selector;
RtlCopyMemory(Idt, KiIdt[2].Selector = KiIdt[2].ExtendedOffset;
(PVOID)KiIdtDescriptor.Base, KiIdt[2].ExtendedOffset = FlippedSelector;
KiIdtDescriptor.Limit + 1);
/* Restore NMI and double fault */ FlippedSelector = KiIdt[8].Selector;
RtlCopyMemory(&Idt[2], &NmiEntry, sizeof(KIDTENTRY)); KiIdt[8].Selector = KiIdt[8].ExtendedOffset;
RtlCopyMemory(&Idt[8], &DoubleFaultEntry, sizeof(KIDTENTRY)); KiIdt[8].ExtendedOffset = FlippedSelector;
}
else
{
/* 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: AppCpuInit:
/* Loop until we can release the freeze lock */ /* Loop until we can release the freeze lock */