阅读:1387回复:2
请教斑竹:几个让人疑惑的NDIS中间层问题
这几个问题都是在实际的编程过程中遇到的,希望大家关注,特别是各位斑竹和高手。
1。我的驱动程序在系统起来以后的运行是正常的,全部功能都用的起来。但在系统启动时就加载驱动的时候,在调用完NdisIMInitializeDeviceInstanceEx后,程序流程始终不会去执行MiniportInit函数,我用SOFTICE设断点调试,程序会在MiniportInit停住,但系统也会宕机,这一点跟调试Passthru是相同的。希望大家讨论,有没有人遇到过类似的情况。 2。我不知道有没有人用到过NUMGA的将SOURCE转化成VC的IDE模式编译的软件,在转换完后,大家有没有注意在LINK选项中使用固定的加载地址(BASE Address),这个地址当我们把DDK例子做这个转化的时候,其地址都是一样的(0x10000),我强烈的怀疑这个地址是由NUMGA加上去的,没有任何的实际价值。想问问有没有人想过这个问题。 3。我在前面的发的帖子中提到过的那个问题仍然没有解决,即使用softice查询时候看到的变量的值和用DEBUG打印值不同。 4。每次系统启动时,加载驱动都会是一个固定的地址,我总是很想知道系统是怎样每次都保证进行完全相同的地址加载的? 另:我的驱动程序都是自己写的,没有使用Passthru的源代码,但在系统起来后加载不会出错。(估计不会是在BINDING这些地方出的错,对这几个流程还是比较清楚的:)) TO mike: 请你关注这个帖子,我还没有给你分的。。。。 |
|
沙发#
发布于:2003-05-20 10:32
讨论一下:
1。如果mpinit没有被调用,可能是安装的有问题,你说和passthru一样是什么意思?你有没有指定一下字节对齐的问题?你的mpinit函数的汇编程序前面的几行是什么样子的? 2.那个base address是虚拟的地址,exe的是0x400000,dll的是0x10000000,由于驱动程序是加载在共享的系统进程空间里面,所以那个0x10000应该是没有用的,系统会按照自己的规则来加载 3.你是用locals和watch命令看的变量?有可能是符号表有问题,你直接看一下内存的相应的位置存的是什么内容,或者换windbg来试试? 4.加载的位置应该是和加载的顺序有关系的,驱动程序装上去以后他被加载的时机就是固定的了。这只是我的猜测。 |
|
|
板凳#
发布于:2003-05-21 20:13
讨论一下: 感谢MIKE的回答,我的问题已经解决,错误来源于对miniportInit的错误理解,当然,在系统启动以后和在其之前加载的确是有不同,是系统调用的顺序不同。 我说的那个地址本来是没有用处的,如果你使用/FIXED参数进行一次编译,什么都清楚了。设置这个地址的好处没有别的,只是因为希望程序在启动中能够更快速的执行,毕竟让操作系统去寻找地址不是一个好方法,当然,你必须首先保证你的定义地址没有问题。:) 至于符号表的问题,我不太清楚,不过,可以肯定的是,在PNP完成以后,核心应该是做了一个内核地址的调整,这个直接在SOFTICE中内存就可以看到。 |
|