riker
驱动牛犊
驱动牛犊
  • 注册日期2004-12-22
  • 最后登录2005-05-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1487回复:6

我要看截获的数据包,用SOFTICE

楼主#
更多 发布于:2005-05-15 14:22
本人学习NDIS将近2个月了,没有经验,完全自学,看代码

现在进行到了一个关键的地方,我想用softice查看数据包啊,

可能对于高手你们完全没问题,可真把我难住了,

我的网卡是用PtReceive的,看下面:

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
          )


{
PADAPT OutAdapt, pAdapt =(PADAPT)ProtocolBindingContext;
PNDIS_PACKET MyPacket, Packet, MyPacket1;
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;

PNDIS_BUFFER pPacketBuffer, pBakBuffer;
PUCHAR pPacketContent, pBakContent;
UINT PacketLen;

UINT OffsetSize;
UINT BytesTransferred;

PRSVD Rsvd = NULL;
PVOID MediaSpecificInfo = NULL;
ULONG MediaSpecificSize= 0;

DBGPRINT((\"In 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(FALSE){}
   else if(PacketSize <= LookAheadBufferSize)  
      { Status = NdisAllocateMemory(&pPacketContent, BUFFER_SIZE, 0, HighestAcceptableMax);
   if(Status != NDIS_STATUS_SUCCESS)
{
DbgPrint(\"PTReceive:NdisAllocateMemory Failed\\n\");
return(NDIS_STATUS_NOT_ACCEPTED);
}
if(pPacketContent == NULL)
{
DbgPrint(\"PTReceive:pPacketContent==NULL\\n\");
return(NDIS_STATUS_NOT_ACCEPTED);
}
NdisZeroMemory(pPacketContent, BUFFER_SIZE);
NdisMoveMemory(pPacketContent, HeaderBuffer, HeaderBufferSize);
NdisMoveMemory(pPacketContent+ HeaderBufferSize, LookAheadBuffer, LookAheadBufferSize);
PacketLen = PacketSize+HeaderBufferSize;

if(Monitor_flag)
{
if(Check_Packet((char*)pPacketContent))
{
return NDIS_STATUS_NOT_ACCEPTED;
}
}
else {}

NdisDprAllocatePacket(&Status, &MyPacket, pAdapt->RecvPacketPoolHandle);

if(Status == NDIS_STATUS_SUCCESS)
{
NdisAllocateBuffer(&Status, &pPacketBuffer, pAdapt->RecvBufferPoolHandle, pPacketContent, PacketLen);
NdisChainBufferAtFront(MyPacket, pPacketBuffer);

MyPacket->Private.Head->Next = NULL;
MyPacket->Private.Tail = NULL;
Rsvd=(PRSVD)(MyPacket->MiniportReserved);
Rsvd->OriginalPkt = NULL;
NDIS_SET_PACKET_HEADER_SIZE(MyPacket, HeaderBufferSize);
NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1);
if(NDIS_GET_PACKET_STATUS(MyPacket) != NDIS_STATUS_PENDING)
{
DBGPRINT((\"In PtReceive And Free Memory\\n\"));
NdisFreeBuffer(pPacketBuffer);
NdisFreeMemory(pPacketContent, BUFFER_SIZE, 0);
NdisDprFreePacket(MyPacket);
}
}
break;
}
else
{
Status = NdisAllocateMemory(&pPacketContent, BUFFER_SIZE, 0, HighestAcceptableMax);
if(Status != NDIS_STATUS_SUCCESS)
{
DbgPrint(\"PtReceive:NdisAllocateMemory Failed.\\n\");
return(NDIS_STATUS_NOT_ACCEPTED);
}
if(pPacketContent==NULL)
{
DbgPrint(\"PTReceive:pPacketContent==NULL\\n\");
return(NDIS_STATUS_NOT_ACCEPTED);
}
NdisZeroMemory(pPacketContent,BUFFER_SIZE);
NdisDprAllocatePacket(&Status, &MyPacket, pAdapt->RecvPacketPoolHandle);
Status = NdisAllocateMemory(&pBakContent, BUFFER_SIZE, 0, HighestAcceptableMax);
if(Status != NDIS_STATUS_SUCCESS)
{
DbgPrint(\"PtReceive:NdisAllocateMemory Failed.\\n\");
return(NDIS_STATUS_NOT_ACCEPTED);
}
if(pBakContent == NULL)
{
DbgPrint(\"PTReceive:pPacketContent==NULL\\n\");
return(NDIS_STATUS_NOT_ACCEPTED);
}
NdisZeroMemory(pBakContent, BUFFER_SIZE);
NdisMoveMemory(pBakContent, HeaderBuffer, HeaderBufferSize);
NdisMoveMemory(pBakContent+HeaderBufferSize, LookAheadBuffer, LookAheadBufferSize);

PacketLen = HeaderBufferSize + PacketSize;


NdisAllocateBuffer(&Status, &pPacketBuffer, pAdapt->RecvBufferPoolHandle, pPacketContent, PacketSize-LookAheadBufferSize);

NdisChainBufferAtFront(MyPacket, pPacketBuffer);
MyPacket->Private.Head->Next=NULL;
MyPacket->Private.Tail=NULL;

OffsetSize = HeaderBufferSize + LookAheadBufferSize;

NdisDprAllocatePacket(&Status, &MyPacket1, pAdapt->RecvPacketPoolHandle);

NdisAllocateBuffer(&Status, &pBakBuffer, pAdapt->RecvBufferPoolHandle, pBakContent, OffsetSize);

NdisChainBufferAtFront(MyPacket1, pBakBuffer);

Rsvd = (PRSVD)(MyPacket->MiniportReserved);
Rsvd->OriginalPkt = (PNDIS_PACKET)MyPacket1;

NDIS_SET_PACKET_HEADER_SIZE(MyPacket, HeaderBufferSize);

NdisTransferData(&Status,
pAdapt->BindingHandle,
MacReceiveContext,
LookAheadBufferSize, PacketSize-LookAheadBufferSize, MyPacket,
&BytesTransferred);

if(Status != NDIS_STATUS_PENDING)
{
PtTransferDataComplete((NDIS_HANDLE)pAdapt, MyPacket, Status, BytesTransferred);
}
break;
}

pAdapt->IndicateRcvComplete = TRUE;

} while(FALSE);

return Status;
}
zhoudongmei
驱动牛犊
驱动牛犊
  • 注册日期2005-04-16
  • 最后登录2005-12-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-19 01:30
首先非常感谢您频繁为大家解决问题.我写的是无线网卡的miniport driver,因为这张网卡是张测试卡(目前只有MAC芯片,没有RF芯片),所以不可能正常连通网络.在这样一种情况下,我想知道,用writefile(),readfile()测试行吗>?我测过没成功,您认为这样具有可行性吗?
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-05-18 09:54
各位大虾,我想请问一下,如何触发数据接收中断从而进行处理呢.我的网卡驱动还不能连通网络,在这种情况下该如何测试比较好呢?
本来我是想通过FIRMWARE发虚拟数据,但那样更麻烦.楼主,能介绍介绍您的方法么


什么意思?你的网卡驱动还不能工作吗?如果能工作,安装了中断处理函数,由数据来了以后,就会触发,就会通知上层的协议驱动了?

你做的是什么驱动?miniport 还是 im ?如果不是做的miniport那
就先把你的网卡驱动配置好,使它能工作了,再往下做吧。
zhoudongmei
驱动牛犊
驱动牛犊
  • 注册日期2005-04-16
  • 最后登录2005-12-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-17 23:42
各位大虾,我想请问一下,如何触发数据接收中断从而进行处理呢.我的网卡驱动还不能连通网络,在这种情况下该如何测试比较好呢?
本来我是想通过FIRMWARE发虚拟数据,但那样更麻烦.楼主,能介绍介绍您的方法么
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-05-17 19:53
建议你找个TCP/IP协议方面的书看看吧,NDIS只是一个软件的接口标准,它和通信协议是两回事情。
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
riker
驱动牛犊
驱动牛犊
  • 注册日期2004-12-22
  • 最后登录2005-05-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-05-15 15:04
在研究中
其实我用wl也能看到变量的值,但是问题是
dd pPacketContent,
看到的东西是:
0010:81202828 FFFFFFF ........ ........
0010:81202838 ........ ........ .......
0010:81202848 ........ ........ .......
0010:81202858 ........ ........ .......
0010:81202868 ........ ........ .......
0010:81202878 ........ ........ .......
0010:81202888 ........ ........ .......

这个就是数据包吗?怎么判断是什么类型的??


zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2005-05-15 14:25
用softice在PtReceive下个断点,看看参数就好了
游客

返回顶部