Всем доброго! Что то я тут совсем гоню!!!! Плз, объясните что нетак!!!! Ситуация следующая, я алокирую(ExAllocatePool) область памяти под указатель, все казалось бы нормально, выделяю и работаю, но при завершении работы драйвера, решил проверить, освобождается ли память под выделенную переменную, и тут я совсем ничего не понимаю. Вызываю ExFreePool процедуру и после пытаюсь получить данные по указателю, которую вроде как освободил, по идеи я должен вываливаться в BSOD, но получаю информацию ранее хранимаю в ней. Что не так? или я вовсе не понимаю принципа алокирования памяти???? Объясните, буду очень признателен.
Она не сразу освобождается Кажется только помечается в таблице. По этому участку ещё должен пройтись поток (с очень низким приорететом), который её забьёт 00h Если действительно хочешь получить BSOD, то попробуй сделать тоже самое под Driver Verifier ))
SteelRat, спасибо за разъяснение,BSOD я как раз этого и не хочу, а еще хотелось бы быть уверенным в том, что мой код не засирает память. Значит это обычное явление и не стоит беспокоиться, о том что остается мусор???
Мусор - это с твоей точки зрения Для ОС абсолютно параллельно. А вот не освобождение памяти - это критично, её никто не вернёт. Используй макрос (или как по другому) выделяй память ExAllocatePoolWithTag со своим тэгом. Затем пройдись по драйверу с помощью утилиты Driver Verifier. Если есть утечка памяти, выскочит BSOD и покажет тэг, который остался неосвобождённым после выгрузки драйвера Эта процедура болезненна, но пройти её надо !
<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 понятия выделено/освобождено вообще не существует. Неподкачиваемый пул всегда выделен.