Что не так с ExAllocatePool

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

  1. LuckyDevil

    LuckyDevil New Member

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

    Что то я тут совсем гоню!!!!

    Плз, объясните что нетак!!!!

    Ситуация следующая, я алокирую(ExAllocatePool) область памяти под указатель, все казалось бы нормально, выделяю и работаю, но при завершении работы драйвера, решил проверить, освобождается ли память под выделенную переменную, и тут я совсем ничего не понимаю.

    Вызываю ExFreePool процедуру и после пытаюсь получить данные по указателю, которую вроде как освободил, по идеи я должен вываливаться в BSOD, но получаю информацию ранее хранимаю в ней.

    Что не так? или я вовсе не понимаю принципа алокирования памяти????

    Объясните, буду очень признателен.
     
  2. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Она не сразу освобождается :) Кажется только помечается в таблице. По этому участку ещё должен пройтись поток (с очень низким приорететом), который её забьёт 00h :) Если действительно хочешь получить BSOD, то попробуй сделать тоже самое под Driver Verifier :)))
     
  3. LuckyDevil

    LuckyDevil New Member

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

    Значит это обычное явление и не стоит беспокоиться, о том что остается мусор???
     
  4. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Мусор - это с твоей точки зрения :) Для ОС абсолютно параллельно. А вот не освобождение памяти - это критично, её никто не вернёт. Используй макрос (или как по другому) выделяй память ExAllocatePoolWithTag со своим тэгом. Затем пройдись по драйверу с помощью утилиты Driver Verifier. Если есть утечка памяти, выскочит BSOD и покажет тэг, который остался неосвобождённым после выгрузки драйвера :) Эта процедура болезненна, но пройти её надо !
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    <font color="gray][ SteelRat</font><!--color--><font color="gray]: По этому участку ещё должен пройтись поток (с очень низким приорететом), который её забьёт 00h :) ]</font><!--color-->



    Это только для юзермодной памяти. Для компонентов ядра, в том числе и драйверов, память не обнуляется, т.к. оно всё trusted и нет смысла тратить время.





    <font color="gray][ LuckyDevil</font><!--color--><font color="gray]: Вызываю ExFreePool процедуру и после пытаюсь получить данные по указателю, которую вроде как освободил, по идеи я должен вываливаться в BSOD, но получаю информацию ранее хранимаю в ней. ]</font><!--color-->



    Для NonPagedPool понятия выделено/освобождено вообще не существует. Неподкачиваемый пул всегда выделен.