Я знаю, что это нетривиально. Вот некоторые отправные точки для тесно связанных вопросов:
Вы можете получить (вероятно, неудовлетворительный) запуск, используя VirtualQueryEx для определения памяти, используемой PE-файлами, кучами и т. Д. Вот одна из программ, которая предоставляет Карта виртуальной памяти Посмотреть. Это должно соответствовать размеру изображения драйвера устройства.
Большая сложность заключается в определении того, как пометить память, которая динамически выделяется кодом, который ее выделяет. Лучше всего использовать что-то вроде обхода для отслеживания распределения динамической памяти по мере их создания и обхода стека для определения инициатора. Наконец, тот факт, что вы хотите сделать это для драйверов устройств, делает еще один шаг вперед. Я сомневаюсь, что обходные пути могут использоваться для драйверов устройств (хотя я точно не знаю). Я знаю, что обход стека из драйвера устройства весьма нетривиален.
Вы также можете получить нужные данные из ProcExp в SysInternals suite . Запустите его. Перейдите в «Система», перейдите в «Показать / показать нижнюю панель», включите Dll. Затем щелкните правой кнопкой мыши заголовки столбцов и добавьте их для рабочего набора, например. «WS Total». Я не уверен, что это делает, чтобы правильно пометить их память. На моем компьютере он отображает размер отображаемых драйверов устройств, но просто имеет 0 КБ в столбцах «Рабочий набор». Я считаю отсутствие ответа от procxp разумным доказательством того, что решение этой проблемы не будет быстрым.
Удачи.