1. Вопрос, кто занимался исследованием функций, почему невозможно подключится к любому прерыванию, а только к некоторым. Допустим я хочу подключится к 0х45, а функция выдает ошибочный параметр. 2. почему параметр Код (Text): NTSTATUS IoConnectInterrupt( OUT PKINTERRUPT *InterruptObject, IN PKSERVICE_ROUTINE ServiceRoutine, IN PVOID ServiceContext, IN PKSPIN_LOCK SpinLock OPTIONAL, IN ULONG Vector, IN KIRQL Irql, IN KIRQL SynchronizeIrql, IN KINTERRUPT_MODE InterruptMode, IN BOOLEAN ShareVector, IN KAFFINITY ProcessorEnableMask, IN BOOLEAN FloatingSave ); Vector в 2000 равен прерыванию к кторому подключаемся, а в XP на 0x100 больше?
Добавлю, если к этому прерывания никто не подключен еще, то нужно выделить ресурсы для подключания к нему. Для этго есть функции, которые уведомляют винду куда ты будешь коннектится. Не помню название функции просто.
Denwer Про ShareVector я знаю, а вот выделить ресурсы для подключания к нему. Для этго есть функции, которые уведомляют винду куда ты будешь коннектится помоему это можно сделать в ответ на IRP_MN_QUERY_RESOURCE_REQUIREMENTS, но если драйвер вообще не создает устройство, а просто хочет обработать прерывание. Что касается IoConnectInterrupt здесь все стало понятно - конектится только к APIC валидному вектору + еще ShareVector = True в предыдущем конекте другого драйвера. Но Вот Вопрос - хочу приконектится к другому (не APIC) прерыванию (модификация IDT отпадает сразу) используя функции OS. Я думаю нужно капать в boot драйверах тех что грузятся на раннем этапе. Но хоть на вскидку какую функцию пользовать.
Меня тоже интересовал данный вопрос. Ничего путного не нашол, кроме как найти в памяти вектора прерывания и подправить нужные места. Но так как я делал чисто ради эксперимента, то такой метод прокатил. По сути это некий двумерный массив.
Дак ты думаешь что ни одна проактивная защита не увидит лишний драйвер на контроллере прерываний ? Тогда ты просто не в ту сторону капаешь
PROFi может модифицировать (временно естественно) какую-нибудь RTE (Redirection Table Entry) APIC'а на нужный тебе вектор, вызвать IoConnectInterrupt() и потом все вернуть назад