如何输出调试信息到文件?

时间:2021-03-28 12:44:07

DriverObject->DriverUnload                         = DriverUnload;
DriverObject->MajorFunction[IRP_MJ_CREATE]         = DriverObject->MajorFunction[IRP_MJ_CLOSE] = Dispatch;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchDeviceControl;


 

经测试,在Dispatch和DispatchDeviceControl等派遣例程中,建、删、读、写文件(为了输出调试信息)总会失败,而在DriverEntry和DriverUnload中却正常,就算使用DriverEntry中已经打开成功的FILE HANDLE,在这些派遣例程中也会失败,可DriverUnload中使用正常,成功输出.

无奈,不知何解?

9 个解决方案

#1


驱动中写文件比较麻烦,还要考虑IRP重入问题,你可以用DebugView来监视你打出的LOG,顺便DebugView也可以写将log写入文件(需要事先指定文件名)

#2


该回复于2011-01-24 16:38:28被版主删除

#3


<table cellspacing="0" cellpadding="0" class="mtxt"><tr><td csdnid="rbody_71387953" id="rbody_71387953"><div class="msgfont"></div><!--End_rbody_71387953//--></td></tr>
<tr><td csdnid="rmodify_71387953"><p class="be">该回复于2011-01-24 16:38:28被管理员删除 </p></td></tr></table>

#4


引用 1 楼 shenyi0106 的回复:
驱动中写文件比较麻烦,还要考虑IRP重入问题,你可以用DebugView来监视你打出的LOG,顺便DebugView也可以写将log写入文件(需要事先指定文件名)

有道理

#5


引用楼主 rrrfff 的回复:
C/C++ code

    DriverObject->DriverUnload                         = DriverUnload;
    DriverObject->MajorFunction[IRP_MJ_CREATE]         = DriverObject->MajorFunction[IRP_MJ_CLOSE] = Dispatch;
  ……

你就用KdPrint、DbgPrint输出,DebugView中查看

#6


log4cpp

#7


感谢大家的回复。

但现在问题是,如果一定要操作文件怎么办?(不限于输出调试信息)。

不知道为什么不行。

#8


有关调试信息输出问题,可以保存到Buffer中,在DriverUnload中统一输出。

但是问题来了。。。。。。。。。。。。。。。。。。。。见上楼

#9


没落了。。。。。。。

#1


驱动中写文件比较麻烦,还要考虑IRP重入问题,你可以用DebugView来监视你打出的LOG,顺便DebugView也可以写将log写入文件(需要事先指定文件名)

#2


该回复于2011-01-24 16:38:28被版主删除

#3


<table cellspacing="0" cellpadding="0" class="mtxt"><tr><td csdnid="rbody_71387953" id="rbody_71387953"><div class="msgfont"></div><!--End_rbody_71387953//--></td></tr>
<tr><td csdnid="rmodify_71387953"><p class="be">该回复于2011-01-24 16:38:28被管理员删除 </p></td></tr></table>

#4


引用 1 楼 shenyi0106 的回复:
驱动中写文件比较麻烦,还要考虑IRP重入问题,你可以用DebugView来监视你打出的LOG,顺便DebugView也可以写将log写入文件(需要事先指定文件名)

有道理

#5


引用楼主 rrrfff 的回复:
C/C++ code

    DriverObject->DriverUnload                         = DriverUnload;
    DriverObject->MajorFunction[IRP_MJ_CREATE]         = DriverObject->MajorFunction[IRP_MJ_CLOSE] = Dispatch;
  ……

你就用KdPrint、DbgPrint输出,DebugView中查看

#6


log4cpp

#7


感谢大家的回复。

但现在问题是,如果一定要操作文件怎么办?(不限于输出调试信息)。

不知道为什么不行。

#8


有关调试信息输出问题,可以保存到Buffer中,在DriverUnload中统一输出。

但是问题来了。。。。。。。。。。。。。。。。。。。。见上楼

#9


没落了。。。。。。。