阅读:1777回复:3
gjp快进来。。关于NDIS HOOK(SENDCOMPLETE)的问题
我HOOK了NDIS里的SENDCOMPLETE。。。很奇怪的是。。。。我只要进行包内容的查询并显示。。。。只是加了这一个部分就会BLUE SCREEN。。。(系统环境是w2k sp4)
代码如下 VOID PrintPacket(IN PNDIS_PACKET pPacket) { PUCHAR ptr; PNDIS_BUFFER pCurrentBuffer; UINT CurrentLength; UINT nBufferCount, TotalPacketLength; NdisQueryPacket( (PNDIS_PACKET)pPacket, (PUINT )NULL, // Physical Buffer Count (PUINT )&nBufferCount, // Buffer Count &pCurrentBuffer, // First Buffer &TotalPacketLength // TotalPacketLength ); if (nBufferCount==0) { return ; } NdisQueryBuffer( pCurrentBuffer, &ptr, &CurrentLength ); DbgPrint(\"(%u)ptr==%x-%x-%xn\",CurrentLength,ptr[0],ptr[1],ptr[2]); } VOID HookSendComplete( IN HOOK_CONTEXT_STRUCT *pOurContext, IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status ) { // __asm int 3; PNDIS_BUFFER OldBuffer; NDIS_STRING m_apn; DbgPrint(\"HookSendComplete1n\"); PrintPacket(Packet);//关键就是这里。。。有时候兰。有时候不兰。。。就算这个printpacket函数不兰。。。在最后面RETURN后也会蓝。。。 NdisQueryAdapterInstanceName(&m_apn,pOurContext->m_pBindAdaptHandle); DbgPrint(\"SendCompletePacket(Name)...%wsn\",m_apn.Buffer); if( pOurContext ) { //DbgPrint(\"HookSendCompleten\"); ((SEND_COMPLETE_HANDLER)pOurContext->m_pOriginalProc)( ProtocolBindingContext, Packet, Status ); } DbgPrint(\"HookSendComplete1.................Completen\"); return; } 很奇怪以前好象没有出现这样的问题。。。。。。 所以想请问下各位是怎么回事? |
|
沙发#
发布于:2005-03-02 11:59
我这儿也出现问题,
我Hook了 ProtocolSendComplete 以后, 一发送数据包就直接蓝屏了。 我在Softice 看堆栈,发现还在 ProtocolSend的处理中。 我的 ProtocolSendComplete 还没得到调用 |
|
板凳#
发布于:2005-03-03 09:05
我的问题解决了:P
会不会是因为你这个 Packet 已经被释放了?? DbgPrint(\"(%u)ptr==%x-%x-%xn\",CurrentLength,ptr[0],ptr[1],ptr[2]); 这句话不加会不会蓝屏? |
|
地板#
发布于:2005-04-16 08:41
我的问题解决了:P 不是啊。。。。不加那句也会蓝屏。。。很郁闷啊。。。。。反正只要访问那个包的内容就会蓝屏。。好象提前释放了一样。。但是我并没有提前释放啊。。。你的QQ和EMAIL是多少啊。。可以就这个问题聊聊啊。。。。对了。。能让我看看你的代码吗??? 我的EMAIL地址是cyf_mail2@163.com QQ号码是355205 [编辑 - 4/16/05 by cyf_rich] |
|