2

我使用适用于 Windows 7 32 位的 WDK 7.0 构建实用程序编写并编译了一个微过滤器驱动程序。然后我使用 OSR 的驱动程序加载实用程序将它安装在运行在 VMWare 上的 Windows 7(32 位)机器上。当我运行 DbgView 时,我可以准确地看到 DbgPrint 输出。

然后我使用集成在 Microsoft Visual Studio Pro 2012 for Windows 7(32 位)中的 WDK 8.0 编译了相同的驱动程序。结果创建了 3 个文件,一个 sys、cat 和 inf 文件。我在 VMWare 上运行的 Windows 7(32 位)机器上安装了驱动程序,方法是右键单击 inf 文件并选择“安装”。然后我从启动正常的命令提示符启动服务。但即使它是相同的代码/驱动程序,我也无法从使用 WDK 8.0/VS2012 Pro 编译的驱动程序中看到 DbgView 中的 DbgPrint 输出。以下是实际执行打印的代码(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;
}

我在这里想念什么?

4

3 回答 3

2

在 vista 及更高DbgPrint版本中,默认情况下会屏蔽消息。

在你的 WinDbg 提示符下试试这个

ed Kd_DEFAULT_Mask 8

有关更多详细信息,请参阅此问题Kernel trace Windows 7 WinDbg或本文DbgPrint in vista and later

于 2013-01-01T07:59:10.867 回答
0

您是否尝试过为 Windows 8/Windows server 2012 使用 WDK 8 进行编译

对于使用 WinDDK 编译的 Windows 7,调试打印工作,但对于 Windows 8/Server 2012,它必须使用 WDK 8 编译并且调试信息不​​打印。

于 2014-06-04T09:58:09.813 回答
0

或者,您可以简单地编写一个默认启用它们的小 reg 脚本。有问题的注册表项是:

  1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug 打印过滤器
  2. 值:默认
  3. 数据:0x8

还要检查这个

于 2018-01-26T19:02:58.387 回答