DeadLock в CallBack-е PsSetLoadImageNotifyRoutine

Тема в разделе "WASM.BEGINNERS", создана пользователем Riply, 16 авг 2009.

  1. Riply

    Riply New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    25
    Адрес:
    Petersburg
    Здравствуйте !
    Пытаюсь работать с PsSetLoadImageNotifyRoutine, примерно с таким CallBack -ом:
    Код (Text):
    1. procedure LoadImageNotify(const pFullImageName: PUNICODE_STRING; const ProcessId: THANDLE; const pImageInfo: PIMAGE_INFO); stdcall;
    2. begin
    3.  KeEnterCriticalRegion;
    4.  if ExAcquireResourceExclusiveLite(pLock, True) then
    5.   try
    6.    // Здесь идет запись данных в файл.
    7.   finally
    8.    ExReleaseResourceForThreadLite(pLock, PsGetCurrentThreadId);
    9.    KeLeaveCriticalRegion;
    10.   end
    11.  else KeLeaveCriticalRegion;
    12. end;
    Через некоторое время работы драйвера система (Win 7) виснет (не сразу, а постепенно :) )
    (Под XP такого не случалось ни разу)
    В логе есть довольно много записей (т.е. LoadImageNotify отрабатывала успешно) .

    Подскажите, пожалуйста, где я напортачила в данном CallBack-е ?
     
  2. d2k9

    d2k9 Алексей

    Публикаций:
    0
    Регистрация:
    14 сен 2008
    Сообщения:
    325
    А разве дельфи конструкции try...finally...end предназначены для работы в р0? Возможно даже в этом кроется некий баг.
     
  3. Riply

    Riply New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    25
    Адрес:
    Petersburg
    Очень боюсь, что Вы правы и именно так дела и обстоят, ибо
    других объяснений, пока, найти не сумела :dntknw:
    Придется попробовать убрать все try/finally (мого их у меня :) )
    и посмотреть что получится.
    О результатах отпишусь.
     
  4. d2k9

    d2k9 Алексей

    Публикаций:
    0
    Регистрация:
    14 сен 2008
    Сообщения:
    325
    Ага мне как представителю вымирающего поколения дельфиомантов будет интересно узнать чем всё закончилось. Но драйверы я всё-таки писал бы с помощью Windows DDK и Visual Studio 2008 ;)