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

为什麽我在写了一段IMD后,也编释过去了,安装了以后,我的机器就不能上网了????

楼主#
更多 发布于:2004-05-18 21:59
为什麽我在写了一段IMD后,也编释过去了,安装了以后,我的机器就不能上网了????

那位大侠可以指教一下呢~~谢谢了~~
chansiio
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-18 22:03
而且所看到的封包的内容都是一些广播的消息~~

好迷糊啊~~
chansiio
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-18 22:15
我只是在MPSend中修改了一下~~
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-19 09:38
那要看如何修改了。乱改动,肯定不能上网。
chansiio
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-05-20 15:13
贴上我的源代码:


//
//  According to our LBFO design, all sends will be performed on the secondary miniport
// However, the must be completed on the primary\'s miniport handle
//

ASSERT (pAdapt->pSecondaryAdapt);

pAdapt = pAdapt->pSecondaryAdapt;


if (IsIMDeviceStateOn (pAdapt) == FALSE)
{
return NDIS_STATUS_FAILURE;
}


NdisAllocatePacket(&Status,
  &MyPacket,
  pAdapt->SendPacketPoolHandle);

if (Status == NDIS_STATUS_SUCCESS)
{
PNDIS_PACKET_EXTENSION Old, New;

Rsvd = (PRSVD)(MyPacket->ProtocolReserved);
Rsvd->OriginalPkt = Packet;
MyPacket->Private.Flags = Flags;

MyPacket->Private.Head = Packet->Private.Head;
MyPacket->Private.Tail = Packet->Private.Tail;
NdisSetPacketFlags(MyPacket, NDIS_FLAGS_DONT_LOOPBACK);

//
// Copy the OOB Offset from the original packet to the new
// packet.
//
NdisMoveMemory(NDIS_OOB_DATA_FROM_PACKET(MyPacket),
  NDIS_OOB_DATA_FROM_PACKET(Packet),
  sizeof(NDIS_PACKET_OOB_DATA));

//
// Copy the per packet info into the new packet
// This includes ClassificationHandle, etc.
// Make sure other stuff is not copied !!!
//
NdisIMCopySendPerPacketInfo(MyPacket, Packet);

//
// Copy the Media specific information
//
NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(Packet,
&MediaSpecificInfo,
&MediaSpecificInfoSize);

if (MediaSpecificInfo || MediaSpecificInfoSize)
{
NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(MyPacket,
MediaSpecificInfo,
MediaSpecificInfoSize);
}

if(workmode==1)
{
NdisSend(&Status,
pAdapt->BindingHandle,
MyPacket);
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,&PacketSize);

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 (((char *)pPacketContent)[13] != 0)
{ DbgPrint(\"===============>&Otilde;&acirc;&sup2;&raquo;&Ecirc;&Ccedil;&Ograve;&raquo;&cedil;&ouml; IP °ü.<===============\\n\");
return NDIS_STATUS_FAILURE;
}

switch (((char *)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-\",((char *)pPacketContent)[0]);
DbgPrint(\"%x-\",((char *)pPacketContent)[1]);
DbgPrint(\"%x-\",((char *)pPacketContent)[2]);
DbgPrint(\"%x-\",((char *)pPacketContent)[3]);
DbgPrint(\"%x-\",((char *)pPacketContent)[4]);
DbgPrint(\"%x\\n\",((char *)pPacketContent)[5]);
DbgPrint(\"&Ocirc;&acute; MAC&micro;&Oslash;&Ouml;? &Icirc;&ordf;: %x-\",((char *)pPacketContent)[6]);
DbgPrint(\"%x-\",((char *)pPacketContent)[7]);
DbgPrint(\"%x-\",((char *)pPacketContent)[8]);
DbgPrint(\"%x-\",((char *)pPacketContent)[9]);
DbgPrint(\"%x-\",((char *)pPacketContent)[10]);
DbgPrint(\"%x\\n\",((char *)pPacketContent)[11]);
DbgPrint(\"&Ocirc;&acute; IP&micro;&Oslash;&Ouml;? &Icirc;&ordf;: %u.\",((char *)pPacketContent)[26]);
DbgPrint(\"%u.\",((char *)pPacketContent)[27]);
DbgPrint(\"%u.\",((char *)pPacketContent)[28]);
DbgPrint(\"%u\\n\",((char *)pPacketContent)[29]);
DbgPrint(\"&Auml;&iquest;&micro;&Auml; IP&micro;&Oslash;&Ouml;? &Icirc;&ordf;: %u.\",((char *)pPacketContent)[30]);
DbgPrint(\"%u.\",((char *)pPacketContent)[31]);
DbgPrint(\"%u.\",((char *)pPacketContent)[32]);
DbgPrint(\"%u\\n\",((char *)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-\",((char *)pPacketContent)[0]);
DbgPrint(\"%x-\",((char *)pPacketContent)[1]);
DbgPrint(\"%x-\",((char *)pPacketContent)[2]);
DbgPrint(\"%x-\",((char *)pPacketContent)[3]);
DbgPrint(\"%x-\",((char *)pPacketContent)[4]);
DbgPrint(\"%x\\n\",((char *)pPacketContent)[5]);
DbgPrint(\"&Ocirc;&acute; MAC&micro;&Oslash;&Ouml;? &Icirc;&ordf;: %x-\",((char *)pPacketContent)[6]);
DbgPrint(\"%x-\",((char *)pPacketContent)[7]);
DbgPrint(\"%x-\",((char *)pPacketContent)[8]);
DbgPrint(\"%x-\",((char *)pPacketContent)[9]);
DbgPrint(\"%x-\",((char *)pPacketContent)[10]);
DbgPrint(\"%x\\n\",((char *)pPacketContent)[11]);
DbgPrint(\"&Ocirc;&acute; IP&micro;&Oslash;&Ouml;? &Icirc;&ordf;: %u.\",((char *)pPacketContent)[26]);
DbgPrint(\"%u.\",((char *)pPacketContent)[27]);
DbgPrint(\"%u.\",((char *)pPacketContent)[28]);
DbgPrint(\"%u\\n\",((char *)pPacketContent)[29]);
DbgPrint(\"&Auml;&iquest;&micro;&Auml; IP&micro;&Oslash;&Ouml;? &Icirc;&ordf;: %u.\",((char *)pPacketContent)[30]);
DbgPrint(\"%u.\",((char *)pPacketContent)[31]);
DbgPrint(\"%u.\",((char *)pPacketContent)[32]);
DbgPrint(\"%u\\n\",((char *)pPacketContent)[33]);
DbgPrint(\"&Ocirc;&acute; &para;&Euml;&iquest;&Uacute; &Icirc;&ordf;: %x.\",((char *)pPacketContent)[34]);
DbgPrint(\"%x-\",((char *)pPacketContent)[35]);
DbgPrint(\"&Auml;&iquest;&micro;&Auml; &para;&Euml;&iquest;&Uacute; &Icirc;&ordf;: %x.\",((char *)pPacketContent)[36]);
DbgPrint(\"%x-\",((char *)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-\",((char *)pPacketContent)[0]);
DbgPrint(\"%x-\",((char *)pPacketContent)[1]);
DbgPrint(\"%x-\",((char *)pPacketContent)[2]);
DbgPrint(\"%x-\",((char *)pPacketContent)[3]);
DbgPrint(\"%x-\",((char *)pPacketContent)[4]);
DbgPrint(\"%x\\n\",((char *)pPacketContent)[5]);
DbgPrint(\"&Ocirc;&acute; MAC&micro;&Oslash;&Ouml;? &Icirc;&ordf;: %x-\",((char *)pPacketContent)[6]);
DbgPrint(\"%x-\",((char *)pPacketContent)[7]);
DbgPrint(\"%x-\",((char *)pPacketContent)[8]);
DbgPrint(\"%x-\",((char *)pPacketContent)[9]);
DbgPrint(\"%x-\",((char *)pPacketContent)[10]);
DbgPrint(\"%x\\n\",((char *)pPacketContent)[11]);
DbgPrint(\"&Ocirc;&acute; IP&micro;&Oslash;&Ouml;? &Icirc;&ordf;: %u.\",((char *)pPacketContent)[26]);
DbgPrint(\"%u.\",((char *)pPacketContent)[27]);
DbgPrint(\"%u.\",((char *)pPacketContent)[28]);
DbgPrint(\"%u\\n\",((char *)pPacketContent)[29]);
DbgPrint(\"&Auml;&iquest;&micro;&Auml; IP&micro;&Oslash;&Ouml;? &Icirc;&ordf;: %u.\",((char *)pPacketContent)[30]);
DbgPrint(\"%u.\",((char *)pPacketContent)[31]);
DbgPrint(\"%u.\",((char *)pPacketContent)[32]);
DbgPrint(\"%u\\n\",((char *)pPacketContent)[33]);
DbgPrint(\"&Ocirc;&acute; &para;&Euml;&iquest;&Uacute; &Icirc;&ordf;: %x.\",((char *)pPacketContent)[34]);
DbgPrint(\"%x-\",((char *)pPacketContent)[35]);
DbgPrint(\"&Auml;&iquest;&micro;&Auml; &para;&Euml;&iquest;&Uacute; &Icirc;&ordf;: %x.\",((char *)pPacketContent)[36]);
DbgPrint(\"%x-\",((char *)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;
}

NdisSend(&Status,
pAdapt->BindingHandle,
MyPacket);
if ( Status != NDIS_STATUS_SUCCESS)
return Status;
}


if (Status != NDIS_STATUS_PENDING)
{
NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket);
NdisFreePacket(MyPacket);
}
}
else
{
//
// We are out of packets. Silently drop it. Alternatively we can deal with it:
// - By keeping separate send and receive pools
// - Dynamically allocate more pools as needed and free them when not needed
//
}

return(Status);
}
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-05-20 17:00
if (((char *)pPacketContent)[13] != 0)
{ DbgPrint(\"===============>?a2?ê?ò??? IP °ü.<===============\\n\");
return NDIS_STATUS_FAILURE;
}
这第13个字节如果是6,准确的说是0x0806,就是ARP协议包,你直接就RETURN了,而没有送出去,ARP协议就被你截断了,对方的MAC地址你自然就得不到了,上网。。。。
chansiio
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-20 17:22
哦~~
原来是这样~
我没有把包发出去啊~~
谢谢~~
我再试一下~~
chansiio
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-05-20 18:09
我的机器可以上网了~~
但我显示出来的IP和MAC地址不太正确啊~~
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-05-21 09:32
你把包的头34字节都打印出来,我看看,有可能是COPY包时就COPY错了,你COPY包的代码有点问题,我贴过COPY包的函数,你看看吧。
chansiio
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-05-21 13:07
后来我把
((char *)pPacketContent[1])±改成±pPacketContent)[1]就好使了~~
麻烦大家帮助了~~
游客

返回顶部