阅读:1661回复:7
wince4.2网络抓包出错
语言:evc
程序并没有用标准驱动的格式去做dll,而是做了个普通dll,里面有协议驱动的所有接口函数,还有比如初始化(注册协议驱动)、打开、关闭、读和写的接口,供上层调用。 首先我定义了NDIS_PROTOCOL_CHARACTERISTICS变量,把dll里相关函数指针都嵌到该变量中,通过NdisRegisterProtocol返回的Status也指示注册成功了。 第二步,我在打开接口(被上层调用的,而不是和下层绑定的)中,直接打开NE2000网卡,但是失败,如下: PNDIS_STRING pName; pName->Length = 14; pName->MaximumLength = 16; pName->Buffer = TEXT("NE20001"); NdisOpenAdapter (&Status, &ErrorStatus, &Open->AdapterHandle, &uiMedium, MediumArray, NUM_NDIS_MEDIA, GlobalDeviceExtension->NdisProtocolHandle, Open, pName, 0, NULL); 返回的Status是NDIS_STATUS_ADAPTER_NOT_FOUND。说明:硬件上有2块ne2000网卡,名字在注册表中分别为NE20001和NE20002,在网络上网卡可以ping到其他pc,说明网卡在wince4.2内已经有驱动,但是为什么返回找不到呢,把pName->Buffer = TEXT("NE20002");也试了,也是找不到。 我快疯掉了,用的是Ndis4.0。 我的本意是做个普通dll,上层调用它的接口如:init、open、close、read 、write就可以了,所以没做驱动方式。 望高手指点,项目快到期了,急死了。 |
|
沙发#
发布于:2007-11-24 00:02
你看看ne2000注册的小端口名字叫什么 还有你自己应该是中间层驱动吧 注意ce里ndis驱动关键在于注册表的注册
|
|
板凳#
发布于:2007-11-24 09:43
楼上的.谢谢.但是我没有用什么小端口.
我就是注册了一个协议驱动Protocol , 然后就查注册表了,看到comm\ne2000下有个route , 就把里面的键值NE20001读出来了,然后放到PNDIS_STRING的Buffer中,长度和最大长度为14和16 ,就是NdisOpenAdapter绑定不上。注册协议驱动成功了,协议驱动的名字叫“PKT ”,这个和小端口有关系吗?有没有这段功能的示例代码呢?是ce上的。 谢谢,还希望高手门能留下邮箱,最好电话,项目比较紧,我想直接向您请教。 |
|
地板#
发布于:2007-11-24 21:13
简单 你装个pb4或5或6,里面的ddk例子里面有passthru(xp下的passthru在ce里实现),你稍微改下就能用,还有如果要抓wan的包的话,passthru就要改的注册机制或另想办法,eth网的没问题,不要告诉我你没有pb。。。
|
|
地下室#
发布于:2007-11-24 22:36
谢谢,我有4和6。先看看。
|
|
5楼#
发布于:2007-11-24 22:38
你说的那个DDK例子里的passthru在什么文件夹下?
|
|
6楼#
发布于:2007-11-24 22:56
找到了,但是这个还是个小端口驱动的例子。我想做个普通的DLL,把那些初始化和打开、关闭、发送、接受都做成接口函数被上面调用。而且直接是注册协议驱动,再绑定ne2000网卡,为什么不行呢?难道做成普通dll就不行?为什么返回NDIS_STATUS_ADAPTER_NOT_FOUND?
|
|
7楼#
发布于:2007-11-25 21:55
ndiauio是协议驱动,看看对你有没有帮助,抓包的话,还是用passthru它是中间层驱动
在你的流驱动里export你需要的函数,应该也可以吧 |
|