阅读:3252回复:11
再问获取系统盘符的问题!!!
小弟现在正在学习文件过滤驱动,现在需要获取系统的盘符,于是在坛子里找了以前发的帖子,发现帖子上提到的获取系统盘符的操作都是以下的步骤:
IrpSp = IoGetCurrentIrpStackLocation( Irp ); if (RtlVolumeDeviceToDosName ( IrpSp->FileObject->DeviceObject, &dosname ) ) { DbgPrint("the volume DOS name is %ws \n" , dosname.Buffer ); ExFreePool( dosname.Buffer ) ; }; 但是帖子里都没有说明dosname是哪一类型的变量,于是我就将其申明为PUNICODE_STRING类型了,按照上述的方法试了一下,首先是编译就出错,错误提示是“'PUNICODE_STRING' differs in levels of indirection from 'PUNICODE_STRING * '”,于是我去掉了dosname前的&,然后再编译,还是有错误,错误提示是“ '.Buffer' : left operand points to 'struct', use '->'”,于是我又将dosname.Buffer改为dosname->Bufer,至此编译已经没问题了,修改后的代码如下: PUNICODE_STRING dosname; IrpSp = IoGetCurrentIrpStackLocation( Irp ); if (RtlVolumeDeviceToDosName ( IrpSp->FileObject->DeviceObject, dosname ) ) { DbgPrint("the volume DOS name is %ws \n" , dosname->Buffer ); ExFreePool( dosname.Buffer ) ; }; 可是一旦加载驱动,系统马上蓝屏。 不知道以前发帖子说已经能够成功获取系统盘符的大侠们,能否帮忙解决一下这个问题,不知道dosname到底是什么类型的? 我的环境是XP,DDK3790! 多谢! |
|
沙发#
发布于:2007-05-12 12:03
怎么没有人回答呀!
大牛们别总潜水呀,帮帮我们这些牛犊吧!!! |
|
板凳#
发布于:2007-05-12 12:17
大牛们平时要工作 , 闲时要陪家人或放松一下 , 偶尔心情来了才会来这里
到你成为大牛的时候怕是也很难来这里回答问题 我最近也为很多问题苦闷,一开始准备拿不算少的钱出来找了几次人也都找不到,只好自己来琢磨了,这一行很怪 如果实在找不到答案,去 OSR 上看看吧 |
|
|
地板#
发布于:2007-05-12 12:20
你可以调下的,
UNICODE_STRING dosname; IrpSp = IoGetCurrentIrpStackLocation( Irp ); if (RtlVolumeDeviceToDosName ( IrpSp->FileObject->DeviceObject, &dosname ) ) { DbgPrint("the volume DOS name is %ws \n" , dosname.Buffer ); ExFreePool( dosname.Buffer ) ; }; |
|
地下室#
发布于:2007-05-12 13:58
总算有人回帖子了,不管是否能解决问题,还是在这里谢谢大家!
|
|
5楼#
发布于:2007-05-12 15:31
使用RtlVolumeDeviceToDosName一定要解决好死锁的问题!
如果不想找麻烦,可以参考楚狂人的《Windows文件系统过滤驱动开发教程(第二版)》 中关于“如何实现路径过滤”的介绍,很详细! |
|
|
6楼#
发布于:2007-05-12 23:36
初学者没有必要学 sfilter.c应该直接学minifilter!事半功倍
|
|
7楼#
发布于:2007-05-14 09:25
我也正在学过滤驱动,遇到同样的问题,不知道test001的问题现在解决了没有?咋么解决的?
现在觉得驱动开发入门挺难,希望志同道合的朋友们能跟我讨论一下,我的qq:50627599 |
|
8楼#
发布于:2007-05-14 16:50
引用第6楼gongxp123456于2007-05-12 23:36发表的“”: 请问两者的区别是什么?优劣?? 谢谢。 |
|
9楼#
发布于:2007-05-14 17:34
引用第7楼wmsyjr于2007-05-14 09:25发表的“”: 问题已经解决了,就是用firabc的方法解决的,在这里对firabc深表感谢! 我发现区别就是对dosname的定义申明,但是现在我还没有搞清楚UNICODE_STRING和PUNICODE_STRING的区别。 |
|
10楼#
发布于:2007-05-15 11:16
PUNICODE_STRING 只是UNICODE_STRING的指钍
|
|
|
11楼#
发布于:2007-05-16 08:53
这是指针的用法,如果你对指针变量进行操作,但又没有为它分配空间,你说情况会怎样呢,呵呵.
我觉得做驱动开发,C方面的知识还是要再好好看看的. |
|