阅读:4035回复:12
passthru for xp的一个bug
passthru for winxp直接支持wan的绑定,但是代码里面
有个错误,会引起ASSERT。大家可以看一下ptbindadapter 和mpinialize,会发现对于ndismediumwan的处理不对,当 bind ndiswan的时候,ndisopenadapter的调用会返回selectmedum =3,也就是ndismedumwan,但是在mpinilize的时候并不 修改这个值,只是欺骗上层(tcp/ip),这是一个802.3, 但是当ptreceive的时候,在那个switch里面,这个值 还是ndismediumwan,因此会发生问题。简单的修改方法 是在mpinilize里面加上padapt->medium=medium;( 在发现medium == ndismediumwan的时候) 或者,在switch里面加上一个case ndismediumwan: 然后ndismethindicatepacket(...)。在ptreceivecomplete 里面同样处理。 以上是我过年前在混乱之中移植passthru到98/se/me下 发现的问题。但是似乎发现没有引起大家的重视。 还有一个问题是,不知道哪位有vc7编译driver的经验, 我用vc7编译driver,总是有2个warning,说base 0x10000会 导致不能在98下运行,还有一个是什么我自己都忘了,这两个 waring一直没有解决,因此我也就一直没有在xp下开发过driver, vc6当然可以在xp下编译通过,但是我非常喜欢vc7的界面, (可能是用vb6用的时间太长了)以至于我无法在安装了 vc7的情况下继续用vc6。这两个waring搞得我一直心烦意乱, 编译的driver可以工作,但是我一直是把waring当作error 处理的,为了编译通过我不得不修改设置,把4级安全级改成 3级,简直是痛苦坏了。 |
|
最新喜欢:flyfox
|
沙发#
发布于:2002-05-23 21:16
五没看过wan的,不懂了
你多贡献一点吧,大家会少走许多弯路的。呵呵! |
|
|
板凳#
发布于:2002-05-23 21:54
当时偶看到过,这会儿正想问呢,版主又来贡献了。hoho
怎么版主也是看到一个warning就心里发慌。 我很怀疑大家有谁用了.net来做驱动的. 好了进入正题吧。当时看到时偶觉得passthru好象没什么问题呢(是不是偶太笨了.hehe) 版主的解决意见是不要骗上层,然后如果是 ndismediumwan就用ndismethindicatepacket就行了吧. See the Windows XP PassThru driver sample. There are two key points: 1.) In the INF set FilterMediaTypes to include \'wan\'. 2.) Insure NdsiMediumWan is passed in your MediumArray to NdisOpenAdapter. If the open is successful and the adapter selects NdisMediumWan - ignore that and write your code to work as if the selected media type was actually NdisMedium802_3. 不过偶觉得,passthru好象是这个意思吧: 1. 在openadapter时,如果参数MediumArray里有NdsiMediumWan ,open ok; 2. mpinitialize时,如果发现是NdsiMediumWan ,骗别人(上层协议)说自已是 NdisMedium802_3; 3. 在ptreceive时,如果是NdsiMediumWan,或是NdisMedium802_3,都是一样当NdisMedium802_3处理,把下面来的东东用NdisMEthIndicateReceive交待上去,好象也可以吧,偶也试了偶的imd来拨号,好象没有ASSERT? hoho,看来是偶太笨了.heihei 版主已经升级到xp了,偶等也要加油了 |
|
|
地板#
发布于:2002-05-23 22:51
好像用xp要好一点,我前两天看oney的主页,它的那个著名的向导程序sp10已经不支持2000,而是改为支持xp了。他提供了一个信息,说在这些DDK里只有xp的那个是ms作了质量保证的。其余的都不作质量保证。并且作结论说,花点钱买一个xp ddk绝对是一个英明决策。
|
|
|
地下室#
发布于:2002-05-23 22:53
passthru for winxp直接支持wan的绑定,但是代码里面 没错没错!!上次我提过这个问题VC7下面就是老会出现WARNNING,我一直就纳闷!上次问了竟然没人理睬~~晕~~不过我是3个WARNNING,VC6里面就没有! X_TsNDI_Produce\\i386chk\\X_TsNDI.sys : warning LNK4086: entrypoint \'_DriverEntry@8\' is not __stdcall with 12 bytes of arguments; image may not run LINK : warning LNK4078: multiple \'INIT\' sections found with different attributes (E2000020) LINK : warning LNK4096: /BASE value \'0x10000\' is invalid for Windows 95 and Windows 98; image may not run 没想到老大也碰到这个问题了! 还有就是VC7里面如果对大部分DDK专用的函数或结构、类型什么的用GOTO DEFINITION功能是用不了的!我试着改变了IDE环境的INCLUDE目录的设置添加了DDK里面的几个INC目录,可是还是没有效! 另外发现一个特别有趣的问题呵呵~~真的很有趣,我的文件命和目录名都是使用长文件名的,VC6里面有时候太长了是不能编译的[当长到OUTPUT窗口必须把信息分两行显示的时候就不能编译了!说找不到文件]!在VC7里面就可以!但是有时候INCLUDE 某HEADER文件的目录是你上层的另一个分支比如“..\\..\\inc\\xxxxxxxxxxx\\yyyyyyyyy\\zzzzzzzzzz\\kkk.h”,大家也看到这个路径比较长!当长到一定程度的时候呵呵~~就会说找不到这个头!但是如果你把“..\\..\\xxxxxx”改成“..\\XXXXX”也就是少向上跳一层目录的时候就可以编译了[前提是必须向上两个目录才是正确的,当然改短目录命或文件名也可以!但是就不会出现这个问题了!]!偶尔还会出现把你的HEADER文件复制一个到C:盘根目录下!真有意思~~我向微软发了信向OSR也发了!可是没人鸟我~~~ 另外还有当你的DSW里面包含多个DSP的时候想转换成SLN[VC7的WORKSPACE格式]会VC7的IDE会当掉!漏洞多多啊~~不过我喜欢VC7里面可以看当前文件有几个函数的那个组合框,在VC6里面我都是靠设置“GOTO NEXT FFUNCTION”和“GOTO PREVIOS FUNCTION”的快捷键来快速转跳到同一个文件里的函数的!可是VC7里面就不用这么麻烦!直接选那个COMBO框就可以了~~可惜漏洞多多啊!大家多交流交流。NET的IDE环境下开发的心得有好处啊!加快开发速度!! |
|
|
5楼#
发布于:2002-05-23 23:04
好像用xp要好一点,我前两天看oney的主页,它的那个著名的向导程序sp10已经不支持2000,而是改为支持xp了。他提供了一个信息,说在这些DDK里只有xp的那个是ms作了质量保证的。其余的都不作质量保证。并且作结论说,花点钱买一个xp ddk绝对是一个英明决策。 呵呵~~跑来这里帮萎软做推销啦??萎软给你几K一个月啊? |
|
|
6楼#
发布于:2002-05-23 23:33
关注!
:D :o :o |
|
|
7楼#
发布于:2002-05-23 23:39
[quote]好像用xp要好一点,我前两天看oney的主页,它的那个著名的向导程序sp10已经不支持2000,而是改为支持xp了。他提供了一个信息,说在这些DDK里只有xp的那个是ms作了质量保证的。其余的都不作质量保证。并且作结论说,花点钱买一个xp ddk绝对是一个英明决策。 呵呵~~跑来这里帮萎软做推销啦??萎软给你几K一个月啊? [/quote] 推推看啦。不用推大家不都用上拉嘛。 |
|
|
8楼#
发布于:2002-05-23 23:43
[quote][quote]好像用xp要好一点,我前两天看oney的主页,它的那个著名的向导程序sp10已经不支持2000,而是改为支持xp了。他提供了一个信息,说在这些DDK里只有xp的那个是ms作了质量保证的。其余的都不作质量保证。并且作结论说,花点钱买一个xp ddk绝对是一个英明决策。 呵呵~~跑来这里帮萎软做推销啦??萎软给你几K一个月啊? [/quote] 推推看啦。不用推大家不都用上拉嘛。 [/quote] 大家都在用了~~`不过都是D版的! |
|
|
9楼#
发布于:2002-05-23 23:45
我的也是站里下载的。
|
|
|
10楼#
发布于:2002-05-24 09:09
我的意思是,既要欺骗上层,也要欺骗自己。
你没有assert是因为你的wan miniport和我的不一样, 因此代码没有走到 switch case break; case break; case break; default: assert 那里面来。 你不用怀疑,我正在想应该怎么用c++的模版写driver, 现在考虑.net也没有什么奇怪的。 我早就用了xp了,但是还没有真正在上面利用它的特性。 xp ddk的sample大致翻了翻而已。 另外,我的MS的软件都是正版的,因为我是msdn 宇宙版 的订户。一年24000 ¥。 当时偶看到过,这会儿正想问呢,版主又来贡献了。hoho |
|
|
11楼#
发布于:2002-05-24 09:46
我以前也用VC6来编译驱动,但后来发现和DDK编译后的文件大小不一样,按说编译器是一样的,后来便自己写了一个bat,把它加到VC的Tools栏,感觉也挺方便,可以在编译完调试版后自动生成nms文件,并且删除没有的中间文件,发行版驱动则拷贝到代码目录下,感觉更省事,呵呵。现在把这两个文件贴上来,大家不要笑我啊
|
|
|
12楼#
发布于:2010-04-26 21:40
不错不错。
|
|
|