阅读:1715回复:12
怀疑是在driverentry中进行文件读操作,导致重入了,怎么办?
请教各位大牛!!!
|
|
沙发#
发布于:2007-10-12 15:33
shadow device ,标志, iocreatefilebyspecialxxxx
driverentry上出问题? 此时你的flt do创建好了吗? |
|
|
板凳#
发布于:2007-10-12 16:20
我现在也不知道是什么原因了!
因为我在driverentry中读取系统盘根目下的一个txt文件,然后将文件中的内容存入一个全局变量的缓冲区中,可是在sfcreate函数中再去读这个全局变量时,该变量为空。 上述现象是用inf文件安装驱动后,我用debugview看到的。 但是我直接用monitor加载同一个驱动,用debugview查看,却发现在sfcreate中能够读出该全局变量的值! 这到底是什么原因啊!!! 各位大牛帮帮忙!!! 不胜感激!!! |
|
地板#
发布于:2007-10-12 16:25
在系统启动的时候文件系统还没有准备好,所以你读取失败了。用monitor加载,文件系统已经起来了,所以可以读取成功。
|
|
地下室#
发布于:2007-10-12 16:55
引用第3楼tooflat于2007-10-12 16:25发表的 : 请教大牛,这种情况怎么办? |
|
5楼#
发布于:2007-10-12 16:59
不理解你的重入概念,
如MJ_CREATE 中调用 ZwCreateFile才会引起重入。。。。 按你的步骤: 你在分发函数后, 读txt内容 这时会解发MJ_CREATE,这里你在(MJ_CREATE中读内容,很明显数据还没有读出) 你可以把Irp发到下层执行完再得数据。 |
|
|
6楼#
发布于:2007-10-12 17:02
我是在driverentry的最开始进行文件读操作的。
你指的把IRP发到下层执行是指什么意思呢?还是在driverentry中进行txt的读操作吗? 谢谢! |
|
7楼#
发布于:2007-10-12 17:22
你的是文件系统Filter Driver?
进DriverEntry中,你的Driver应该还没有绑定到分区上吧,你的Driver应该不会过滤到文件操作啊。 我在minifilter下是这样的。我觉得filter Driver应该也是这样吧。 还有 有API是只往你Driver之下发读写文件的,这样就不会重入了。 |
|
8楼#
发布于:2007-10-12 19:35
你在给每个函数派发例程前进行读写,这样就不会重入。
|
|
9楼#
发布于:2007-10-12 21:08
不是重入 , tooflat已经说得很清楚了
文件驱动在静态加载时,起动很早,此时,有可能文件系统还没有完全加载,所以可能读不到数据 你动态加载 monitor加载时,系统已经完全启动好了(否则你也不可能运行monitor),此时读当然没问题. 简言之,你读文件太早了... |
|
|
10楼#
发布于:2007-10-12 21:45
那请问版主应该如何解决这个问题呢?
谢谢!!! |
|
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. |
|
12楼#
发布于:2007-10-15 18:14
多谢大家的提议,问题现在已经解决了,修改了inf文件中的启动类型的值!
|
|