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,6 +712,21 @@ KiSystemStartupReal(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Ke386SetDs(KGDT_R3_DATA | RPL_MASK);
Ke386SetEs(KGDT_R3_DATA | RPL_MASK);
/* HACK compensates for KiRosPrepareForSystemStartup hack */
if ((ULONG)Idt == KiIdtDescriptor.Base)
{
USHORT FlippedSelector;
FlippedSelector = KiIdt[2].Selector;
KiIdt[2].Selector = KiIdt[2].ExtendedOffset;
KiIdt[2].ExtendedOffset = FlippedSelector;
FlippedSelector = KiIdt[8].Selector;
KiIdt[8].Selector = KiIdt[8].ExtendedOffset;
KiIdt[8].ExtendedOffset = FlippedSelector;
}
else
{
/* Save NMI and double fault traps */
RtlCopyMemory(&NmiEntry, &Idt[2], sizeof(KIDTENTRY));
RtlCopyMemory(&DoubleFaultEntry, &Idt[8], sizeof(KIDTENTRY));
@ -724,6 +739,7 @@ KiSystemStartupReal(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
/* 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 */