2,640
社区成员
发帖
与我相关
我的任务
分享
UINT GetPacketSize(PNDIS_PACKET pPacket, PACKET_TYPE_ENUM enumPacketType)
{
PNDIS_BUFFER NdisBuffer ;
UINT TotalPacketLength = 0;
UINT PhysicalBufferCount;
UINT BufferCount ;
NdisQueryPacket(pPacket, // NDIS_PACKET
&PhysicalBufferCount,// 内存中的物理块数
&BufferCount, // 多少个NDIS_BUFFER包
&NdisBuffer, // 将返回第一个包
&TotalPacketLength // 总共的包数据长度
);
switch(enumPacketType)
{
case PACKET_TYPE_SEND:
g_ulSend += TotalPacketLength;
break;
case PACKET_TYPE_RECV:
g_ulRecv += TotalPacketLength;
break;
}
if(g_ulSend > g_ulSeconds*MAX_SEND_SPEED || g_ulRecv > g_ulSeconds*MAX_RECV_SPEED)
{
KdPrint(("Thread suspends 500000 MircoSeconds...",ulMircoSecond));
LARGE_INTEGER timeout = RtlConvertLongToLargeInteger(-500000);
KeDelayExecutionThread(KernelMode,FALSE,&timeout);
KdPrint(("Thread is running again!\n"));
}
return TotalPacketLength;
}
VOID OnTimer(
IN PDEVICE_OBJECT DeviceObject,
IN PVOID Context)
{
DbgPrint("OnTimer: %d", g_ulSeconds);
g_ulSeconds++;
}