阅读:1890回复:4
胡老大,胡大侠。有事情请教了,小弟实在是百思不得其解!
不知道老大还是不是常来不来了。
我要做WinCE3.0的IMD,可是在NdisOpenProtocolConfiguration的时候出现了问题,那就是ProtocolBindAdapter中的SystemSepcific1不能被使用,只要我访问这个指针,驱动就马上被系统断掉,并不做任何处理。 我想知道有可能是什么原因可能造成这种情况的?在WinCE3.0里面NDIS是NDIS4.0的子集,不是全部支持的。但是这是不是证明了系统已经取消了对他的支持呢? 请各位大侠指教! :( |
|
|
沙发#
发布于:2003-04-09 19:35
不知道老大还是不是常来不来了。 你的驱动程序注册的时候不是PROTOCOL。是MINIPORT,所以显然...使用NdisOpenConfiguration. |
|
|
板凳#
发布于:2003-04-11 10:08
前几天一直上不来,不知道GJP老大看到我给你的MAIL没有?
这个问题已解决了,在Windows CE3.0中不支持SystemSpecific1了,所以不能使用SystemSpecific1。我现在是自己来确定真实网卡和ADAPTER链表中结点的对应关系。现在处理了循环绑定之后,没有任何问题了,可以看到我自己的Protocol绑定到每个真实网卡之后就会初始化一个Miniport,这个已经成功的结束了,没有任何问题,但是现在更大的问题出现了。 在PPC2002(基于Windows CE3.0一个操作系统)的模拟器中一共有NE2000、DC21140、Irsir、PPTP、AsyncMac一共五个网卡。其中AsyncMac和Irsir是NDISWAN的,我在ProtocolBindAdapter()中使用了MediumArray[] = {NdisMediumIrda,NdisMedium802_5,NdisMedium802_3}; 所以可以看到,AsyncMac和Irsir在NdisOpenAdapter的时候失败了。而DC21140在NdisOpenAdapter成功了,并且在随后的Miniport实例的初始化中调用MiniportInitialize()都成功了,并且循环绑定也被我阻止了,所以所有的绑定就没有问题了。现在的问题是: (1)为什么NE2000没有绑定,我在注册表中指定的是绑定NE2000,可是他并没有出现,而是出现了所有没有指定要绑定的。 (2)当我在注册表中指明绑定NE2000的时候,启动之后,模拟器提示无法得到PC机的IP地址,但可以Ping别人,可以和我用来开发的PC机通信,但是我没法截到包;当我修改为指定绑定DC21140的时候,模拟器没有任何提示,但是模拟器与外界的所有通信被截断,我无法调试程序了。因为模拟器和开发驱动的PC机是使用Loopback来通信的。 我不知道错在哪里? 注册表和绑定关系究竟有没有影响?为什么他不管注册表信息直接就来依据我们提供的MediumArray来绑定。但是注册表信息有会带来严重的问题? 请高手指教!! |
|
|
地板#
发布于:2003-04-11 11:40
前几天一直上不来,不知道GJP老大看到我给你的MAIL没有? 别发我NETEASE。COM的信箱了,那个信箱已被SPAM炸了。 我没有接触过嵌入式系统和WINCE,所以只能以WINDOWS平台下的想法和你讨论。 1.先确定是否nE2000网卡启动正常,注册该IMD是否正常。 2. 看上去TCPIP也没有绑定成功。注册表和绑定当然是有影响的。NDIS安装时会把你需要绑定的网卡设备都放在放入注册表中的。 |
|
|
地下室#
发布于:2003-04-11 14:17
现在WinCE中我没有任何资料可以查阅,CE的开发工具PB(Platform Builder)中关于NDIS部分的帮助就是PC中,连注册表项都没有改,在CE中根本就找不到PB中提到的注册表项,只是在PC机中有,所以微软没有专门做CE的帮助文档,而是直接使用的PC机的文档,可是在注册表上他们又是完全不一样的。
我觉得也是绑定关系在注册表中确定的不准确,但是有一点可以肯定:在系统把IMD的协议部分绑到真实网卡的时候,系统没有考虑注册表的事情,而是绑定协议部分到所有的真实网卡,并为每个我们所允许的网络介质的真实的网卡导出一个设备对象来管理这个真实的网卡;然后我们所能看到的绑定就宣告结束了,其它的事情就是NDIS来做了。也就是说NDIS读注册表中的绑定关系这个过程对我们是透明的。我又仔细看了一下PC机中的过程,他同样是这个过程,所有的绑定过程是和CE是一样的,所以我觉得从PC的东西中也可以找到突破口,现在的关键是CE根本就没有什么有意义的资料,我查遍了Google和Yahoo两个新闻组也没有找到任何有意义的信息。前几天一个英国人给了一个说他是这么做的,结果是不好使。 我现在的疑问是: (1)为什么没有绑到NE2000上,在系统中我们可以看到NE2000在正常的工作,没有问题!这个应该和CE系统有关,这就不做讨论了。 (2)为什么当我在注册表中绑定NE2000的时候IE死掉,然而可以Ping到别人,并且IP是我PC的IP;当我在注册表中绑到DC21140的时候,PDA的所有通信被阻断。无法与它通信了。它及无法接收包也无法发送。 在这种情况下,我的假设是:和NE2000绑定的时候我们的IMD其实是一个无用的东西,但是他做为一个虚拟的网卡,在TCPIP看来同样需要IP,所以去为它PC机的IP,但是失败了。IE启动时,由于下层网卡句柄的混乱而死掉!和DC21140绑定的时候,整个IMD完全成功了,但是由于我们的IM有问题,所以所有的通信被阻断。 我的结论是:我们的IMD初始化和绑定没有任何问题是成功的,出错在注册表中的绑定关系的确定上! GJP老大,你同意我的结论吗?还有,你认为注册表中的绑定关系是在什么时候被NDIS读取的?是我说的那样吗? 我反汇编了NdisOpenProtocolConfiguration()发现它仅仅是直接调用NdisOpenConfiguration()而已,而NdisOpenConfiguration()仅仅是读注册表而已,他只是调用了RegOpenKeyEx,然后就没有任何的动作了。所以我对NdisOpenProtocolConfiguration()和NdisOpenConfiguration()的作用认为是:仅仅是为了在让我们能在MiniportInitialize()中能够找到当前Protocol绑定的是那张网卡是什么,好使用他的信息初始化我们为真实网卡建立的设备对象。(因为这个过程是:Protocol绑定到真实网卡,然后调用NdisIMInitializeDeviceInstance(),而NdisIMInitializeDeviceInstance()的实质就是调用MiniportInitialize()。) 请高手出手! 这是我的毕设课题,所以很着急啊! :( :( :( |
|
|