windows平台下,在驱动层,获取进程的pid,获取进程的网络流量,以及怎么控制某个进程的上传速度和下载速度

C++语言 码拜 9年前 (2016-05-13) 3180次浏览
如题:
说明一下是在windows 7平台下,驱动层来实现这个功能,不是使用微软应用层的api。
驱动层,获取进程的pid,获取进程的网络流量,以及怎么控制某个进程的上传速度和下载速度
windows平台下,在驱动层,获取进程的pid,获取进程的网络流量,以及怎么控制某个进程的上传速度和下载速度
本人要实现的功能,就是获取一个进程(例如qq.exe)的上传速度,下载速度,以及已下载流量已上传流量。
网上都让本人搜索遍了,包括codeproject和sourceForget这种开源代码网站,得到的初步结论,可以使用微软的TDI框架或WFP框架,本人用一周的时间把TDI的代码大致看了下,但是没找到什么实现的思路。
讨教有过相关开发经验的高手,指导下小弟。真心感谢哈
本人本人找到的相关资料
http://www.cnblogs.com/himessage/archive/2013/01/15/2860834.html
还有本人看了《寒江独钓》这本书关于TDI部分的讲解
还有一些内核编程的基础知识。
解决方案

5

引用:
Quote: 引用:

权力越大,责任越大。
推荐题主阅读《大气功师》

讨教下赵老师,能提供点什么思路或方向吗?

本人的意思是:
如流量应分配给谁这种本该让系统负责的管理功能,还是让系统去管比较合适,你非要编程去管,纯属自寻烦恼;
象血液该流向哪里这种本该让小脑负责的管理功能,还是让小脑去管比较合适,你非让大脑去管,就会走火入魔。

20

本人也没做过相似的工作,但没找到思路是不对的,要学会问本人的问题。
第一,应用层能否实现?你本人都否定了,应用层是不能达到你的目的。很显然,相似流量管理这样重要的系统管理功能,应用层若能完成那还得了?
第二,驱动层完成,那么过滤驱动实现思路基本上是确定的。但能否一个过滤驱动就可以完成?这需要了解具体的过滤驱动能力以及你的目标。例如说,你甚至可能有比360更灵活的目标:能让用户具体选择在特定网络接口上的流量控制。这恐怕需要阅读MSDN,例如:http://msdn.microsoft.com/en-us/library/ff568356(v=vs.85).aspx,并阅读实际的例子驱动,分析它的能力,和你的目标进行对比。
第三,在第二的基础上,估计你有一堆疑问。能做的就是逐一解决疑问。例如,从本人这个外行来看,如你本人所提:过滤驱动是工作在任意进程环境下的,怎么样确定当前网络数据包和特点进程的联系,而且数据包发往什么网络接口(假如你有这个需求的话)。TCP/IP都有端口,端口起初目的就是用来标识进程的。一些辅助工作:获得PID后,还要获取相应的命令行,以便像360那样,能显示对应的进程图标(当然假如你有这个需要的话)。
疑问解决得差不多之后,就可以实际编写、调试了。
最后是一些次要小问题,例如驱动移植到64位操作系统需要数字签名的问题。

10

http://bbs.pediy.com/showthread.php?t=189926
刚刚在看雪看到的,希望对题主有帮助

5

TDI+NDIS,两者结合下就可以了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明windows平台下,在驱动层,获取进程的pid,获取进程的网络流量,以及怎么控制某个进程的上传速度和下载速度
喜欢 (0)
[1034331897@qq.com]
分享 (0)