首页
社区
课程
招聘
[求助]关于驱动的符号连接
发表于: 2010-8-28 23:39 8893

[求助]关于驱动的符号连接

2010-8-28 23:39
8893
XP系统下,遇到的问题,虚拟出一个盘J:,在里面有个驱动,不能成功加载,经测试发现的现象。

符号连接1:
(1)在DriverEntry中使用IoCreateSymbolicLink创建的符号连接
(2)内核进程向驱动发送IRP,驱动在派遣函数中使用IoCreateSymbolicLink创建的符号连接

符号连接2:
(1)使用DefineDosDevice创建的符号连接
(2)用户进程向驱动发送IRP,驱动在派遣函数中使用IoCreateSymbolicLink创建的符号连接

这两种符号连接的区别是,符号连接1可以使用winobj.exe在Global中看到。所以,当使用第1种方式时,J:盘的驱动可以正常加载,因为加载驱动的内核函数可以解析J:。

而第二种情况,虽然在用户下CreateFile使用J:可以,但是加载J:的驱动时就会出问题。winobj.exe也看不到。(系统映射的远程盘也会出现这种情况。)

这两种符号连接好像可以同时创建成功。

由于我现在要将参数传给虚拟盘,然后创建符号连接,这样就成了第2种情况,就出现了驱动加载失败的问题。怎么解决呢?

我看TrueCrypt就解决了这个问题,它就是从用户进程把盘符传给驱动来加载。我编译它的驱动代码没通过,自己把函数复制出来写了一个简单的驱动居然不行。

求高手指点。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 93
活跃值: (57)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
好像和namespace还是session,要不就是user context有关系
2010-8-28 23:51
0
雪    币: 93
活跃值: (57)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
有人讲到如果是全局的盘符,操作系统会用某种机制将这个symbollink复制到其他session中,于是在kernel mode中做的mount和symbollink,就是全局盘符,但是需要在user mode下再做一次link,用win32 api: DefineDosDevice。如果是先在user mode中挂载,那就不是全局盘符,就复制不了。
2010-8-29 00:55
0
雪    币: 93
活跃值: (57)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
哈哈,用windbg调试truecrypt驱动终于知道了它是在MountManagerMount中用IoBuildDeviceIoControlRequest实现的。
2010-8-29 12:26
1
雪    币: 193
活跃值: (1210)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习一下,楼主好厉害啊
2011-5-22 16:08
0
游客
登录 | 注册 方可回帖
返回
//