zenco
驱动牛犊
驱动牛犊
  • 注册日期2009-04-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1863回复:3

Passthru的MPSend()无法设置断点,而MPSendPackets()却可以,这是怎么回事?

楼主#
更多 发布于:2009-05-30 23:20
我刚入门,系统是windows XP,建好ddk2003,vc6,DS3.2的环境后,先编译Passthru,安装,打开softice,然后打开symbol loader,打开Passthru.sys,加载symbol。。。这些都没什么问题。
Ctrl+D呼叫softice后,发现在MPSend()里面没办法加断点(bpx,出“symbol not defined”的信息),但在miniport.c的其它函数中均可以加断点,请问这是什么原因啊?

请多指教,先谢谢了~
modernrabbit
驱动牛犊
驱动牛犊
  • 注册日期2009-03-31
  • 最后登录2013-02-18
  • 粉丝1
  • 关注0
  • 积分30分
  • 威望281点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
沙发#
发布于:2009-06-01 17:11
如果你用的是原版的passthru驱动的话,在passthru.c文件的DriverEntry函数里应该会有这样一行(XP版的ddk是133行):

MChars.SendHandler = NULL;   //  MPSend;

也就是说MPSend函数根本没有挂到相应的NDIS Handler上,在驱动运行时不会被调用到。你说的情况大概应该是这个原因吧。
zenco
驱动牛犊
驱动牛犊
  • 注册日期2009-04-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-06-15 23:01
多谢,确实是这个原因
自己是个新手,什么都是茫茫然。。
Chequer
驱动牛犊
驱动牛犊
  • 注册日期2008-10-07
  • 最后登录2011-08-26
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望144点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-07-08 11:25
这其实是历史原因。NDIS 6.0之前,关于发送数据包的有两个函数NdisSend和NdisSendPackets,你看看,这个和MiniportSend/MiniportSendPackets何其相像。

是的!从理论上讲,当Protocol使用NdisSend的时候,MiniportSend就会被呼叫到;当使用NdisSendPackets的时候,MiniportSendPackets就会被呼叫到。

NDIS对于这个,做和很大的优化,如果Miniport driver只注册了MiniportSendPackets(对于deserialize的miniport来说,这是必须的),NDIS都会来呼叫你的MiniportSendPackets,而不管protocol用了那一种形式的Send。
游客

返回顶部