阅读:1758回复:3
求解:通过devciceobject,再求得devicename!
文件系统的驱动专家,虚心向您求教通过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 |
|
|
沙发#
发布于:2005-07-02 11:06
专家们过周末呢,自己顶一下!
|
|
|
板凳#
发布于:2005-07-06 14:19
这个问题,好像已经讨论过多次了,就再重申一遍
对于sfilter,在处理IRP_MN_MOUNT_VOLUME,获得设备名,一般是形如\Device\HarddiskVolumnX,实际上调用的是QbQueryNameString,sfilter代码里已经有了。如果还想获得形如c:的名字,调用RtlVolumeDeviceToDosName,都保存在DeviceExtension里面,以后的操作中根据Irpsp->FileObject->DeviceObject,来和DeviceExtension中记录的Volumn Object进行比较,如果相符合把上面记录的名字直接用就好了。 |
|
地板#
发布于: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;用它好象造成死机。 谢谢! |
|
|