阅读:1274回复:2
那位大侠可以帮小菜鸟看一下为什么会蓝屏的???
我只是想在PtReceive中看一下所得到的包~~
但一安装后就蓝屏了 说什麽physical memory 小菜一个,各位大侠可以看一下吗? NDIS_STATUS PtReceive( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookAheadBufferSize, IN UINT PacketSize ) /*++ Routine Description: LBFO - need to use primary for all receives Arguments: Return Value: --*/ { PADAPT pAdapt =(PADAPT)ProtocolBindingContext; PNDIS_PACKET MyPacket, Packet; NDIS_STATUS Status = NDIS_STATUS_SUCCESS; //--------------------------------------------------------- int size; PUCHAR pPacketContent; PUCHAR pBuf; UINT BufLength; MDL *pNext; UINT i; //--------------------------------------------------------- UINT workmode=0; //×Ô¼ºÓÃÀ´¶¨ÒåµÄ¹¤×÷ģʽ DbgPrint(\"===============>ÕýÔÚÔËÐÐÖеÄ×ÊÁÏ:PtReceive<===============\\n\"); if(!pAdapt->MiniportHandle) { Status = NDIS_STATUS_FAILURE; } else do { // // We should not be getting Receives on a Secondary, this is just specific to our LBFO driver // if(pAdapt->isSecondary) { DBGPRINT(\"PASSTHRU GETTING RECIEVES ON SECONDARY\\n\"); ASSERT(0); } // // If this was indicated by the miniport below as a packet, then get that packet pointer and indicate // it as a packet as well(with appropriate status). This way the OOB stuff is accessible to the // transport above us. // Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext); if(Packet != NULL) { // // Get a packet off the pool and indicate that up // NdisDprAllocatePacket(&Status, &MyPacket, pAdapt->RecvPacketPoolHandle); if(Status == NDIS_STATUS_SUCCESS) { MyPacket->Private.Head = Packet->Private.Head; MyPacket->Private.Tail = Packet->Private.Tail; // // Get the original packet(it could be the same packet as one received or a different one // based on # of layered MPs) and set it on the indicated packet so the OOB stuff is visible // correctly at the top. // NDIS_SET_ORIGINAL_PACKET(MyPacket, NDIS_GET_ORIGINAL_PACKET(Packet)); NDIS_SET_PACKET_HEADER_SIZE(MyPacket, HeaderBufferSize); // // Set Packet Flags // NdisGetPacketFlags(MyPacket) = NdisGetPacketFlags(Packet); // // Make sure the status is set to NDIS_STATUS_RESOURCES. // NDIS_SET_PACKET_STATUS(MyPacket, NDIS_STATUS_RESOURCES); if(workmode==1) { NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1); DbgPrint(\"ÏÖÔڵŤ×÷ģʽÊÇ=====>ÔÊÐí°üͨ¹ý<=====\\n\"); } else { DbgPrint(\"ÏÖÔڵŤ×÷ģʽÊÇ=====>?â°ü½Ø»ñºÍ¹ýÂË<=====\\n\"); //°ÑÊý¾Ý°üÄÚÈÝ´ÓPacket¿½±´µ½pPacketContent NdisQueryPacket( Packet,NULL,NULL,NULL,&Size); Status= NdisAllocateMemory( &pPacketContent, 2000, 0, HighestAcceptableMax); if (Status != NDIS_STATUS_SUCCESS) { DbgPrint(\"=====>?ÖÅäÒ»¸öϵͳ¿Õ¼ä NdisAllocateMemory ʧ°Ü<=====\\n\"); return Status; } //³õʼ»¯Ëù?ÖÅäµÄ»º³åÇø NdisZeroMemory (pPacketContent, 2000); //°²È«µØÖ¸ÏòËù?¢?â°üµÄµØ?½,È¡³ö¸Ã°üÏÖÔÚÔÚ»º³åÇøµÄÊ×µØÖ?ºÍ³¤¶È NdisQueryBufferSafe(Packet->Private.Head, &pBuf, &BufLength, 32 ); //°ÑËùÒª?¢³öÈ¥µÄ?â°üµÄµØÖ?¸¶¸øÎÒÃÇ×Ô¼ºËù¿ª±ÙµÄÐéÄâµØÖ?ÖÐ,²¢¸¶¸ø³¤¶È NdisMoveMemory(pPacketContent, pBuf, BufLength); i = BufLength; //Õâ¸öÖ¸ÕëÓÃÀ´Ö¸ÏòÎÒÃÇËùÒª¸´ÖÆ?â°üµÄÒ»¸öÖ¸Õë,ÓÃÀ´Ö¸Ïò?â°üºóÃæµÄÄÚÈÝ pNext = Packet->Private.Head; for(;;) { if (pNext == Packet->Private.Tail) break; pNext = pNext->Next; //Ö¸ÕëºóÒÆ if (pNext == NULL) break; NdisQueryBufferSafe(pNext, &pBuf, &BufLength, 32); NdisMoveMemory(pPacketContent+i, pBuf, BufLength); i+=BufLength; } //Êý¾Ý¿½±´Íê±Ï /* CopyPacketToBuffer(MyPacket,Buff,&Length); //°Ñ°üCOPYµ½»º³åÇøÖÐ */ if (pPacketContent[13] != 0) { DbgPrint(\"===============>Õâ²»ÊÇÒ»¸ö IP °ü.<===============\\n\"); NdisFreeMemory(pPacketContent, 2000, 0); NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1); NdisDprFreePacket(MyPacket); if ( Status != NDIS_STATUS_SUCCESS) return Status; } switch (pPacketContent[23]) { case 1: DbgPrint(\"===============>ÕâÊÇÒ»¸ö IP/ICMP °ü.<===============\\n\"); DbgPrint(\"Ä¿µÄ MAC µØÖ? Ϊ: %x - %x - %x - %x - %x - %x \\n\\n\",pPacketContent[0], pPacketContent[1], pPacketContent[2], pPacketContent[3], pPacketContent[4], pPacketContent[5]); DbgPrint(\"Ô´ MAC µØÖ? Ϊ: %x - %x - %x - %x - %x - %x \\n\\n\",pPacketContent[6], pPacketContent[7], pPacketContent[8], pPacketContent[9], pPacketContent[10], pPacketContent[11]); DbgPrint(\"Ô´ IP µØÖ? Ϊ: %u . %u . %u . %u \\n\\n\",pPacketContent[26], pPacketContent[27], pPacketContent[28], pPacketContent[29]); DbgPrint(\"Ä¿µÄ IP µØÖ? Ϊ: %u . %u . %u . %u \\n\\n\",pPacketContent[30], pPacketContent[31], pPacketContent[32], pPacketContent[33]); //ÊÍ?ÅÖ?Ç°Ëù?ÖÅäµÄ»º´æ¿Õ¼ä NdisFreeMemory(pPacketContent, 2000, 0); break; case 6: DbgPrint(\"===============>ÕâÊÇÒ»¸ö IP/TCP °ü.<===============\\n\"); DbgPrint(\"Ä¿µÄ MAC µØÖ? Ϊ: %x - %x - %x - %x - %x - %x \\n\\n\",pPacketContent[0], pPacketContent[1], pPacketContent[2], pPacketContent[3], pPacketContent[4], pPacketContent[5]); DbgPrint(\"Ô´ MAC µØÖ? Ϊ: %x - %x - %x - %x - %x - %x \\n\\n\",pPacketContent[6], pPacketContent[7], pPacketContent[8], pPacketContent[9], pPacketContent[10], pPacketContent[11]); DbgPrint(\"Ô´ IP µØÖ? Ϊ: %u . %u . %u . %u \\n\\n\",pPacketContent[26], pPacketContent[27], pPacketContent[28], pPacketContent[29]); DbgPrint(\"Ä¿µÄ IP µØÖ? Ϊ: %u . %u . %u . %u \\n\\n\",pPacketContent[30], pPacketContent[31], pPacketContent[32], pPacketContent[33]); DbgPrint(\"Ô´ ¶Ë¿Ú Ϊ: %x%x (16½øÖÆ) \\n\\n\",pPacketContent[34],pPacketContent[35]); DbgPrint(\"Ä¿µÄ ¶Ë¿Ú Ϊ: %x%x (16½øÖÆ) \\n\\n\",pPacketContent[36],pPacketContent[37]); //ÊÍ?ÅÖ?Ç°Ëù?ÖÅäµÄ»º´æ¿Õ¼ä NdisFreeMemory(pPacketContent, 2000, 0); break; case 17: DbgPrint(\"===============>ÕâÊÇÒ»¸ö IP/UDP °ü.<===============\\n\"); DbgPrint(\"Ä¿µÄ MAC µØÖ? Ϊ: %x - %x - %x - %x - %x - %x \\n\\n\",pPacketContent[0], pPacketContent[1], pPacketContent[2], pPacketContent[3], pPacketContent[4], pPacketContent[5]); DbgPrint(\"Ô´ MAC µØÖ? Ϊ: %x - %x - %x - %x - %x - %x \\n\\n\",pPacketContent[6], pPacketContent[7], pPacketContent[8], pPacketContent[9], pPacketContent[10], pPacketContent[11]); DbgPrint(\"Ô´ IP µØÖ? Ϊ: %u . %u . %u . %u \\n\\n\",pPacketContent[26], pPacketContent[27], pPacketContent[28], pPacketContent[29]); DbgPrint(\"Ä¿µÄ IP µØÖ? Ϊ: %u . %u . %u . %u \\n\\n\",pPacketContent[30], pPacketContent[31], pPacketContent[32], pPacketContent[33]); DbgPrint(\"Ô´ ¶Ë¿Ú Ϊ: %x%x (16½øÖÆ) \\n\\n\",pPacketContent[34],pPacketContent[35]); DbgPrint(\"Ä¿µÄ ¶Ë¿Ú Ϊ: %x%x (16½øÖÆ) \\n\\n\",pPacketContent[36],pPacketContent[37]); //ÊÍ?ÅÖ?Ç°Ëù?ÖÅäµÄ»º´æ¿Õ¼ä NdisFreeMemory(pPacketContent, 2000, 0); break; default: NdisFreeMemory(pPacketContent, 2000, 0); break; } NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1); NdisDprFreePacket(MyPacket); if ( Status != NDIS_STATUS_SUCCESS) return Status; } ASSERT(NDIS_GET_PACKET_STATUS(MyPacket) == NDIS_STATUS_RESOURCES); NdisDprFreePacket(MyPacket); break; } } // // Fall through if the miniport below us has either not indicated a packet or we could not // allocate one // pAdapt->IndicateRcvComplete = TRUE; switch(pAdapt->Medium) { case NdisMedium802_3: NdisMEthIndicateReceive(pAdapt->MiniportHandle, MacReceiveContext, HeaderBuffer, HeaderBufferSize, LookAheadBuffer, LookAheadBufferSize, PacketSize); break; case NdisMedium802_5: NdisMTrIndicateReceive(pAdapt->MiniportHandle, MacReceiveContext, HeaderBuffer, HeaderBufferSize, LookAheadBuffer, LookAheadBufferSize, PacketSize); break; case NdisMediumFddi: NdisMFddiIndicateReceive(pAdapt->MiniportHandle, MacReceiveContext, HeaderBuffer, HeaderBufferSize, LookAheadBuffer, LookAheadBufferSize, PacketSize); break; default: ASSERT(0); break; } } while(FALSE); return Status; } |
|
沙发#
发布于:2004-05-22 19:49
那位大侠可以帮我看一看啊~~
谢谢了~~ |
|
板凳#
发布于:2004-05-22 22:22
NdisDprFreePacket(MyPacket);好像要在上层处理完成之后
才能释放 |
|