阅读:1676回复:12
DOS下的网络binding一问,20分,谢谢
我写了dos下的网卡驱动程序,驱动程序加载后,protman调用了我的bind接口,我的程序正常,返回值0(success),并且互相交换了CommonCharacteristics,然后protman继续执行,就死菜在那里了,如果返回值为23h(HARDWARE_NOT_FOUND),则执行正常,也会显示Error: 35 hardware not found.我晕倒,谁能帮我,在commoncharacteristics中个函数接口地址都没问题,我查了好多遍。protman调用了我的bind接口后,都要干些什么啊!?唉!。。。。。。
[编辑 - 10/30/02 by silan] |
|
|
沙发#
发布于:2002-10-19 09:46
老兄,你这方面的资料和开发包从哪里搞来的,我们可以在QQ上谈谈吗?QQ:39122639
|
|
板凳#
发布于:2002-10-22 13:31
silan兄:你到底来没来啊,我天天盼望你的回复啊!!!!
|
|
地板#
发布于:2002-10-22 13:59
安装msclient3.0,在net initialize时,我的驱动被调用了,可是系统会给出-null pointer assignment提示,但是加载正确,nwlink没问题,netbind时,我的驱动的bind接口被调用,成功返回后系统会死机,不知道问题出在什么地方?后来我用softice跟踪了一下,发现不是死在PROTMAN里,也不是死在netbios里,不知道是在什么地方,差不多是0190:????,这不是系统区吗?我的网卡驱动的CommonCharacteristics中的UpperDispatch指向了正确的地址,LowerDiapatch为NULL,会不会是这个问题,协议上说这个可以为NULL呀,再说网卡的驱动哪有下层接口?谢谢各位喽。
|
|
|
地下室#
发布于:2002-10-22 14:06
To ldljlzw:
很抱歉,公司的某些端口被封了,QQ出不去了,我也不知道什么时候可以上网,一般星期五晚上我都在。我的QQ:13410659。这方面我很菜,项目组有三个人负责驱动,一个搞windows,一个搞linux,我负责DOS和无盘工作站上的bootrom,问题是我是半路出家搞驱动的,现在感觉就是在混饭吃,我倒!!! |
|
|
5楼#
发布于:2002-10-22 14:21
ldljlzw兄,我也非常想跟你交流交流,DOS下这东东虽然简单,可是现在已经被历史的车轮碾得粉身碎骨,我们现在也无异于从头开始,合作吧。不过我很奇怪,你为什么也要做NDIS2的驱动呢!?我是没办法,无盘网络上要用到这个,要不然,就是把我开掉我也不干这个!!!更失败的是,等我的DOS驱动写完了(没有调试),我才发现,无盘网络可以绕过这个,Faint,这时想停手又觉得可惜。
|
|
|
6楼#
发布于:2002-10-22 19:51
我搞调试还可以的!!!要不我给你调试好不好啊!!!!
ldljlzw@vip.163.com |
|
7楼#
发布于:2002-10-28 09:54
现在netbind时不会死机了,但net initialize时,仍会出现\'run-time error R6001 -null pointer assignment\',请问这是怎么回事?但是如果我先加载softice就不会出现这个提示。接下来执行:
nwlink netbind (这时调用我的bind接口,成功) 但是,netbind并没有被加载到内存,用mem /a/d/p看不到netbind,再执行下去就要出错了,说没有加载netbind,请问这时怎么回事啊? |
|
|
8楼#
发布于:2002-10-30 11:01
protman调用了我的bind接口后,都要干些什么啊!?
-----------实际上不是protman调用了bind接口,而是上层模块调用你的bind接口来交换彼此的CCT(具体怎样交换不太清楚),请看下面原文。 5. An application opens the PROTMAN$ device and issues the BindAndStart IOCTL. Such an application utility called NETBIND.EXE is provided with the Protocol Manager driver and is defined in Appendix E. 6. The Protocol Manager uses information passed on previous RegisterModule calls to determine the module binding hierarchy. 7. Proceeding from bottom to top of the binding hierarchy, the Protocol Manager uses InitiateBind to cause each module to bind to the module below it in the hierarchy. Each module getting this call responds by issuing a Bind call to the module specified by the Protocol Manager on InitiateBind. 8. When all modules have been bound, the Protocol Manager returns from BindAndStart. --其实使用MSclient的动态加载只是一种方法,还可以在config.sys中加载,不过我也不知道对你的情况会不会用用。 另外:我现在也在做NDIS2的相关开发,不过我是直接利用网卡驱动。我想问你几个问题,你的bind是如何工作的(详细的,如何交换CCT)?你是如何知道你的函数入口地址是正确的?可以以下方式联系我,Email:yaojuntao@vip.sina.com。交流一下吧! :D |
|
|
9楼#
发布于:2002-10-30 15:41
我的驱动被加载时调用了initialzie,在这里我调用了RegisterModule向ProtMan注册了我的模块,给了它两条信息:一个指向我的CCT的指针,一个指向BindingLists的指针。然后NetBind时,直接调用我的Binding接口:
push CallerCharacteristicsPointer push AddressToReturnCalledModuleCtPointer puch 0000h(Reserved) push 0002h(OpCode: 2=Binding) push CalledModuleDS call SystemRequests(驱动程序的SystemRequests接口),我的驱动在SystemRequests中会根据OpCode判断出是不是调用我的Binding。问题是我的Binding被调用并交换了CCT后,再执行TCPTSR时会出现\'NET0125: NETBIND must be executed before TCP/IP TSR module is loaded. Unloaded TCP 1.0 not loaded.\',我怀疑我在initialize里的RegisterModule时,BindingLists里面说绑定的模块数为0,造成我的模块,不能正常绑定,我不知道该怎么办! |
|
|
10楼#
发布于:2002-10-31 09:38
我把RTL8139的ndis2网卡驱动反汇编了一下,发现它在RegisterModule时,Pointer2(该指向BindingLists)指向了NULL,所以我也把我的改成了NULL,可是我的Binding被调用后,执行TCPTSR时还是出现:现\'NET0125: NETBIND must be executed before TCP/IP TSR module is loaded. Unloaded TCP 1.0 not loaded.\'错误,我跟踪了一下,我的Binding返回了SUCCESS(==0),NetBind也没出什么错,怎么就是执行TCPTSR不下去呢。重装MSCLIENT30,协议只加IPX,net start是还是不行。我真是搞不明白。
|
|
|
11楼#
发布于:2002-10-31 14:00
我认为网卡驱动在RegisterModule时,Pointer2(指向BindingLists)应该是指向了NULL的,因为它没有下层模块又不知道上层模块是什么,所以其BindingLists为NULL表示当前它不绑定到任何模块。建议你再检查一下你的Bind接口函数,它是如何被上层模块调用的,参数如何交换的……。还有就是看看你的dos内存分配,会不会是什么UMB的问题。不知道具体情况,如果不对就当作胡言乱语。还有我的QQ:8231750,Mail:yaojuntao@vip.sina.com,可以和我联系。
|
|
|
12楼#
发布于:2002-10-31 15:02
根据ndis201协议,还有对rtl8139驱动的跟踪,我确定网卡驱动在RegisterModule时,Pointer2(指向BindingLists)应该是指向了NULL的。Bind是这么回事:DOS启动时加载各协议模块和网卡驱动,这些模块都RegisterModule,协议模块会指定BindingLists,之后ProtMan会根据BindingLists信息依次调用协议模块的InitiaBind,并把协议模块要绑定的模块的CommonCharacteristics传过去,协议模块再根据CommonCharacteristics调用要绑定模块的Bind接口,这里就是我的Bind接口。至于Bind接口我已经把ndis201看了不知多少遍,很简单的一个接口,我实在不敢再认为我会在这里犯错误了。有可能的确是umb的问题,因为如果我不加载softice,net initialize时会出现\'-null pointer assignment\'错误提示,但能\'the command completed successfully\',加载softice后就没有这个提示了,只是tcptsr一直过不去。我用\'mem /a/d/p\'看了一下,内存还有很多啊,我对这个不懂,你能不能说详细点。我重新发个贴子,你在那个贴子里回答吧,谢谢!
|
|
|