阅读:1970回复:3
看了以前的帖子,但还是不明白MPSendPackets为什么要调用NdisMSendComplete?
看了帖子:
http://bbs.driverdevelop.com/read.php?tid-4770-keyword-NdisMSendComplete.html http://bbs.driverdevelop.com/simple/index.php?t5317.html 我想流程应该是: MPSend 始终不调用NdisMSendComplete,该函数返回ndis_status_pending时,系统调用我们注册的PtSendComplete,返回其它就不会调用PtSendComplete MPSendPackets没有返回值,系统肯定会调用PtSendComplete。但是既然系统肯定会调用PtSendComplete,我们干吗要在MPSendPackets函数里调用NdisMSendComplete?PtSendComplete也调用NdisMSendComplete,这样不是重复处理吗? 我修改了MPSendPackets函数,发送ICMP报文时将内容随便改了一下,实际也只发出来了修改后的报文,PING的机器也能收到我修改后的报文,但是很奇怪本机上用wireshark抓包为什么能看到发送两个ICMP报文,一个是没有修改内容的,一个是修改内容的。wireshark(WINCAP)不是工作在协议层吗?我在中间层修改的报文为什么能抓到呢 |
|
沙发#
发布于:2008-08-29 10:26
我理解流程是这样:
当MPSend 函数返回ndis_status_pending时,系统调用NdisMSendComplete,ndis调用我们注册的PtSendComplete,返回其它就不会调用PtSendComplete MPSendPackets 中调用NdisMSendComplete的目的应该是通知上层协议packet已经发送可以释放资源了 |
|
板凳#
发布于:2008-08-29 11:05
我理解流程是这样:
当MPSend 函数返回ndis_status_pending时,系统调用NdisMSendComplete,ndis调用我们注册的PtSendComplete,返回其它就不会调用PtSendComplete MPSendPackets 中调用NdisMSendComplete的目的应该是通知上层协议packet已经发送可以释放资源了 ====>>但是由于MPSendPackets 肯定会导致系统调用PtSendComplete,而PtSendComplete又调用了NdisMSendComplete,这样岂不是通知两遍? |
|
地板#
发布于:2008-09-04 11:32
Re:看了以前的帖子,但还是不明白MPSendPackets为什么要调用NdisMSend
http://bbs.driverdevelop.com/read.php?tid-4770-keyword-NdisMSendComplete.html这个链接的三楼已经说的很清楚了,你去仔细看一下就知道了 |
|