test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
阅读:3253回复:11

再问获取系统盘符的问题!!!

楼主#
更多 发布于:2007-05-11 17:55
  小弟现在正在学习文件过滤驱动,现在需要获取系统的盘符,于是在坛子里找了以前发的帖子,发现帖子上提到的获取系统盘符的操作都是以下的步骤:
    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!
   多谢!
reddargon
驱动小牛
驱动小牛
  • 注册日期2005-08-05
  • 最后登录2008-07-15
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望101点
  • 贡献值0点
  • 好评度100点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-05-16 08:53
这是指针的用法,如果你对指针变量进行操作,但又没有为它分配空间,你说情况会怎样呢,呵呵.
我觉得做驱动开发,C方面的知识还是要再好好看看的.
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
板凳#
发布于:2007-05-15 11:16
PUNICODE_STRING 只是UNICODE_STRING的指钍
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-05-14 17:34
引用第7楼wmsyjr2007-05-14 09:25发表的“”:
我也正在学过滤驱动,遇到同样的问题,不知道test001的问题现在解决了没有?咋么解决的?
现在觉得驱动开发入门挺难,希望志同道合的朋友们能跟我讨论一下,我的qq:50627599



问题已经解决了,就是用firabc的方法解决的,在这里对firabc深表感谢!
我发现区别就是对dosname的定义申明,但是现在我还没有搞清楚UNICODE_STRING和PUNICODE_STRING的区别。
yyffei
驱动牛犊
驱动牛犊
  • 注册日期2005-01-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分610分
  • 威望82点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-05-14 16:50
引用第6楼gongxp1234562007-05-12 23:36发表的“”:
初学者没有必要学 sfilter.c应该直接学minifilter!事半功倍

请问两者的区别是什么?优劣??
谢谢。
wmsyjr
驱动牛犊
驱动牛犊
  • 注册日期2007-01-13
  • 最后登录2008-01-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-05-14 09:25
我也正在学过滤驱动,遇到同样的问题,不知道test001的问题现在解决了没有?咋么解决的?
现在觉得驱动开发入门挺难,希望志同道合的朋友们能跟我讨论一下,我的qq:50627599
gongxp123456
驱动牛犊
驱动牛犊
  • 注册日期2004-12-15
  • 最后登录2013-10-10
  • 粉丝0
  • 关注0
  • 积分617分
  • 威望383点
  • 贡献值1点
  • 好评度59点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-05-12 23:36
初学者没有必要学 sfilter.c应该直接学minifilter!事半功倍
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
7楼#
发布于:2007-05-12 15:31
使用RtlVolumeDeviceToDosName一定要解决好死锁的问题!
如果不想找麻烦,可以参考楚狂人的《Windows文件系统过滤驱动开发教程(第二版)》
中关于“如何实现路径过滤”的介绍,很详细!
人总在矛盾中徘徊。。。
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-05-12 13:58
总算有人回帖子了,不管是否能解决问题,还是在这里谢谢大家!
firabc
驱动牛犊
驱动牛犊
  • 注册日期2004-10-10
  • 最后登录2007-10-20
  • 粉丝0
  • 关注0
  • 积分410分
  • 威望42点
  • 贡献值0点
  • 好评度42点
  • 原创分0分
  • 专家分0分
9楼#
发布于: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 ) ;
   };
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-05-12 12:17
大牛们平时要工作 , 闲时要陪家人或放松一下 , 偶尔心情来了才会来这里

到你成为大牛的时候怕是也很难来这里回答问题

我最近也为很多问题苦闷,一开始准备拿不算少的钱出来找了几次人也都找不到,只好自己来琢磨了,这一行很怪

如果实在找不到答案,去 OSR 上看看吧
提问归提问,还是只能靠自己
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-05-12 12:03
怎么没有人回答呀!
大牛们别总潜水呀,帮帮我们这些牛犊吧!!!
游客

返回顶部