|
|
| Посл.отвђт | Сообщен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 |