mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 17:45:41 +00:00
[FREELDR]
Fix KGDT64 names, initialize KGDT64_NULL and KGDT64_R3_CMCODE svn path=/branches/ros-amd64-bringup/; revision=45383
This commit is contained in:
parent
a5e16bf6a6
commit
c8f9aa3f4b
1 changed files with 25 additions and 17 deletions
|
@ -252,28 +252,36 @@ WinLdrSetupGdt(PVOID GdtBase, ULONG64 TssBase)
|
|||
PKGDTENTRY64 Entry;
|
||||
KDESCRIPTOR GdtDesc;
|
||||
|
||||
/* Setup KGDT_64_R0_CODE */
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT_64_R0_CODE);
|
||||
/* Setup KGDT64_NULL */
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT64_NULL);
|
||||
*(PULONG64)Entry = 0x0000000000000000ULL;
|
||||
|
||||
/* Setup KGDT64_R0_CODE */
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT64_R0_CODE);
|
||||
*(PULONG64)Entry = 0x00209b0000000000ULL;
|
||||
|
||||
/* Setup KGDT_64_R0_SS */
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT_64_R0_SS);
|
||||
/* Setup KGDT64_R0_DATA */
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT64_R0_DATA);
|
||||
*(PULONG64)Entry = 0x00cf93000000ffffULL;
|
||||
|
||||
/* Setup KGDT_64_DATA */
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT_64_DATA);
|
||||
/* Setup KGDT64_R3_CMCODE */
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT64_R3_CMCODE);
|
||||
*(PULONG64)Entry = 0x00cffb000000ffffULL;
|
||||
|
||||
/* Setup KGDT64_R3_DATA */
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT64_R3_DATA);
|
||||
*(PULONG64)Entry = 0x00cff3000000ffffULL;
|
||||
|
||||
/* Setup KGDT_64_R3_CODE */
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT_64_R3_CODE);
|
||||
/* Setup KGDT64_R3_CODE */
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT64_R3_CODE);
|
||||
*(PULONG64)Entry = 0x0020fb0000000000ULL;
|
||||
|
||||
/* Setup KGDT_32_R3_TEB */
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT_32_R3_TEB);
|
||||
/* Setup KGDT64_R3_CMTEB */
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT64_R3_CMTEB);
|
||||
*(PULONG64)Entry = 0xff40f3fd50003c00ULL;
|
||||
|
||||
/* Setup TSS entry */
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT_TSS);
|
||||
Entry = KiGetGdtEntry(GdtBase, KGDT64_SYS_TSS);
|
||||
KiInitGdtEntry(Entry, TssBase, sizeof(KTSS), I386_TSS, 0);
|
||||
|
||||
/* Setup GDT descriptor */
|
||||
|
@ -334,14 +342,14 @@ WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG64 Pcr, IN ULONG64 Tss)
|
|||
// __lldt(0);
|
||||
|
||||
/* Load selectors for DS/ES/FS/GS/SS */
|
||||
Ke386SetDs(KGDT_64_DATA | RPL_MASK); // 0x2b
|
||||
Ke386SetEs(KGDT_64_DATA | RPL_MASK); // 0x2b
|
||||
Ke386SetFs(KGDT_32_R3_TEB | RPL_MASK); // 0x53
|
||||
Ke386SetGs(KGDT_64_DATA | RPL_MASK); // 0x2b
|
||||
Ke386SetSs(KGDT_64_R0_SS); // 0x18
|
||||
Ke386SetDs(KGDT64_R3_DATA | RPL_MASK); // 0x2b
|
||||
Ke386SetEs(KGDT64_R3_DATA | RPL_MASK); // 0x2b
|
||||
Ke386SetFs(KGDT64_R3_CMTEB | RPL_MASK); // 0x53
|
||||
Ke386SetGs(KGDT64_R3_DATA | RPL_MASK); // 0x2b
|
||||
Ke386SetSs(KGDT64_R0_DATA); // 0x18
|
||||
|
||||
/* Load TSR */
|
||||
__ltr(KGDT_TSS);
|
||||
__ltr(KGDT64_SYS_TSS);
|
||||
|
||||
DPRINTM(DPRINT_WINDOWS, "leave WinLdrSetProcessorContext\n");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue