IDT vs. IOConnectInterrupt

Тема в разделе "WASM.WIN32", создана пользователем netex, 4 фев 2006.

  1. netex

    netex New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    114
    Адрес:
    Russia
    Нужно сделать обработчик прерывания.

    Номер прерывания известен.

    Есть функция IOConnectInterrupt, глядя на нее хочется воспользоваться напрямую IDT.



    Что содержится в параметре Vector? (в литературе встречается вызов HalGetInterruptVector(...), зачем?)

    Что содержится в параметре IRQL? (это просто заданный IRQL для кода обработчика прерывания?)

    Что содержится в параметре SynchronizeIRQL?

    В параметре InterruptMode можно передать два значения: Latched и LevelSensitive, чем они отличаются?

    Если в системе уже есть обработчик прерывания он может не допустить дальнейшую обработку прерывания другими процедурами?
     
  2. green5

    green5 New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2006
    Сообщения:
    29
    Адрес:
    Protvino
    да темный вопрос для любой ос

    ладно, хотя бы прототипы привел:

    bash-2.05b$ grep -i -A 11 -B 3 -e ioconnect -e halgetint *

    winddk.h-NTOSAPI

    winddk.h-NTSTATUS

    winddk.h-DDKAPI

    winddk.h:IoConnectInterrupt(

    winddk.h- OUT PKINTERRUPT *InterruptObject,

    winddk.h- IN PKSERVICE_ROUTINE ServiceRoutine,

    winddk.h- IN PVOID ServiceContext,

    winddk.h- IN PKSPIN_LOCK SpinLock OPTIONAL,

    winddk.h- IN ULONG Vector,

    winddk.h- IN KIRQL Irql,

    winddk.h- IN KIRQL SynchronizeIrql,

    winddk.h- IN KINTERRUPT_MODE InterruptMode,

    winddk.h- IN BOOLEAN ShareVector,

    winddk.h- IN KAFFINITY ProcessorEnableMask,

    winddk.h- IN BOOLEAN FloatingSave);

    --

    winnt4.h-NTOSAPI

    winnt4.h-ULONG

    winnt4.h-DDKAPI

    winnt4.h:HalGetInterruptVector(

    winnt4.h- IN INTERFACE_TYPE InterfaceType,

    winnt4.h- IN ULONG BusNumber,

    winnt4.h- IN ULONG BusInterruptLevel,

    winnt4.h- IN ULONG BusInterruptVector,

    winnt4.h- OUT PKIRQL Irql,

    winnt4.h- OUT PKAFFINITY Affinity);



    Да не так уж и много параметров :)

    для простоты посмотри ddk или reactos



    InterruptMode тож самое наверно что в биосе и больше к железу относится

    Остальное мда , можно пофантазировать
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    netex

    О каких прерываниях речь? Ты хочешь сделать шлюз из юзерленда в ядро (тогда проще IDT), или обработчик аппаратного прерывания (тогда IoConnectInterrupt и читать MSDN о ISR)
     
  4. netex

    netex New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    114
    Адрес:
    Russia
    S_T_A_S_ есть физическое устройство, оно выдает физическое прерывание через контроллер прерываний, номер прерывания известен.

    Нужно лишь сделать процедуру обработки этого прерывания.

    Во всех исходниках используют ConnectInterrupt в связке с HalGetInterruptVector. Я понятия не имею про номер шины (Bus number) и загадочных векторах (в вызове IOConnectInterrupt).

    Нужно просто сделать процедуру для прерывания, типа как в DOS'е подменить адреса в таблице прерываний (поставить свой обработчик, а затем вызывать стандартный).

    Это можно сделать через IDT, но хочется использовать штатные средства ОС.
     
  5. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Почему бы методом тыка не подобрать параметры типа "шины"? (Раз уж хочется все сделать средствами DDK).

    У меня, например чтобы приконнектить прерывание 7 лпт-порта указанные функции вызываются с такими параметрами:

    KIRQL kIrql;

    KAFFINITY kAffinity;

    ULONG kVector =

    HalGetInterruptVector(Isa,

    0,

    pDevExt->Irq/*=7*/,

    0,

    &kIrql,

    &kAffinity);



    status =

    IoConnectInterrupt(

    &pDevExt->pIntObj, // the Interrupt object

    Isr, // our ISR

    pDevExt, // Service Context

    NULL, // no spin lock

    kVector, // vector

    kIrql, // DIRQL

    kIrql, // DIRQL

    Latched, // Latched or LevelSensitive

    TRUE, // Shared?

    kAffinity, // processors in an MP set

    FALSE ); // save FP registers?

    А если у тебя устройстрво PCI, то оно скорее всего PnP - тогда вообще все ресурсы определяются автоматически...
     
  6. netex

    netex New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    114
    Адрес:
    Russia
    Почему бы методом тыка не подобрать параметры типа "шины"?

    "Тыкать" удел делитантов...

    Твой код списан из: The Windows 2000 Device Driver Book, A Guide for Programmers, Second Edition. Art Baker Jerry Lozano, слово в слово.

    Нужно понимание процесса.



    Устройство самодельное, не PnP.
     
  7. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Да, это именно оттуда:) Я бы конечно поспорил насчет "делитанта"... В общем, все зависит от того, какие цели преследуются