我使用适用于Windows 7 32位的WDK 7.0构建实用程序编写并编译了一个minifilter驱动程序。然后我使用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文件并选择“安装”。然后我从命令提示符启动服务,开始很好。但即使它是相同的代码/驱动程序,我也看不到DbgView中的DbgPrint输出,来自使用WDK 8.0 / VS2012 Pro编译的驱动程序。以下是实际执行打印的代码(IRP_MJ_CREATE的Post Operation Callback函数):
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;
}
我在这里缺少什么?
答案 0 :(得分:2)
在vista及以上版本DbgPrint
中,默认情况下会屏蔽。
在WinDbg提示中尝试此操作
ed Kd_DEFAULT_Mask 8
有关详细信息,请参阅此问题Kernel trace Windows 7 WinDbg或本文DbgPrint in vista and later。
答案 1 :(得分:0)
您是否尝试使用适用于Windows 8 / Windows Server 2012的WDK 8进行编译
对于使用WinDDK编译的Windows 7的调试打印工作,但对于Windows 8 / Server 2012,必须使用WDK 8编译并且不打印调试信息。
答案 2 :(得分:0)
或者,您可以简单地编写一个注册脚本,默认情况下启用它们。 有问题的注册表项是:
同时检查this。