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

Тема в разделе "WASM.WIN32", создана пользователем PavPS, 28 сен 2004.

  1. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    Здравствуйте, Уважаемые!!!



    Сейчас тестирую на багги драйвер, и столкнулся с такой проблемой:

    При работе с динамическими структурами данных (XXX_Alloc_XXX), при отключении необходимо высвободить все ресурсы (FreeMem или ещё что). Но в любой проге, особенно на моментах исключений и аварийных выходов, сложно предусмотреть (сразу без ошибок) откат(возвращение) всех проделанных действий. Впринципе, в User-Mode, на это можно не так обращать внимание (ну забыл пару раз вызвать VirtualFree), особенно если потом следует заверение процесса. А если нет выключения, то заметить не высвобожденную память грубо можно (как я делаю) примерно глянув в диспетчер задач в колонку «память» (если, конечно помнишь, что было при запуске проги там записано :) )

    В Kernel Mode не высвобожденные ресурсу храняться… ну либо до высвобождения либо выключения OS. Да и частое невысвобождение памяти, особенно NonePaged в больших размерах – фатально. Так вот хотелось бы глянуть, скока в ядре занято NonePaged Pool памяти, ну и другой. Процесс System постоянно показывает значение памяти постоянное, хоть займи её много – хоть нет (проверял).

    Сказав: «следи сам за полным высвобождением!», будете безусловно правы, но всё же, все ошибаются…

    Может проги какие есть для этой цели… или какие хитрости… Подскажите plz!



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

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    try / catch ?
     
  3. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    Спасибо.

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

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    С софтайсом поставляется утилитка DriverMonitor сам не пробовал... Или в DDK смотри в Tool -> Driver Verifier она более продвинутая. Удачи в этом нелёгком деле :)
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Есть такая штука Taskinfo, но требует лечения.

    Пиши на valterg@inbox.ru или сам поищи.
     
  6. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    [ PavPS: <font color="indigo]Так вот хотелось бы глянуть, скока в ядре занято NonePaged Pool памяти, ну и другой.</font><!--color--> ]



    Если на си пишешь, то 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 реальная вещь.
     
  7. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    Всем преогромное спасибо! Буду всё юзать.