chansiio
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1274回复:2

那位大侠可以帮小菜鸟看一下为什么会蓝屏的???

楼主#
更多 发布于:2004-05-21 13:16
我只是想在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(\"===============>&Otilde;&yacute;&Ocirc;&Uacute;&Ocirc;&Euml;&ETH;&ETH;&Ouml;&ETH;&micro;&Auml;×&Ecirc;&Aacute;&Iuml;: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(\"&Iuml;&Ouml;&Ocirc;&Uacute;&micro;&Auml;&sup1;¤×÷&Auml;&pound;&Ecirc;&frac12;&Ecirc;&Ccedil;=====>&Ocirc;&Ecirc;&ETH;í°ü&Iacute;¨&sup1;&yacute;<=====\\n\");
 }
 else
 {
DbgPrint(\"&Iuml;&Ouml;&Ocirc;&Uacute;&micro;&Auml;&sup1;¤×÷&Auml;&pound;&Ecirc;&frac12;&Ecirc;&Ccedil;=====>?&acirc;°ü&frac12;&Oslash;&raquo;&ntilde;&ordm;&Iacute;&sup1;&yacute;&Acirc;&Euml;<=====\\n\");

 //°&Ntilde;&Ecirc;&yacute;&frac34;&Yacute;°ü&Auml;&Uacute;&Egrave;&Yacute;&acute;&Oacute;Packet&iquest;&frac12;±&acute;&micro;&frac12;pPacketContent

 NdisQueryPacket( Packet,NULL,NULL,NULL,&Size);

 Status= NdisAllocateMemory( &pPacketContent,
   2000,
 0,
 HighestAcceptableMax);

 if (Status != NDIS_STATUS_SUCCESS)
 {
 DbgPrint(\"=====>?&Ouml;&Aring;&auml;&Ograve;&raquo;&cedil;&ouml;&Iuml;&micro;&Iacute;&sup3;&iquest;&Otilde;&frac14;&auml; NdisAllocateMemory &Ecirc;§°&Uuml;<=====\\n\");
 return Status;
 }

 //&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&Euml;ù?&Ouml;&Aring;&auml;&micro;&Auml;&raquo;&ordm;&sup3;&aring;&Ccedil;&oslash;
 NdisZeroMemory (pPacketContent, 2000);

 //°&sup2;&Egrave;&laquo;&micro;&Oslash;&Ouml;&cedil;&Iuml;ò&Euml;ù?&cent;?&acirc;°ü&micro;&Auml;&micro;&Oslash;?&frac12;,&Egrave;&iexcl;&sup3;&ouml;&cedil;&Atilde;°ü&Iuml;&Ouml;&Ocirc;&Uacute;&Ocirc;&Uacute;&raquo;&ordm;&sup3;&aring;&Ccedil;&oslash;&micro;&Auml;&Ecirc;×&micro;&Oslash;&Ouml;?&ordm;&Iacute;&sup3;¤&para;&Egrave;
 NdisQueryBufferSafe(Packet->Private.Head,
 &pBuf,
 &BufLength,
 32 );

 //°&Ntilde;&Euml;ù&Ograve;&ordf;?&cent;&sup3;&ouml;&Egrave;&yen;&micro;&Auml;?&acirc;°ü&micro;&Auml;&micro;&Oslash;&Ouml;?&cedil;&para;&cedil;&oslash;&Icirc;&Ograve;&Atilde;&Ccedil;×&Ocirc;&frac14;&ordm;&Euml;ù&iquest;&ordf;±&Ugrave;&micro;&Auml;&ETH;é&Auml;&acirc;&micro;&Oslash;&Ouml;?&Ouml;&ETH;,&sup2;&cent;&cedil;&para;&cedil;&oslash;&sup3;¤&para;&Egrave;
 NdisMoveMemory(pPacketContent, pBuf, BufLength);

 i = BufLength;

 //&Otilde;&acirc;&cedil;&ouml;&Ouml;&cedil;&Otilde;&euml;&Oacute;&Atilde;&Agrave;&acute;&Ouml;&cedil;&Iuml;ò&Icirc;&Ograve;&Atilde;&Ccedil;&Euml;ù&Ograve;&ordf;&cedil;&acute;&Ouml;&AElig;?&acirc;°ü&micro;&Auml;&Ograve;&raquo;&cedil;&ouml;&Ouml;&cedil;&Otilde;&euml;,&Oacute;&Atilde;&Agrave;&acute;&Ouml;&cedil;&Iuml;ò?&acirc;°ü&ordm;ó&Atilde;&aelig;&micro;&Auml;&Auml;&Uacute;&Egrave;&Yacute;
 pNext = Packet->Private.Head;

 for(;;)
 {
if (pNext == Packet->Private.Tail)
break;

pNext = pNext->Next; //&Ouml;&cedil;&Otilde;&euml;&ordm;ó&Ograve;&AElig;

if (pNext == NULL)
break;

NdisQueryBufferSafe(pNext,
&pBuf,
    &BufLength,
32);

NdisMoveMemory(pPacketContent+i,
pBuf,
BufLength);
i+=BufLength;
 }

 //&Ecirc;&yacute;&frac34;&Yacute;&iquest;&frac12;±&acute;&Iacute;ê±&Iuml;

 /*
 CopyPacketToBuffer(MyPacket,Buff,&Length);  //°&Ntilde;°üCOPY&micro;&frac12;&raquo;&ordm;&sup3;&aring;&Ccedil;&oslash;&Ouml;&ETH;
 */

 if (pPacketContent[13] != 0)
 { DbgPrint(\"===============>&Otilde;&acirc;&sup2;&raquo;&Ecirc;&Ccedil;&Ograve;&raquo;&cedil;&ouml; 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(\"===============>&Otilde;&acirc;&Ecirc;&Ccedil;&Ograve;&raquo;&cedil;&ouml; IP/ICMP °ü.<===============\\n\");
 DbgPrint(\"&Auml;&iquest;&micro;&Auml; MAC &micro;&Oslash;&Ouml;? &Icirc;&ordf;: %x - %x - %x - %x - %x - %x \\n\\n\",pPacketContent[0],
     pPacketContent[1],
   pPacketContent[2],
   pPacketContent[3],
   pPacketContent[4],
   pPacketContent[5]);
 DbgPrint(\"&Ocirc;&acute; MAC &micro;&Oslash;&Ouml;? &Icirc;&ordf;: %x - %x - %x - %x - %x - %x \\n\\n\",pPacketContent[6],
 pPacketContent[7],
 pPacketContent[8],
 pPacketContent[9],
 pPacketContent[10],
 pPacketContent[11]);
 DbgPrint(\"&Ocirc;&acute; IP &micro;&Oslash;&Ouml;? &Icirc;&ordf;: %u . %u . %u . %u \\n\\n\",pPacketContent[26],
  pPacketContent[27],
  pPacketContent[28],
  pPacketContent[29]);
 DbgPrint(\"&Auml;&iquest;&micro;&Auml; IP &micro;&Oslash;&Ouml;? &Icirc;&ordf;: %u . %u . %u . %u \\n\\n\",pPacketContent[30],
    pPacketContent[31],
    pPacketContent[32],
    pPacketContent[33]);    

 //&Ecirc;&Iacute;?&Aring;&Ouml;?&Ccedil;°&Euml;ù?&Ouml;&Aring;&auml;&micro;&Auml;&raquo;&ordm;&acute;&aelig;&iquest;&Otilde;&frac14;&auml;
 NdisFreeMemory(pPacketContent, 2000, 0);
 break;

 case 6:
 DbgPrint(\"===============>&Otilde;&acirc;&Ecirc;&Ccedil;&Ograve;&raquo;&cedil;&ouml; IP/TCP °ü.<===============\\n\");
 DbgPrint(\"&Auml;&iquest;&micro;&Auml; MAC &micro;&Oslash;&Ouml;? &Icirc;&ordf;: %x - %x - %x - %x - %x - %x \\n\\n\",pPacketContent[0],
     pPacketContent[1],
   pPacketContent[2],
   pPacketContent[3],
   pPacketContent[4],
   pPacketContent[5]);
 DbgPrint(\"&Ocirc;&acute; MAC &micro;&Oslash;&Ouml;? &Icirc;&ordf;: %x - %x - %x - %x - %x - %x \\n\\n\",pPacketContent[6],
 pPacketContent[7],
 pPacketContent[8],
 pPacketContent[9],
 pPacketContent[10],
 pPacketContent[11]);
 DbgPrint(\"&Ocirc;&acute; IP &micro;&Oslash;&Ouml;? &Icirc;&ordf;: %u . %u . %u . %u \\n\\n\",pPacketContent[26],
  pPacketContent[27],
  pPacketContent[28],
  pPacketContent[29]);
 DbgPrint(\"&Auml;&iquest;&micro;&Auml; IP &micro;&Oslash;&Ouml;? &Icirc;&ordf;: %u . %u . %u . %u \\n\\n\",pPacketContent[30],
      pPacketContent[31],
    pPacketContent[32],
    pPacketContent[33]);

 DbgPrint(\"&Ocirc;&acute; &para;&Euml;&iquest;&Uacute; &Icirc;&ordf;: %x%x (16&frac12;&oslash;&Ouml;&AElig;) \\n\\n\",pPacketContent[34],pPacketContent[35]);

 DbgPrint(\"&Auml;&iquest;&micro;&Auml; &para;&Euml;&iquest;&Uacute; &Icirc;&ordf;: %x%x (16&frac12;&oslash;&Ouml;&AElig;) \\n\\n\",pPacketContent[36],pPacketContent[37]);

 //&Ecirc;&Iacute;?&Aring;&Ouml;?&Ccedil;°&Euml;ù?&Ouml;&Aring;&auml;&micro;&Auml;&raquo;&ordm;&acute;&aelig;&iquest;&Otilde;&frac14;&auml;
 NdisFreeMemory(pPacketContent, 2000, 0);
 break;

 case 17:
 DbgPrint(\"===============>&Otilde;&acirc;&Ecirc;&Ccedil;&Ograve;&raquo;&cedil;&ouml; IP/UDP °ü.<===============\\n\");
 DbgPrint(\"&Auml;&iquest;&micro;&Auml; MAC &micro;&Oslash;&Ouml;? &Icirc;&ordf;: %x - %x - %x - %x - %x - %x \\n\\n\",pPacketContent[0],
     pPacketContent[1],
   pPacketContent[2],
   pPacketContent[3],
   pPacketContent[4],
   pPacketContent[5]);
 DbgPrint(\"&Ocirc;&acute; MAC &micro;&Oslash;&Ouml;? &Icirc;&ordf;: %x - %x - %x - %x - %x - %x \\n\\n\",pPacketContent[6],
 pPacketContent[7],
 pPacketContent[8],
 pPacketContent[9],
 pPacketContent[10],
 pPacketContent[11]);
 DbgPrint(\"&Ocirc;&acute; IP &micro;&Oslash;&Ouml;? &Icirc;&ordf;: %u . %u . %u . %u \\n\\n\",pPacketContent[26],
  pPacketContent[27],
  pPacketContent[28],
  pPacketContent[29]);
 DbgPrint(\"&Auml;&iquest;&micro;&Auml; IP &micro;&Oslash;&Ouml;? &Icirc;&ordf;: %u . %u . %u . %u \\n\\n\",pPacketContent[30],
    pPacketContent[31],
    pPacketContent[32],
    pPacketContent[33]);

 DbgPrint(\"&Ocirc;&acute; &para;&Euml;&iquest;&Uacute; &Icirc;&ordf;: %x%x (16&frac12;&oslash;&Ouml;&AElig;) \\n\\n\",pPacketContent[34],pPacketContent[35]);

 DbgPrint(\"&Auml;&iquest;&micro;&Auml; &para;&Euml;&iquest;&Uacute; &Icirc;&ordf;: %x%x (16&frac12;&oslash;&Ouml;&AElig;) \\n\\n\",pPacketContent[36],pPacketContent[37]);

 //&Ecirc;&Iacute;?&Aring;&Ouml;?&Ccedil;°&Euml;ù?&Ouml;&Aring;&auml;&micro;&Auml;&raquo;&ordm;&acute;&aelig;&iquest;&Otilde;&frac14;&auml;
 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;
}
chansiio
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-22 19:49
那位大侠可以帮我看一看啊~~
谢谢了~~
netbutcher
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2004-05-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-22 22:22
NdisDprFreePacket(MyPacket);好像要在上层处理完成之后
才能释放
游客

返回顶部