MmProbeAndLockPages() crashuje system.
dostaje bsod 0x7F, z argumentem 0x8 (unexcepted trap -> double fault)
oczywiscie opakowalem to w seha, ale niestety.
mysle ze problem lezy w 2 kwestiach:
stos - zapisuje stan przed wrzucaniem argumentow mmlockandprobe, przywracam w handlerze wyjatku nadpisujac CONTEXT->esp. CONTEXT->eip nadpisuje na adres po callu mmprobeandlock.
drugi i mysle ze wazniejszy problem to co system robi miedzy zalozeniem SEHA a prawdziwym wyjatkiem.
moze podnosi irql, moze dodaje wlasny seh, moze bierze jakies locki - a raczej na pewno w koncu musi modyfikowac liste stron.
nie wiem, virtual pc wywala wyjatek, prawdziwy win32 wywala bsoda, o kodzie jaki podalem.
aha, seha ja pisze w asemblerze.
push handler
push dword [fs:0]
mov dword [fs:0],esp
push 0
push 0
call [ds:mmprobeandlockpages]
safe:
pop dword [fs:0]
add esp,4
..
handler:
mov eax,0
ret
pominalem nadpisywanie stosu/eip bo teraz nie mam tego kodu ani kd zeby zobaczyc offsety.
moze blad jest w wartosci zwracanej przez seh? moze eip powinnin byc inny - najbardziej prawdopodobne, jaki powinien byc eip? jak go nie zmienie, to przeciez instrukcja bedzie sie powtarzac w nieskonczonosc (jak bede zwracal 0), jak zwroce 1 - pewnie tez bsod.
any ideas?