阅读:3048回复:9
NdisRegisterProtocol问题
我在DriverEntry中写如下代码:
NdisZeroMemory(&ProtocolCharacteristics, sizeof(NDIS_PROTOCOL_CHARACTERISTICS)); ProtocolCharacteristics.MajorNdisVersion = 5; ProtocolCharacteristics.MinorNdisVersion = 0; ProtocolCharacteristics.Name = ProtocolName; ProtocolCharacteristics.OpenAdapterCompleteHandler = ProtocolOpenAdapterComplete; ProtocolCharacteristics.CloseAdapterCompleteHandler = ProtocolCloseAdapterComplete; ProtocolCharacteristics.SendCompleteHandler = ProtocolSendComplete; ProtocolCharacteristics.TransferDataCompleteHandler = ProtocolTransferDataComplete; ProtocolCharacteristics.ResetCompleteHandler = ProtocolResetComplete; ProtocolCharacteristics.RequestCompleteHandler = ProtocolRequestComplete; ProtocolCharacteristics.ReceiveHandler = ProtocolReceive; ProtocolCharacteristics.ReceiveCompleteHandler = ProtocolReceiveComplete; ProtocolCharacteristics.StatusHandler = ProtocolStatus; ProtocolCharacteristics.StatusCompleteHandler = ProtocolStatusComplete; ProtocolCharacteristics.BindAdapterHandler = ProtocolBindAdapter; ProtocolCharacteristics.UnbindAdapterHandler = ProtocolUnbindAdapter; ProtocolCharacteristics.PnPEventHandler = ProtocolPnPEvent; NdisRegisterProtocol((PNDIS_STATUS)&Status, &ProtocolHandle, &ProtocolCharacteristics, sizeof(NDIS_PROTOCOL_CHARACTERISTICS)); return Status; 用Windbg跟踪发现返回的结果也是OK的。但是ProtocolBindAdapter这个函数貌似没有执行(里面有__asm int 3,没有停在这里)。不知道为什么。刚学NDIS。请高手帮忙分析下什么问题。 谢谢! |
|
沙发#
发布于:2010-06-17 16:46
用ddk里面的框架吧!..你这样是折磨自己!
|
|
板凳#
发布于:2010-06-17 17:00
|
|
地板#
发布于:2010-06-17 17:30
按照框架去做,不要自己想当然
|
|
|
地下室#
发布于:2010-06-17 17:45
|
|
5楼#
发布于:2010-06-17 22:11
回 4楼(wuwang123xx) 的帖子
只能等我自己找到原因了。发了几次帖子,没一个有人帮忙。哎! |
|
6楼#
发布于:2010-06-18 13:53
1 这问题看看ddk例子就都明白了,根本就不是问题
2 提供的信息太少。这例子需要ndis框架,现在流程代码都没有,让别人怎么分析? 多从自己身上找问题,勿怨天尤人 |
|
|
7楼#
发布于:2010-06-18 14:20
系统为什么要调用你BindAdapterHandler呢?
inf安装可以,使用ddk自带的简单修改一下。 自己枚举后手工调用也可以。 |
|
8楼#
发布于:2010-06-18 15:30
引用第6楼cyliu于2010-06-18 13:53发表的 : 我搜索发现有人在论坛提过类似问题。 http://bbs.driverdevelop.com/read.php?tid-99604.html 你用DriverMoitor打开驱动的过程相当于临时在注册表中增加了一个服务,然后net start它。这个过程对NDIS Protocol Driver是不充分的,此时NDIS不会调用ProtocolBindAdapter(),但仍会调用ProtocolPnPEvent()。 如果想让ProtocolBindAdapter()被调用,必须通过Network Control Panel Applet (NCPA)安装协议驱动。或者参看DDK例子代码中的netcfg(Network Configuration Sample)。netcfg演示了利用INetCfg API枚举、安装、卸载网络组件。 另外在网上下载了一个例子有说到: DDK给出了Packe协议驱动程序的安装信息文件packet.inf;将该文件同packet.sys放到同一目录下,就可以进行安装了,具体步骤如下:打开本地连接的属性窗口,进入安装功能界面。选择添加协议->从磁盘安装;然后选中对应的Packet.inf即可,安装完毕后,“本地连接 属性”栏中将会显示出新安装的协议“DDK PACKET Protocol”,此时我们就可以在应用程序中通过该驱动获取网络数据了。 现在差不多理解了。给大家添加麻烦了。 谢谢! |
|
9楼#
发布于:2010-06-18 17:51
根据前面的方法。我试了,可以跟踪到BindAdapterHandler的执行过程。
|
|