· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Снова про ринг0

Посл.отвђт Сообщенiе


Дата: Ноя 6, 2003 02:07:58

Знатоки PM и внутренностей NT, помогите разобраться!

Мне необходимо получить доступ к ring0 из ring3. Для этого я решил использовать callgate. Как я правлю GDT - это не существенно (пробовал и прямо из KD). Итак, я описываю этот самый шлюз вызова (DPL и все остальное выставляю 100% правильно), в качестве селектора указываю 0008h. Это есть селектор кода для ring0 в NT (KGDT_R0_CODE, описан в ntddk.h)
Далее, делаю call far - управление получает мой код. Но вот в чем проблема - через раз я читаю "A fatal system error has occurred", и приходиться ребутать VMWare... Причем ошибка вылезает каждый раз разная, в разных модулях и т.д.
Если же добавить в GDT свой собственный дескриптор, аналагичный дескриптору кода NT, и использовать новый селектор - то все отлично работает! В чем же дело? Почему нельзя использовать NT'шный селектор???


Дата: Ноя 7, 2003 19:24:51


Дата: Ноя 9, 2003 00:23:06

Сегодня прочел я это дело. К сожалению, ничего нового там нет, хотя дока безусловно заслуживат внимания (попадись она мне недельку назад - не пришлось бы самому думать - хотя, это и к лучшему...). Однако, при создании callgate используется селектор 8h:
CgDesc->selector     = 8;


Единственный момент не очень понятный мне момент:
if(!VirtualLock((PVOID) Ring0Func, 0x30)) {
   printf("error: unable to lock function\n");
   CurMap.pAddress.QuadPart = 1;
} else {
   CurMap.vAddress = vAddress; //ugly way to passargument
   CurMap.Offset   = (DWORD) vAddress % Granularity;
   (DWORD) CurMap.vAddress -= CurMap.Offset;
   SetThreadPriority(Thread, THREAD_PRIORITY_TIME_CRITICAL);
   Sleep(0);

   _asm call fword ptr [farcall]

   SetThreadPriority(Thread,THREAD_PRIORITY_NORMAL);
   VirtualUnlock((PVOID) Ring0Func, 0x30);
   }


Зачем VirtualLock я еще могу понять, но для чего изменение приоритета потока? Может, есть идеи?

ЗЫ И почему при использовании собвственного дескриптора эти "финты ушами" не требуются? Дзен сплошной.....


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.085