Особенности поведения IoConnectInterrupt и IoConnectInterruptEx

Тема в разделе "WASM.NT.KERNEL", создана пользователем PROFi, 15 окт 2007.

  1. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    1. Вопрос, кто занимался исследованием функций, почему невозможно подключится к любому прерыванию, а только к некоторым. Допустим я хочу подключится к 0х45, а функция выдает ошибочный параметр.
    2. почему параметр
    Код (Text):
    1. NTSTATUS
    2.   IoConnectInterrupt(
    3.     OUT PKINTERRUPT  *InterruptObject,
    4.     IN PKSERVICE_ROUTINE  ServiceRoutine,
    5.     IN PVOID  ServiceContext,
    6.     IN PKSPIN_LOCK  SpinLock  OPTIONAL,
    7.     IN ULONG  Vector,
    8.     IN KIRQL  Irql,
    9.     IN KIRQL  SynchronizeIrql,
    10.     IN KINTERRUPT_MODE    InterruptMode,
    11.     IN BOOLEAN  ShareVector,
    12.     IN KAFFINITY  ProcessorEnableMask,
    13.     IN BOOLEAN  FloatingSave
    14.     );
    Vector в 2000 равен прерыванию к кторому подключаемся, а в XP на 0x100 больше?
     
  2. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    Некоторые прерывания не шареные, т.е. создании был задан параметр ShareVector.
     
  3. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    Добавлю, если к этому прерывания никто не подключен еще, то нужно выделить ресурсы для подключания к нему. Для этго есть функции, которые уведомляют винду куда ты будешь коннектится. Не помню название функции просто.
     
  4. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    Denwer

    Про ShareVector я знаю, а вот выделить ресурсы для подключания к нему. Для этго есть функции, которые уведомляют винду куда ты будешь коннектится помоему это можно сделать в ответ на IRP_MN_QUERY_RESOURCE_REQUIREMENTS, но если драйвер вообще не создает устройство, а просто хочет обработать прерывание.

    Что касается IoConnectInterrupt здесь все стало понятно - конектится только к APIC валидному вектору + еще ShareVector = True в предыдущем конекте другого драйвера.

    Но Вот Вопрос - хочу приконектится к другому (не APIC) прерыванию (модификация IDT отпадает сразу) используя функции OS. Я думаю нужно капать в boot драйверах тех что грузятся на раннем этапе. Но хоть на вскидку какую функцию пользовать.
     
  5. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    Меня тоже интересовал данный вопрос. Ничего путного не нашол, кроме как найти в памяти вектора прерывания и подправить нужные места. Но так как я делал чисто ради эксперимента, то такой метод прокатил. По сути это некий двумерный массив.
     
  6. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    PROFi
    А чем тебя этот вариант не устраивает? Вариант достаточно надёжный. Чего ты боишся ?
     
  7. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    k3internal

    32 бит vs 64 бит нет переносимости, PatchGuard, любая проактивная защита.
     
  8. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Дак ты думаешь что ни одна проактивная защита не увидит лишний драйвер на контроллере прерываний ? Тогда ты просто не в ту сторону капаешь
     
  9. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    k3internal

    А ты проверь сам :)
     
  10. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    А ты все проверял?
    да х с ним с проактивкой, если зададутся целью найти то выпалят тем rku
     
  11. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Меняй оффсет в IDT, зах тебе эти АПИ ?
     
  12. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    k3internal

    Зайцев AVZ4 не видит
     
  13. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    PROFi
    может модифицировать (временно естественно) какую-нибудь RTE (Redirection Table Entry) APIC'а на нужный тебе вектор, вызвать IoConnectInterrupt() и потом все вернуть назад
     
  14. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    PROFi

    Нашел чем проверять. Возьми GMER или RkU.