Как просмотреть сообщения 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
2 ответа
Вы можете сделать это из прикрепленного отладчика, используя:
ed nt!Kd_DEFAULT_Mask 0x8
Или проверьте эту ссылку, так как вы также можете включить ее из реестра.
Посмотрите макросы 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;
Убедитесь, что вы включили "Захват ядра" в раскрывающемся меню "Захват" вместо "Захватить глобальный Win32", о котором упоминается в статье, на которую вы ссылались.
Что касается примера драйвера устройства мини-фильтра File-System, с которым вы связали нас, то есть много документации по разработке драйверов диспетчера фильтров, доступных на MSDN.
Если вы зайдете в разработку драйверов вслепую с примерами Microsoft, вы вряд ли сможете понять, как все это работает одним щелчком пальца... Это очень отличается от разработки в пользовательском режиме, вы начнете с снова дно.