Драйвер FileSystem MiniFilter, скомпилированный с помощью WDK 8.0, не отображает вывод DbgPrint (32-разрядная версия DbgView/Win7)

Я написал и скомпилировал драйвер минифильтра с помощью утилиты сборки WDK 7.0 для 32-разрядной версии Windows 7. Затем я установил его на компьютер с Windows 7 (32-разрядная версия), работающий на VMWare, с помощью утилиты загрузки драйверов OSR. Когда я запускал DbgView, я мог точно видеть вывод DbgPrint.

Затем я скомпилировал тот же самый драйвер, используя WDK 8.0, интегрированный в Microsoft Visual Studio Pro 2012 для Windows 7 (32-разрядная версия). В результате было создано 3 файла: sys, cat и inf. Я установил драйвер на компьютер с Windows 7 (32-разрядная версия), работающий на VMWare, щелкнув правой кнопкой мыши файл inf и выбрав «установить». Затем я запустил службу из командной строки, которая запустилась нормально. Но даже если это был тот же код/драйвер, я не вижу вывод DbgPrint в DbgView из драйвера, который был скомпилирован с использованием WDK 8.0/VS2012 Pro. Вот код, который фактически выполняет печать (функция обратного вызова после операции для IRP_MJ_CREATE):

FLT_POSTOP_CALLBACK_STATUS CreateFilePostOpCallback(__in PFLT_CALLBACK_DATA Data, __in PCFLT_RELATED_OBJECTS FltObjects,
                                                    __in_opt PVOID CompletionContext, __in FLT_POST_OPERATION_FLAGS Flags)
{
    PFLT_FILE_NAME_INFORMATION fileNameInfo;
    NTSTATUS status;

    UNREFERENCED_PARAMETER(FltObjects);
    UNREFERENCED_PARAMETER(CompletionContext);
    UNREFERENCED_PARAMETER(Flags);

    status = FltGetFileNameInformation(Data, FLT_FILE_NAME_NORMALIZED|FLT_FILE_NAME_QUERY_DEFAULT, &fileNameInfo);

    if(!NT_SUCCESS(status))
        return FLT_POSTOP_FINISHED_PROCESSING;

    FltParseFileNameInformation(fileNameInfo);

    DbgPrint("%wZ created/opened", &fileNameInfo->Name);

    FltReleaseFileNameInformation(fileNameInfo);

    return FLT_POSTOP_FINISHED_PROCESSING;
}

Что мне здесь не хватает?


person user1831704    schedule 29.12.2012    source источник


Ответы (3)


В Vista и более поздних версиях сообщения DbgPrint маскируются по умолчанию.

Попробуйте это в командной строке WinDbg

ed Kd_DEFAULT_Mask 8

См. этот вопрос Kernel trace Windows 7 WinDbg или эту статью DbgPrint в Vista и более поздних версиях для получения более подробной информации.

person Rohan    schedule 01.01.2013

Вы пытались скомпилировать с помощью WDK 8 для Windows 8/Windows server 2012?

Отладочная печать работает для Windows 7, которая скомпилирована с помощью WinDDK, но для Windows 8/Server 2012 она должна быть скомпилирована с помощью WDK 8, а отладочная информация не печатается.

person corning    schedule 04.06.2014

В качестве альтернативы вы можете просто написать небольшой reg-скрипт, который активирует их по умолчанию. Рассматриваемый раздел реестра:

  1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Отладка фильтра печати
  2. Значение: ПО УМОЛЧАНИЮ
  3. Данные: 0x8

Также проверьте это.

person Gabriel Bercea    schedule 26.01.2018