lcrystal
驱动牛犊
驱动牛犊
  • 注册日期2007-07-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:2034回复:2

请问各位如何使用NDIS_SET_PACKET_TIME_TO_SEND宏(具体问题内详)

楼主#
更多 发布于:2007-07-26 15:39
[sell=20,]我在passthru中想收到包后, 等待一段时间再发送, 所以我想用NDIS_SET_PACKET_TIME_TO_SEND宏来实现目的,我的做法是这样的:
在ptReceivePacket中加入:

LARGE_INTEGER time, delayTime;

if ((!pAdapt->MiniportHandle) || (pAdapt->MPDeviceState > NdisDeviceStateD0))
{
         return 0;
}

..........               //passthru代码省略

NDIS_SET_PACKET_STATUS(MyPacket, Status);
NDIS_SET_PACKET_HEADER_SIZE(MyPacket, NDIS_GET_PACKET_HEADER_SIZE(Packet));

//下面是我加的
NdisGetCurrentSystemTime(&time);
delayTime = RtlConvertLongToLargeInteger(20 * 10000);
time = RtlLargeIntegerAdd(time, delayTime);
NDIS_SET_PACKET_TIME_TO_SEND(MyPacket, time.QuadPart);

NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1);   //下面就是passthru的代码

但是我实际去ping装有驱动的机子时, 没有20ms的延迟, 但是用DbgPrint可以确认进入了ptReceivePacket. 请问各位我哪里错了, 应该如何实现延迟发送.谢谢
[/sell]
lcrystal
驱动牛犊
驱动牛犊
  • 注册日期2007-07-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-07-27 09:16
我明白您的意思, 那样是可以延迟, 但我想用NDIS_SET_PACKET_TIME_TO_SEND实现延迟, 请问如何做? 您说我理解的不对, 是否可以给我讲讲, 如何使用.
我觉得您提供的方法是另一种解决途径, 并没有使用NDIS_SET_PACKET_TIME_TO_SEND呀
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2007-07-26 17:04
你对NDIS_SET_PACKET_TIME_TO_SEND理解不对
这种情况不能叫发送,是接收到数据包,再通知上层协议(比如tcp/ip)
不要立即调用NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1);  
放到队列,开个10秒的定时器,到时间后,去调用再去NdisMIndicateReceivePacket
就可以了
游客

返回顶部