Выгрузить DLL

Тема в разделе "WASM.WIN32", создана пользователем Marik, 17 янв 2011.

  1. Marik

    Marik New Member

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

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Количество пришедших DLL_PROCESS_ATTACH и DLL_PROCESS_DETACH одинаково?
     
  3. Marik

    Marik New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    166
    Адрес:
    Russia
    Я ошибся, уведомление DLL_PROCESS_DETACH не приходит после вызова FreeLibraryAndExitThread.
    Итого приходит один DLL_PROCESS_ATTACH
    соответственно счетчик не уменьшается.
     
  4. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Дык DLL_PROCESS_DETACH прийдет когда счетчик ссылок будет равен нулю. Ты ее через LoadLibrary грузил или вручную отмапил?
    Последи за счетчиком ссылок на эту длл-ку.
     
  5. Marik

    Marik New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    166
    Адрес:
    Russia
    Грузил через внедрение шелкода с вызовом LoadLibrary.
    Опытным путем установил, что данная проблема проявляется при форсировании доставки APC во время инжекта. Если не форсировать доставку Apc, dll выгружается корректно.
     
  6. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    я так понимаю - высвободить виртуальную память ей занимаемую и снести из пеба (возможно забыл чего)
    а кстати чего там с csr?
     
  7. Marik

    Marik New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    166
    Адрес:
    Russia
    задачи грузить в csrss процесс нет, только пользовательские процессы.
    Вопрос в принципе снят, всем спасибо
     
  8. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Так в чем проблема была, разобрался?
     
  9. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Тоже интересно. Отпишитесь плиз
     
  10. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Делай свой лодер . Тему не читал.
     
  11. Marik

    Marik New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    166
    Адрес:
    Russia
    Так я же вроде написал, проблема возникает если использовать форсирование доставки APC при инжекте. Мне не принципиально было чтобы моя dll грузилась самой первой, поэтому собственно убрал форсирование и все заработало как надо. (по крайней мере в тестовой среде)