· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Сколько дин. памяти занял драйвер...?

Посл.отвђт Сообщенiе


Дата: Сен 28, 2004 22:47:48

Здравствуйте, Уважаемые!!!

Сейчас тестирую на багги драйвер, и столкнулся с такой проблемой:
При работе с динамическими структурами данных (XXX_Alloc_XXX), при отключении необходимо высвободить все ресурсы (FreeMem или ещё что). Но в любой проге, особенно на моментах исключений и аварийных выходов, сложно предусмотреть (сразу без ошибок) откат(возвращение) всех проделанных действий. Впринципе, в User-Mode, на это можно не так обращать внимание (ну забыл пару раз вызвать VirtualFree), особенно если потом следует заверение процесса. А если нет выключения, то заметить не высвобожденную память грубо можно (как я делаю) примерно глянув в диспетчер задач в колонку «память» (если, конечно помнишь, что было при запуске проги там записано :) )
В Kernel Mode не высвобожденные ресурсу храняться… ну либо до высвобождения либо выключения OS. Да и частое невысвобождение памяти, особенно NonePaged в больших размерах – фатально. Так вот хотелось бы глянуть, скока в ядре занято NonePaged Pool памяти, ну и другой. Процесс System постоянно показывает значение памяти постоянное, хоть займи её много – хоть нет (проверял).
Сказав: «следи сам за полным высвобождением!», будете безусловно правы, но всё же, все ошибаются…
Может проги какие есть для этой цели… или какие хитрости… Подскажите plz!

Заранее благодарен. --==PPS==--


Дата: Сен 29, 2004 01:39:41

try / catch ?


Дата: Сен 29, 2004 01:46:39

Спасибо.
Дело ясно, но в ядре не всё то и ловится. Да и всё равно вопрос в получении инфы.


Дата: Сен 29, 2004 11:05:35

С софтайсом поставляется утилитка DriverMonitor сам не пробовал... Или в DDK смотри в Tool -> Driver Verifier она более продвинутая. Удачи в этом нелёгком деле :)


Дата: Сен 29, 2004 12:25:24

Есть такая штука Taskinfo, но требует лечения.
Пиши на valterg@inbox.ru или сам поищи.


Дата: Сен 29, 2004 13:17:42

[ PavPS: Так вот хотелось бы глянуть, скока в ядре занято NonePaged Pool памяти, ну и другой. ]

Если на си пишешь, то ExAllocatePool заменяется на ExAllocatePoolWithTag. В качестве тэга используется строка 'Ddk '. POOL_TAGGING по умолчанию определена.

#ifdef POOL_TAGGING
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,' kdD')
#endif

Делаешь так:

#define MEMORY_ALLOCATION_TAG ((ULONG) 'msaW')

#undef ExAllocatePool
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,MEMORY_ALLOCATION_TAG)

Запускаешь gflags.exe из DebuggingTools, ставишь галку "Enable pool tagging", ребутишься. Запускаешь poolmon.exe и видишь кто, чего, и скока.


PS: Driver Verifier реальная вещь.


Дата: Сен 29, 2004 19:14:13

Всем преогромное спасибо! Буду всё юзать.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.072