我使用适用于 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;
}
我在这里想念什么?