阅读:1644回复:6
关于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-%x\n",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("HookSendComplete1\n"); PrintPacket(Packet);//关键就是这里。。。有时候兰。有时候不兰。。。就算这个printpacket函数不兰。。。在最后面RETURN后也会蓝。。。 NdisQueryAdapterInstanceName(&m_apn,pOurContext->m_pBindAdaptHandle); DbgPrint("SendCompletePacket(Name)...%ws\n",m_apn.Buffer); if( pOurContext ) { //DbgPrint("HookSendComplete\n"); ((SEND_COMPLETE_HANDLER)pOurContext->m_pOriginalProc)( ProtocolBindingContext, Packet, Status ); } DbgPrint("HookSendComplete1.................Complete\n"); return; } 很奇怪以前好象没有出现这样的问题。。。。。。 所以想请问下各位是怎么回事? |
|
沙发#
发布于:2005-02-07 07:56
为什么没有人回答啊?
|
|
板凳#
发布于:2005-02-07 17:23
为什么没有人回答啊? 大家也要过年呀,嘿嘿 |
|
|
地板#
发布于:2005-02-07 18:18
[quote]为什么没有人回答啊? 大家也要过年呀,嘿嘿 [/quote] 哦。。。。原来这样啊。。。 :) :) |
|
地下室#
发布于:2005-02-08 11:50
问题可能在
DbgPrint("(%u)ptr==%x-%x-%xn",CurrentLength,ptr[0],ptr[1],ptr[2]);这一行。 估计是对ptr的访问有问题导致的 |
|
|
5楼#
发布于:2005-02-14 14:23
问题可能在 不是的。。。。我去掉PRINTPACKET里面的所有DBGPRINT。。。也一样会兰屏 |
|
6楼#
发布于:2005-02-24 15:25
为什么没有人回答我啊?
|
|