阅读:1863回复:3
Passthru的MPSend()无法设置断点,而MPSendPackets()却可以,这是怎么回事?
我刚入门,系统是windows XP,建好ddk2003,vc6,DS3.2的环境后,先编译Passthru,安装,打开softice,然后打开symbol loader,打开Passthru.sys,加载symbol。。。这些都没什么问题。
Ctrl+D呼叫softice后,发现在MPSend()里面没办法加断点(bpx,出“symbol not defined”的信息),但在miniport.c的其它函数中均可以加断点,请问这是什么原因啊? 请多指教,先谢谢了~ |
|
沙发#
发布于:2009-06-01 17:11
如果你用的是原版的passthru驱动的话,在passthru.c文件的DriverEntry函数里应该会有这样一行(XP版的ddk是133行):
MChars.SendHandler = NULL; // MPSend; 也就是说MPSend函数根本没有挂到相应的NDIS Handler上,在驱动运行时不会被调用到。你说的情况大概应该是这个原因吧。 |
|
板凳#
发布于:2009-06-15 23:01
多谢,确实是这个原因
自己是个新手,什么都是茫茫然。。 |
|
地板#
发布于: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。 |
|