Понижение IRQL

Тема в разделе "WASM.WIN32", создана пользователем zag2art, 15 июн 2006.

  1. zag2art

    zag2art New Member

    Публикаций:
    0
    Регистрация:
    4 ноя 2005
    Сообщения:
    40
    Читаю книгу "Руткиты" Хогланда. Никак не могу перевести строчку связаную с понижение IRQL.



    Вот текст:



    In our primary code in the rootkit, we need to elevate the IRQL it is running at. Call KeGetCurrentIrql to determine what IRQL you are currently running at. Only if it is less than DISPATCH_LEVEL do you want to call KeRaiseIrql.



    Note: If the new IRQL is less than the current IRQL, a bug check will occur.



    Here is the code that raises the current rootkit thread to DISPATCH_LEVEL:

    Код (Text):
    1.  
    2. KIRQL CurrentIrql, OldIrql;
    3.  
    4. // Raise IRQL here.
    5. CurrentIrql = KeGetCurrentIrql();
    6. OldIrql = CurrentIrql;
    7. if (CurrentIrql < DISPATCH_LEVEL)
    8. KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);




    Строка, которую не могу перевести, выделена курсивом. Что же такое случается при понижении IRQL? Ошибка ли?



    Профи, раскидайте плиз.
     
  2. Koshak

    Koshak New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    31
    Адрес:
    Russia
    Рискну предположить, что:



    1 вариант: имелось ввиду то, что при понижении IRQL вызовом функции KeRaiseIrql приведёт к ошибке - надо вызывать KeLowerIrql.



    2 вариант: при понижении IRQL в обработчике прерывания может произойти поступление ещё одного такого же прерывания, и тогда произойдёт наслоение прерываний. В этом случае впасёт только реентерабельность обработчика, иначе BSOD. (сам на практике не проверял... может и не спасёт :) )
     
  3. zag2art

    zag2art New Member

    Публикаций:
    0
    Регистрация:
    4 ноя 2005
    Сообщения:
    40
    Спасибо большое. Скорее всего первый вариант, так как дело происходит не в обработчике прерываний...