HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
阅读:3777回复:12

passthru for xp的一个bug

楼主#
更多 发布于:2002-05-23 21:10
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级,简直是痛苦坏了。





最新喜欢:

flyfoxflyfox
不再回忆从前,我已经生活在幸福当中。
fenger_li
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2005-04-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-23 21:16
五没看过wan的,不懂了

你多贡献一点吧,大家会少走许多弯路的。呵呵!
有点意思。。。 呵呵!
sirroom
驱动大牛
驱动大牛
  • 注册日期2001-07-30
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望11点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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了,偶等也要加油了


111
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-23 22:51
好像用xp要好一点,我前两天看oney的主页,它的那个著名的向导程序sp10已经不支持2000,而是改为支持xp了。他提供了一个信息,说在这些DDK里只有xp的那个是ms作了质量保证的。其余的都不作质量保证。并且作结论说,花点钱买一个xp ddk绝对是一个英明决策。
按第一贴的“给分”键,给分。
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-23 22:53
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级,简直是痛苦坏了。





 




没错没错!!上次我提过这个问题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环境下开发的心得有好处啊!加快开发速度!!
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-23 23:04
好像用xp要好一点,我前两天看oney的主页,它的那个著名的向导程序sp10已经不支持2000,而是改为支持xp了。他提供了一个信息,说在这些DDK里只有xp的那个是ms作了质量保证的。其余的都不作质量保证。并且作结论说,花点钱买一个xp ddk绝对是一个英明决策。

呵呵~~跑来这里帮萎软做推销啦??萎软给你几K一个月啊?
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-05-23 23:33
关注!


 :D :o :o
[color=red]大头鬼! :P[/color]
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-23 23:39
[quote]好像用xp要好一点,我前两天看oney的主页,它的那个著名的向导程序sp10已经不支持2000,而是改为支持xp了。他提供了一个信息,说在这些DDK里只有xp的那个是ms作了质量保证的。其余的都不作质量保证。并且作结论说,花点钱买一个xp ddk绝对是一个英明决策。

呵呵~~跑来这里帮萎软做推销啦??萎软给你几K一个月啊? [/quote]

推推看啦。不用推大家不都用上拉嘛。
按第一贴的“给分”键,给分。
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-05-23 23:43
[quote][quote]好像用xp要好一点,我前两天看oney的主页,它的那个著名的向导程序sp10已经不支持2000,而是改为支持xp了。他提供了一个信息,说在这些DDK里只有xp的那个是ms作了质量保证的。其余的都不作质量保证。并且作结论说,花点钱买一个xp ddk绝对是一个英明决策。

呵呵~~跑来这里帮萎软做推销啦??萎软给你几K一个月啊? [/quote]

推推看啦。不用推大家不都用上拉嘛。 [/quote]
大家都在用了~~`不过都是D版的!
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-05-23 23:45
我的也是站里下载的。
按第一贴的“给分”键,给分。
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
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
怎么版主也是看到一个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了,偶等也要加油了


 
不再回忆从前,我已经生活在幸福当中。
bingjie
驱动小牛
驱动小牛
  • 注册日期2001-08-15
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-05-24 09:46
我以前也用VC6来编译驱动,但后来发现和DDK编译后的文件大小不一样,按说编译器是一样的,后来便自己写了一个bat,把它加到VC的Tools栏,感觉也挺方便,可以在编译完调试版后自动生成nms文件,并且删除没有的中间文件,发行版驱动则拷贝到代码目录下,感觉更省事,呵呵。现在把这两个文件贴上来,大家不要笑我啊
附件名称/大小 下载次数 最后更新
2002-05-24_MakeDrv.zip (1KB)  16
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
12楼#
发布于:2010-04-26 21:40
不错不错。
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
游客

返回顶部