阅读:2033回复:2
请问各位如何使用NDIS_SET_PACKET_TIME_TO_SEND宏(具体问题内详)
[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] |
|
沙发#
发布于:2007-07-26 17:04
你对NDIS_SET_PACKET_TIME_TO_SEND理解不对
这种情况不能叫发送,是接收到数据包,再通知上层协议(比如tcp/ip) 不要立即调用NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1); 放到队列,开个10秒的定时器,到时间后,去调用再去NdisMIndicateReceivePacket 就可以了 |
|
板凳#
发布于:2007-07-27 09:16
我明白您的意思, 那样是可以延迟, 但我想用NDIS_SET_PACKET_TIME_TO_SEND实现延迟, 请问如何做? 您说我理解的不对, 是否可以给我讲讲, 如何使用.
我觉得您提供的方法是另一种解决途径, 并没有使用NDIS_SET_PACKET_TIME_TO_SEND呀 |
|