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

怀疑是在driverentry中进行文件读操作,导致重入了,怎么办?

楼主#
更多 发布于:2007-10-12 15:27
请教各位大牛!!!
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2007-10-12 15:33
shadow device ,标志, iocreatefilebyspecialxxxx

driverentry上出问题? 此时你的flt do创建好了吗?
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-10-12 16:20
我现在也不知道是什么原因了!

因为我在driverentry中读取系统盘根目下的一个txt文件,然后将文件中的内容存入一个全局变量的缓冲区中,可是在sfcreate函数中再去读这个全局变量时,该变量为空。
上述现象是用inf文件安装驱动后,我用debugview看到的。

但是我直接用monitor加载同一个驱动,用debugview查看,却发现在sfcreate中能够读出该全局变量的值!

这到底是什么原因啊!!!
各位大牛帮帮忙!!!
不胜感激!!!
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-10-12 16:25
在系统启动的时候文件系统还没有准备好,所以你读取失败了。用monitor加载,文件系统已经起来了,所以可以读取成功。
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-10-12 16:55
引用第3楼tooflat于2007-10-12 16:25发表的  :
在系统启动的时候文件系统还没有准备好,所以你读取失败了。用monitor加载,文件系统已经起来了,所以可以读取成功。


请教大牛,这种情况怎么办?
abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2007-10-12 16:59
不理解你的重入概念,
如MJ_CREATE 中调用 ZwCreateFile才会引起重入。。。。
按你的步骤:
你在分发函数后, 读txt内容
这时会解发MJ_CREATE,这里你在(MJ_CREATE中读内容,很明显数据还没有读出)
你可以把Irp发到下层执行完再得数据。
驱网无线,快乐无限
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-10-12 17:02
我是在driverentry的最开始进行文件读操作的。

你指的把IRP发到下层执行是指什么意思呢?还是在driverentry中进行txt的读操作吗?
谢谢!
clarence
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2009-09-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望97点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-10-12 17:22
你的是文件系统Filter Driver?

进DriverEntry中,你的Driver应该还没有绑定到分区上吧,你的Driver应该不会过滤到文件操作啊。 我在minifilter下是这样的。我觉得filter Driver应该也是这样吧。

还有 有API是只往你Driver之下发读写文件的,这样就不会重入了。
lovehhy
驱动小牛
驱动小牛
  • 注册日期2007-09-17
  • 最后登录2010-09-17
  • 粉丝0
  • 关注0
  • 积分1028分
  • 威望244点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-10-12 19:35
你在给每个函数派发例程前进行读写,这样就不会重入。
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
9楼#
发布于:2007-10-12 21:08
不是重入 , tooflat已经说得很清楚了

文件驱动在静态加载时,起动很早,此时,有可能文件系统还没有完全加载,所以可能读不到数据

你动态加载 monitor加载时,系统已经完全启动好了(否则你也不可能运行monitor),此时读当然没问题.

简言之,你读文件太早了...
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-10-12 21:45
那请问版主应该如何解决这个问题呢?
谢谢!!!
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
11楼#
发布于:2007-10-12 22:31
Check  the Start, Type, Group values of your driver in INF file, and figure out why you need to set to those values. Depends on your requirements,  you may delay your driver's loading time by changing those values.

Keep your data in Registry is another solution.
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-10-15 18:14
多谢大家的提议,问题现在已经解决了,修改了inf文件中的启动类型的值!
游客

返回顶部