阅读:1481回复:4
关于MPTransferData被NDIS调用的问题?
最近改写了passthru,其中设计了两个接收数据包的处理流程:
1、明文上传 2、密文上传 当时设计并测试的时候,是打算在MPTransferData里面只实现明文的接收后续处理,密文在PtReceive调用的子函数里面判断是否是密文上传,如果是密文就直接调用NdisTransferData进行接收后续处理,否则直接调用NdisMEthIndicateReceive函数直接向上指示明文数据,这种情况完全正常。 但是当我安装sniffer这个东东之后,发现密文上传的时候,NDIS竟然有时候直接调用MPTransferData进行数据接收处理,我靠,导致系统崩溃。 大家知道,sniffer就是协议层的驱动,为什么她会影响NDIS的行为呢? 解决办法都是什么?望高手指教一二 |
|
|
沙发#
发布于:2003-12-09 09:01
需要强调的一点说明就是:当运行sniffer进行数据捕获的时候才有上面的情况发生,也就是说,NDIS在给sniffer上传数据的时候,导致NDIS误调我的passthru的MPTransferData,这种情况在NT平台上并没有发生,在2000上为什么会出现这种情况呢?
|
|
|
板凳#
发布于:2003-12-09 16:05
还有相关的小问题:
1、如何在PtReceive里面直接调用NdisTransferData,是不是先分配一个packet,然后直接调用NdisTransferData就行了。 考虑这样做的原因是可以避免NDIS调用我的MPTransferData,是否行得通? |
|
|
地板#
发布于:2003-12-09 17:33
直接在ptReceive中处理了不行么?为什么要交给NdisTransferData??
|
|
|
地下室#
发布于:2003-12-09 19:34
有两种方式处理后续包:
1、注册TransferDataHandler,也就是在passthru中的MPTransferData函数中调用NdisTransferData,这种方式由NDIS来决定什么时候来调用 2、就是在passthru中的注册函数PtReceive中直接调用NdisTransferData,这种方式可以由自己来判断是否需要后续处理来调用 问题就是: 接收加密通道的数据时是直接判断并调用NdisTransferData进行后续处理的了,并不触发NDIS来调用MPTransferData;如果是接收非加密通道数据时就交给NDIS判断是否需要后续处理,如果需要NDIS则会调用注册函数MPTransferData。 这种情况在不使用sniffer进行数据捕获时是完全正常的了 但是一运行sniffer进行数据捕获时,情况就变了,接收加密通道的数据时竟然也会触发NDIS来调用MPTransferData,结果崩溃了! |
|
|