lgh41
驱动小牛
驱动小牛
  • 注册日期2004-12-14
  • 最后登录2006-09-24
  • 粉丝0
  • 关注0
  • 积分203分
  • 威望28点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:1758回复:3

求解:通过devciceobject,再求得devicename!

楼主#
更多 发布于:2005-07-01 15:44
文件系统的驱动专家,虚心向您求教通过devciceobject,再求得devicename的方法!
  我看到本板和内核版的有的文章提到微软的RtlVolumeDeviceToDosName(pFileObj->DeviceObject,&dosname)函数造成蓝屏问题,他们提出通过devciceobject,再求得devicename!但都没有往下分解!
  我也遇到这个了这个假死机问题!
  请解决过这个问题的专家(通过devciceobject,再求得devicename)出来帮帮忙!详细说说您的思路,可以吗?!

  我曾经通过当前IRP:irpsp->DeviceObject;irpsp->FileObject->DeviceObject往下考虑,都没找到办法!
  这个devicename,我想根本不是在sfilter.c的 DriverEntry()里的RtlInitUnicodeString( &nameString, L"\\FileSystem\\SFilterFs" );
status = IoCreateDevice(DriverObject, 0,          
&nameString,// IN PUNICODE_STRING DeviceName OPTIONAL
    谢谢!
lgh@mobileelife.com
lgh41
lgh41
驱动小牛
驱动小牛
  • 注册日期2004-12-14
  • 最后登录2006-09-24
  • 粉丝0
  • 关注0
  • 积分203分
  • 威望28点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-02 11:06
专家们过周末呢,自己顶一下!
lgh41
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-07-06 14:19
这个问题,好像已经讨论过多次了,就再重申一遍
对于sfilter,在处理IRP_MN_MOUNT_VOLUME,获得设备名,一般是形如\Device\HarddiskVolumnX,实际上调用的是QbQueryNameString,sfilter代码里已经有了。如果还想获得形如c:的名字,调用RtlVolumeDeviceToDosName,都保存在DeviceExtension里面,以后的操作中根据Irpsp->FileObject->DeviceObject,来和DeviceExtension中记录的Volumn Object进行比较,如果相符合把上面记录的名字直接用就好了。
lgh41
驱动小牛
驱动小牛
  • 注册日期2004-12-14
  • 最后登录2006-09-24
  • 粉丝0
  • 关注0
  • 积分203分
  • 威望28点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-21 14:49
zhaock版主:谢谢您的帮助!
我使用2台机器用windbg调试;都装的xp系统。目标机器安装两个硬盘(C,D);(E,G);装系统的是E盘。
在您的指导下,对mount作了跟踪;.跟踪结果如下:
&newDevExt->DeviceName:\Device\HarddiskVolume3
the attched is successful !
Volume DosName:E:
&newDevExt->DeviceName:\Device\Harddisk0\DR0
the attched is successful !
Volume DosName:
&newDevExt->DeviceName:\Device\Harddisk1\DR1
the attched is successful !
Volume DosName:
&newDevExt->DeviceName:\Device\HarddiskVolume2
the attched is successful !
Volume DosName:D:
&newDevExt->DeviceName:\Device\HarddiskVolume4
the attched is successful !
Volume DosName:G:
&newDevExt->DeviceName:\Device\HarddiskVolume1
the attched is successful !
Volume DosName:C:
此时mount完毕,目标机器进入:请按 Ctrl-Alt-Delete开始;此时出现如下3个错误:
ERROR: DavReadRegistryValues/RegQueryValueExW(4). WStatus = 5
ERROR: DavReadRegistryValues/RegQueryValueExW(5). WStatus = 5
ERROR: DavReadRegistryValues/RegQueryValueExW(6). WStatus = 5
好象是注册表的错误;这与我加的跟踪DbgPrint()程序好象无关!
这3个错误不影响目标机器运行其他程序!
但是在重新启动系统时,在关机状态时,有时死机!有时不死机。这又不象是windbg误判?
而使用关机指令却没问题!
请问:这是什么错误; 是什么原因引起!应如何去解决?
取盘符,我没用RtlVolumeDeviceToDosName;用它好象造成死机。
谢谢!
lgh41
游客

返回顶部