aldsd
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2005-05-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1232回复:2

请问,这样接收数据对吗?(50分)

楼主#
更多 发布于:2004-07-22 16:09
在ReceiveIndicate中自己想得到接受到的包的内容,代码如下,但是一运行就重启。
请教这是因为什么,谢谢。
NDIS_STATUS
PacketReceiveIndicate (
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookAheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize
)
{
POPEN_INSTANCE open;
PIO_STACK_LOCATION irpSp;
PIRP irp;
PLIST_ENTRY packetListEntry;
PNDIS_PACKET pPacket;
ULONG sizeToTransfer;
NDIS_STATUS status;
UINT bytesTransfered = 0;
ULONG bufferLength;



unsigned char pPacket_content[1524];

ARPSTRUCT *pARP ;



DebugPrint(("--------->ReceiveIndicate<--------------"));


if( PacketSize <= LookaheadBufferSize )
{
// 这是一个完整的数据包,直接存储
bufferLength = HeaderBufferSize + PacketSize;
if( bufferLength == 0 || bufferLength > sizeof( pPacket_content) )
{
DebugPrint(( "The packet total length is invalid: %d", bufferLength ));
return NDIS_STATUS_SUCCESS;
}

// 先拷贝头部数据
NdisMoveMemory( &pPacket_content[0], HeaderBuffer, HeaderBufferSize );

// 再拷贝剩余的数据
NdisMoveMemory( &pPacket_content[HeaderBufferSize], LookAheadBuffer, PacketSize );

pARP = (ARPSTRUCT*)pPacket_content;
}

// 以下为原来的内容
open= (POPEN_INSTANCE)ProtocolBindingContext;

if (HeaderBufferSize > ETHERNET_HEADER_LENGTH) {

return NDIS_STATUS_SUCCESS;
。。。
}
请问,这样接收数据报中的内容有什么问题呢?

最新喜欢:

zb_xizb_xi
aldsd
ygmlq
驱动牛犊
驱动牛犊
  • 注册日期2002-05-27
  • 最后登录2014-11-07
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望23点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-26 11:32
我在这个函数里分析包也有问题,调用NdisQueryBufferSafe老出问题.
生死有命,富贵由天
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-22 19:13
你使用SoftIce调试一下,看在什么地方错了先
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部