Как просмотреть сообщения DbgPrint из минифильтра файловой системы Windows?

Я пытаюсь запустить один из примеров мини-фильтров от Microsoft, представленных здесь: https://github.com/Microsoft/Windows-driver-samples/tree/master/filesys/miniFilter/passThrough

Я не знаю, что должен делать этот минифильтр (документация не очень хорошая), но для начала, если я смогу просто увидеть вывод оператора DbgPrint(), я буду счастлив. Запустив Sysinternals DebugView от имени администратора, я выполнил fltmc load passthrough и fltmc unload passthrough, но не увидел результатов фильтра. Я знаю, что по крайней мере функция, соответствующая функции выгрузки в коде, имеет сообщение DbgPrint():

PT_DBG_PRINT( PTDBG_TRACE_ROUTINES,
("PassThrough!PtUnload: Entered\n") );

Я должен видеть эти сообщения? Если да, то как? Если нет, как я могу отладить разработку минифильтра?

PS: я определил ключ реестра, предложенный здесь: https://www.danclarke.com/debugview


person Sabuncu    schedule 19.11.2017    source источник


Ответы (3)


Вы можете сделать это из подключенного отладчика, используя:

ed nt!Kd_DEFAULT_Mask 0x8

Или проверьте это ссылку, так как вы также можете включить ее из реестра.

person Gabriel Bercea    schedule 26.01.2018

Убедитесь, что вы включили «Capture Kernel» в раскрывающемся меню «Capture», а не «Capture Global Win32», о чем упоминается в статье, на которую вы ссылаетесь.

Что касается образца драйвера устройства File-System Mini-Filter, на который вы нам ссылались, существует множество документации по разработке драйверов диспетчера фильтров, доступной в MSDN.

Если вы приступите к разработке драйверов вслепую с образцами Microsoft, вы не можете ожидать, что поймете, как все это работает одним щелчком пальца... Это сильно отличается от разработки в пользовательском режиме, вы начнете с снова дно.

person PspSetProcessPpmPolicy    schedule 19.12.2017

Посмотрите на макросы PT_DBG_PRINT в исходном коде:

#define PT_DBG_PRINT( _dbgLevel, _string )          \
(FlagOn(gTraceFlags,(_dbgLevel)) ?              \
    DbgPrint _string :                          \
    ((int)0))

Есть условие, которое проверяет переменную gTraceFlags. По умолчанию gTraceFlags равен 0. Просто установите эту переменную, чтобы включить DbgPrint, например:

ULONG gTraceFlags = PTDBG_TRACE_ROUTINES;
person ilya.shmarov    schedule 08.02.2019