Re: Как отслеживать потребление ОЗУ своим драйвером NT
От: EreTIk EreTIk's Box
Дата: 18.09.18 16:38
Оценка: 10 (1)
Здравствуйте, LimyKurn, Вы писали:

LK>В диспетчере задач нету даже потребления ОЗУ процессом System. Причем, ЦП есть, а ОЗУ нет. То ли это от разгильдяйства, то ли это такой маркетинг (вроде автомобиля: "мощность двигателя — достаточная"), но может сыграть злую шутку с новичком, ну и мешает проверять драйвер на утечки


Там есть показатели использования Paged и NonPaged пулов:
  Скрытый текст


LK>Хочется видеть все буферы памяти, которые выделяет и очищает драйвер.

LK>Можно просто содержимое буферов видеть — но не так, что всю память системного процесса, а именно те, которые принадлежат драйверу.

Каждое выделение памяти вызовом ExAllocatePoolWithTag раскрашивается Tag'ом. Стоит придумать достаточно уникальный для своего драйвера и проблема решена.

LK>Была идея сделать обертки для всех функций, который делают Allocate и Free, и считать, но идея неважная — усложнение, тормоза и т.п. Непонятно зачем изобретать велосипед, если оно уже должно быть.


LK>Отладчик использую WinDbg — наверно там как-то можно?


Да, команда !poolfind

LK>Driver Verifier смотрел — но с ним еще разбираться... и не знаю, есть ли в нем это...


При настроенном Driver Verifier при выгрузке драйвера из-за утекшой памяти будет принудительный BSOD. В этот момент (или просто в момент работы системы) настроенный Verifier позволяет видеть call-stack'и выделений памяти — Use the !verifier 3 extension command to find out about the pool allocations.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.