我使用适用于 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 文件。我通过右键单击 inf 文件并选择“安装”,在运行 VMWare 的 Windows 7(32 位)计算机上安装了驱动程序。然后我从命令提示符启动了该服务,启动正常。但即使它是相同的代码/驱动程序,我也无法从使用 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;
}
我在这里缺少什么?
最佳答案
在 vista 及以上版本中,DbgPrint
消息默认被屏蔽。
在 WinDbg 提示符中尝试此操作
ed Kd_DEFAULT_Mask 8
引用这个问题Kernel trace Windows 7 WinDbg或这篇文章DbgPrint in vista and later了解更多详情。
关于debugging - 使用 WDK 8.0 编译的文件系统 MiniFilter 驱动程序不显示 DbgPrint 输出(DbgView/Win7 32 位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14082764/