Измерение использования памяти драйверов устройств в Windows

Вы должны отменить таймер в onDestroy, позвонив по timerTask.cancel();.

9
задан petr k. 27 December 2008 в 23:57
поделиться

2 ответа

Я знаю, что это нетривиально. Вот некоторые начальные точки для тесно связанных вопросов:

Можно добраться (вероятно, неудовлетворительный), начинают при помощи VirtualQueryEx определять память, используемую файлами PE, "кучей", и т.д. Вот одна программа, которая обеспечивает представление карты Виртуальной памяти. Это должно ответить на размер изображения драйвера устройства.

Большая трудность находится в определении, как к признаковой памяти, которая выделяется динамично кодом, который выделяет его. Лучший выстрел там должен использовать что-то как обходы для отслеживания динамических выделений памяти, поскольку они сделаны и обходят стек для определения orginator. Наконец то, что Вы хотите сделать это для драйверов устройств, берет его один шаг вперед. Я сомневаюсь, что обходы могут использоваться для драйверов устройств (хотя я не знаю определенно). Я действительно знаю, что обход стека из драйвера устройства очень нетривиален.

Можно также смочь получить данные, которые Вы хотите от ProcExp в комплекте SysInternals. Работайте это Переходит к 'Системе', пойдите, чтобы Просмотреть/показать более низкую область, включить Dll. Затем щелкните правой кнопкой по заголовкам столбцов и добавьте тех для рабочего набора, например, 'Общего количества WS'. Я не уверен, что это делает для надлежащей маркировки их памятью. На моем поле это дает им отображенный размер изображения драйверов устройств, но просто имеет 0K в столбцах Рабочего набора. Я беру отсутствие ответа от procexp как обоснованные доказательства, что решение этой проблемы не будет снимком.

Удачи.

1
ответ дан 4 December 2019 в 15:27
поделиться

Windows отслеживает использование памяти драйвера устройства с тегами пула. Если Вы знаете то, во что пул отмечает рассматриваемые передачи драйвера ExAllocatePoolWithTag, затем можно отследить его инструменты использования использования памяти такой как poolmon (из Windows Driver Kit), PoolTag (от OSR), или WinDbg (или KD) (от средств отладки для Windows).

Обратите внимание, что драйверы устройств могут назвать API ядра, которые косвенно выделяют память. Например, вызов IoAllocateMdl заставит Windows I/O manager выделять память для списка дескриптора памяти, с помощью другого тега пула, который присвоен Windows I/O manager. Из-за этого, выделения, выполненные от имени нескольких драйверов устройств, могут все использовать тот же тег пула.

При попытке определить, какой драйвер пропускает память, poolmon/PoolTag/WinDbg/KD использования определяют тег (теги) пула, которые пропускаются. Затем присоедините отладчик ядра (WinDbg или KD) к системе и установите переменную nt!poolhittag к текучему тегу пула. В следующий раз ExAllocatePoolWithTag назван для выделения памяти с тем тегом пула, система ворвется в отладчик ядра, и затем можно посмотреть на стек вызовов для выяснения, какой драйвер выполняет выделение. Этот процесс описан более подробно в Использовании Отладчика ядра для Нахождения Утечки памяти Привилегированного режима.

12
ответ дан 4 December 2019 в 15:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: