KfRaiseIrql в чем могут быть грабли?

Тема в разделе "WASM.WIN32", создана пользователем LuckyDevil, 8 сен 2005.

  1. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Всем доброго!

    При вызове KfRaiseIrql вылетаю в BSOD, с сообщением что плохой WorkItem...IRQ, в чем могут быть грабли?
    Код (Text):
    1.  
    2. .text:0001133F                 mov     al, 1Fh
    3. .text:00011341                 call    KfRaiseIrql
    4.  


    и
    Код (Text):
    1.  
    2. .text:0001162E KfRaiseIrql     proc near               ; CODE XREF: sub_11204+Bp
    3. .text:0001162E                                         ; sub_11334+Dp
    4. .text:0001162E                 jmp     ds:__imp_KfRaiseIrql
    5. .text:0001162E KfRaiseIrql     endp
    6.  


    Где я допустил ошибку?
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Для fastcall первый параметр д.б. в cl/ecx. Почему al?
     
  3. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    потому как это компилятор такие фокусы творит, щас попробую на асме переписть.

    Four-F, спасибо.
     
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Логичнее разобраться с копилятором/хидером/переменными окружения.
     
  5. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    В книге "Программирование драйверов..." Солдатов не рекомендовал такими шутками пользоваться :) Лучше пользуй

    KeAcquireSpinLock - поднимает IRQL до DISPATCH_LEVEL

    KeReleaseSpinLock - возвращает IRQL назад

    Эти же ф-ции помогут и в многопроцессорной системе

    "...Когда фрагмент кода, работающего на уровне режима ядра, собирается обратиться к одно из «охраняемых» структур данных, он должен сначала выполнить запрос на владение спин-блокировкой. Так как только один из процессоров в каждый момент времени имеет право собственности на объект спин-блокировки, то таким образом и обеспечивается разделение доступа к охраняемым данным между потоками, работающими на разных процессорах."