Bei mir will das einfach nicht so richtig klappen, ich habe jetzt die Funktion zum Aktivieren des Pagings so weit gekürzt wie möglich, aber geht immer noch nicht:
BOOL StrippedDown_VmmInitialize()
{
PLONG PageDir = MmAllocPage(&PoolExt);
PLONG PageTbl = MmAllocPage(&PoolExt);
PageDir[0] = (LONG)PageTbl | 3;
LONG i;
for (i = 1; i < 1024; i++)
PageDir[i] = 0 | 2;
LONG Address = 0;
for (i = 0; i < 1024; i++)
{
PageTbl[i] = Address | 3;
Address += 4096;
}
WriteCR3(PageDir);
WriteCR0(ReadCR0() | 0x80000000);
for(;;);
return TRUE;
}
PLONG ist ein long* und LONG ein long, MmAllocPage() alloziiert ein 4KB grosses Speicherstück in einem Speicherpool, PoolExt ist ein Pool mit dem Speicher nach dem Kernel bis ans Ende. Die WriteCR* und ReadCR* sind in einem externen Assemblerfile und der Kernel wird an 0x100000 geladen ...
Der Code wirft einfach immer einen GPF

Hilfe
Neues Thema
Antworten

Nach oben

