Выгрузить DLL

Discussion in 'WASM.WIN32' started by Marik, Jan 17, 2011.

  1. Marik

    Marik New Member

    Blog Posts:
    0
    Joined:
    Jun 21, 2006
    Messages:
    166
    Location:
    Russia
    Добрый день!
    Возникла проблема с выгрузкой DLL.
    С помощью драйвера и APC подгружаю свою DLL в процесс при его запуске. Есть необходимость перемещения/удалении dl без перезагрузки ПК а для этого соответственно требуется выгрузить эту dll.
    Использование FreeLibraryAndExitThread не помогает. Приходит уведомление DLL_PROCESS_DETACH в процедуру DllMain, но сам модуль остается висеть в списке загруженных.
    Причем, если загрузить Dll в процесс внутри программы стандартным вызовом LoadLibrary, то FreeLibraryAndExitThread прекрасно отрабатывает и dll выгружается.
    Подскажите как выгрузить Dll в моем случаи.
     
  2. KeSqueer

    KeSqueer Сергей

    Blog Posts:
    0
    Joined:
    Jul 19, 2007
    Messages:
    1,183
    Location:
    Москва
    Количество пришедших DLL_PROCESS_ATTACH и DLL_PROCESS_DETACH одинаково?
     
  3. Marik

    Marik New Member

    Blog Posts:
    0
    Joined:
    Jun 21, 2006
    Messages:
    166
    Location:
    Russia
    Я ошибся, уведомление DLL_PROCESS_DETACH не приходит после вызова FreeLibraryAndExitThread.
    Итого приходит один DLL_PROCESS_ATTACH
    соответственно счетчик не уменьшается.
     
  4. onSide

    onSide New Member

    Blog Posts:
    0
    Joined:
    Jun 18, 2008
    Messages:
    476
    Дык DLL_PROCESS_DETACH прийдет когда счетчик ссылок будет равен нулю. Ты ее через LoadLibrary грузил или вручную отмапил?
    Последи за счетчиком ссылок на эту длл-ку.
     
  5. Marik

    Marik New Member

    Blog Posts:
    0
    Joined:
    Jun 21, 2006
    Messages:
    166
    Location:
    Russia
    Грузил через внедрение шелкода с вызовом LoadLibrary.
    Опытным путем установил, что данная проблема проявляется при форсировании доставки APC во время инжекта. Если не форсировать доставку Apc, dll выгружается корректно.
     
  6. sn0w

    sn0w Active Member

    Blog Posts:
    0
    Joined:
    Feb 27, 2010
    Messages:
    958
    я так понимаю - высвободить виртуальную память ей занимаемую и снести из пеба (возможно забыл чего)
    а кстати чего там с csr?
     
  7. Marik

    Marik New Member

    Blog Posts:
    0
    Joined:
    Jun 21, 2006
    Messages:
    166
    Location:
    Russia
    задачи грузить в csrss процесс нет, только пользовательские процессы.
    Вопрос в принципе снят, всем спасибо
     
  8. onSide

    onSide New Member

    Blog Posts:
    0
    Joined:
    Jun 18, 2008
    Messages:
    476
    Так в чем проблема была, разобрался?
     
  9. dyn

    dyn New Member

    Blog Posts:
    0
    Joined:
    Oct 30, 2009
    Messages:
    566
    Тоже интересно. Отпишитесь плиз
     
  10. RET

    RET Well-Known Member

    Blog Posts:
    17
    Joined:
    Jan 5, 2008
    Messages:
    789
    Location:
    Jabber: darksys@sj.ms
    Делай свой лодер . Тему не читал.
     
  11. Marik

    Marik New Member

    Blog Posts:
    0
    Joined:
    Jun 21, 2006
    Messages:
    166
    Location:
    Russia
    Так я же вроде написал, проблема возникает если использовать форсирование доставки APC при инжекте. Мне не принципиально было чтобы моя dll грузилась самой первой, поэтому собственно убрал форсирование и все заработало как надо. (по крайней мере в тестовой среде)