阅读:1378回复:6
如何在IoComplete routine里调用ZwWriteFile?
根据DDK,IoSetCompletionRoutine() 里面指定的IoComplete例程运行在IRQL<=DISPATCH_LEVEL,而ZwCreateFile()必须运行于IRQL=PASSIVE_LEVEL,有没有可能让她能够在IoCompete例程中调用呢?请大家不吝赐教!(15分)
另外,为了调试这个driver,我把SoftIce启动设置为boot,初始化命令中将X;删掉,并载入相应的符号文件。但是重起之后,系统被终止,却看不到SoftIce的窗口。不知道是为什么? (5分) [编辑 - 12/18/04 by Odyssey] |
|
沙发#
发布于:2004-12-18 14:33
1、应该可以调用的
2、为什么要去掉X呢,试试Ctrl+D |
|
|
板凳#
发布于:2004-12-18 17:07
1.一开始我就试过了,结果蓝屏了。看bug check出错码正是IRQL_NOT_LESS_OR_EQUAL
2.再BOOT Mode事后怎么用Ctrl+D呢?还有关键是SoftIce似乎是可以调出来――系统加载其他的driver时中止了,但是却看不到SoftIce的窗口,只是一个黑屏。怀疑是和显卡有关。但在manual Mode启动都能调出来。显卡是ATI Mobility Radeon 7500笔记本用的。有大侠在笔记本上用SoftIce的吗? |
|
地板#
发布于:2004-12-19 14:46
IoCompete例程运行的级别与低层次驱动的IoCompieteRequest例成的相同。
所以要保证低层次驱动的IoCompieteRequest运行在PASSIVE_LEVEL的时候在相应的IoCompete中应该就可以调用ZwCreateFile()了! 试试看哦 |
|
|
地下室#
发布于:2004-12-20 12:33
IoCompete例程运行的级别与低层次驱动的IoCompieteRequest例成的相同。 等于没说 建议使用WORKITEM或SYSTEMTHREAD来ZwCreateFile()...... |
|
|
5楼#
发布于:2004-12-20 23:12
也可以用内核函数强制改变优先级的!
在DDK里有说明的, 看看吧 |
|
|
6楼#
发布于:2004-12-21 02:20
[quote]IoCompete例程运行的级别与低层次驱动的IoCompieteRequest例成的相同。 等于没说 建议使用WORKITEM或SYSTEMTHREAD来ZwCreateFile()...... [/quote] 正解!已经Queue到worker item里面了. |
|