skylgl
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分71分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:1325回复:2

请教斑竹:几个让人疑惑的NDIS中间层问题

楼主#
更多 发布于:2003-05-20 09:35
这几个问题都是在实际的编程过程中遇到的,希望大家关注,特别是各位斑竹和高手。
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:
请你关注这个帖子,我还没有给你分的。。。。
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-20 10:32
讨论一下:
1。如果mpinit没有被调用,可能是安装的有问题,你说和passthru一样是什么意思?你有没有指定一下字节对齐的问题?你的mpinit函数的汇编程序前面的几行是什么样子的?
2.那个base address是虚拟的地址,exe的是0x400000,dll的是0x10000000,由于驱动程序是加载在共享的系统进程空间里面,所以那个0x10000应该是没有用的,系统会按照自己的规则来加载
3.你是用locals和watch命令看的变量?有可能是符号表有问题,你直接看一下内存的相应的位置存的是什么内容,或者换windbg来试试?
4.加载的位置应该是和加载的顺序有关系的,驱动程序装上去以后他被加载的时机就是固定的了。这只是我的猜测。
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
skylgl
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分71分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-21 20:13
讨论一下:
1。如果mpinit没有被调用,可能是安装的有问题,你说和passthru一样是什么意思?你有没有指定一下字节对齐的问题?你的mpinit函数的汇编程序前面的几行是什么样子的?
2.那个base address是虚拟的地址,exe的是0x400000,dll的是0x10000000,由于驱动程序是加载在共享的系统进程空间里面,所以那个0x10000应该是没有用的,系统会按照自己的规则来加载
3.你是用locals和watch命令看的变量?有可能是符号表有问题,你直接看一下内存的相应的位置存的是什么内容,或者换windbg来试试?
4.加载的位置应该是和加载的顺序有关系的,驱动程序装上去以后他被加载的时机就是固定的了。这只是我的猜测。
 

感谢MIKE的回答,我的问题已经解决,错误来源于对miniportInit的错误理解,当然,在系统启动以后和在其之前加载的确是有不同,是系统调用的顺序不同。
我说的那个地址本来是没有用处的,如果你使用/FIXED参数进行一次编译,什么都清楚了。设置这个地址的好处没有别的,只是因为希望程序在启动中能够更快速的执行,毕竟让操作系统去寻找地址不是一个好方法,当然,你必须首先保证你的定义地址没有问题。:)
至于符号表的问题,我不太清楚,不过,可以肯定的是,在PNP完成以后,核心应该是做了一个内核地址的调整,这个直接在SOFTICE中内存就可以看到。
游客

返回顶部