Привет всем! Сделал драйвер, поправил таблицу IDT и изменил обработчик прерывания на свой, чтобы приложение из режима пользователя могло обращаться к драйверу через прерывание. Когда тестю в VMware ентот драйвер, все работает идеально (тестил в 2k/xp/2k3) Но на реальной системе очень часто вылазит ошибка ммм точно не помню какая, (что-то обратилось по адресу 0xffffffff) и прога падает (такая же ошибка будет если вызвать прерывание, недоступное из режима пользователя). Даже если заключаю вызов прерывания в __try...__except (пишу на си), эта ошибка перехватывается, но иногда приложение падает вообще тихонько, без показа кода ошибки Просматривая таблицу IDT тулзой Interrupt Descriptor Table Dumber из KmdKit (при работающем драйвере) я вижу то это: 004E 0008:804DD51C 0 P (перехватываю int 0x4E то вот это: 004E 0008:XXXXXXXX 3 P - т.е. обработчик то ставится мой, то восстанавливается обратно системный, непонятно как... мож винда следит за этим? Что вы думаете? Как поступить? ) Уже долго бьюсь над этой проблемой.. ЗЫ таким способом я передаю драйверу кое-какие данные )
А у тебя случайно не гипертрединговый процессор? Если да, то надо менять IDT на всех процессорах в системе. Короче не забывай учитывать SMP.
Что-то про HyperThreading найти инфы не могу... на intel.com какая-то фигня, документации в плане "как это запрограммировать" не нашел Ms Rem, посоветуй что-нибудь