ProcessHacker学习笔记
ProcessHacker学习笔记
ProcessHacker是一款拥有windows任务管理器的开源软件。学习该软件,可增长windows操作系统多方面系统机制知识和性能统计设计的能力。 1、获取进程内存占用率
windows系统下,无论任何版本,都可以在任务管理器下查看各个进程的内存占用率。
XP 2003系统下显示的是进程占用的内存工作集也就是PROCESS_MEMORY_COUNTERS结构中的WorkingSetSize;
WIN7 VISTA系统下显示的则是进程占用的私有内存工作集也就是Private WorkingSetSize.但是相关结构未公开而无法直接使用API进行获取。
ProcessHacker采用的办法是自己定义 struct _SYSTEM_PROCESS_INFORMATION 结构(推测是逆向或者其他渠道获取)
typedef struct _SYSTEM_PROCESS_INFORMATION
{
ULONG NextEntryOffset;
ULONG NumberOfThreads;
LARGE_INTEGER WorkingSetPrivateSize; // since VISTA
ULONG HardFaultCount; // since WIN7
ULONG NumberOfThreadsHighWatermark; // since WIN7
ULONGLONG CycleTime; // since WIN7
LARGE_INTEGER CreateTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
UNICODE_STRING ImageName;
KPRIORITY BasePriority;
HANDLE UniqueProcessId;
HANDLE InheritedFromUniqueProcessId;
ULONG HandleCount;
ULONG SessionId;
ULONG_PTR UniqueProcessKey; // since VISTA (requires SystemExtendedProcessInformation)
SIZE_T PeakVirtualSize;
SIZE_T VirtualSize;
ULONG PageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
SIZE_T PrivatePageCount;
LARGE_INTEGER ReadOperationCount;
LARGE_INTEGER WriteOperationCount;
LARGE_INTEGER OtherOperationCount;
LARGE_INTEGER ReadTransferCount;
LARGE_INTEGER WriteTransferCount;
LARGE_INTEGER OtherTransferCount;
SYSTEM_THREAD_INFORMATION Threads[1];
} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
使用此结构获取内存占用情况见ProcessHacker中PhEnumProcesses函数。
该函数调用NtQuerySystemInformation获取进程信息。并以SYSTEM_PROCESS_INFORMATION结构遍历该函数获取的BUFFER,得到进程的信息及内存占用。
应用层获取进程的网络流量
一般精确到进程级别的网络流量统计也带有流量限制 所以大家可以使用TDI驱动开发 但是在应用层做到精确到进程的网络流量比较困难 可以考虑lsp程序开发
在我进行的项目中做了某些转换此处只要统计进程和端口的映射就可以了。 网络上有部分文章 vckbase网站的《Fport 源码》 不过其获取进程PTE的转换时硬转换 已经不适合WIN7 还有 《详谈进程与端口的映射》与 《再谈进程与端口的映射 》基本都是这般套路。 由于NDIS在多个操作系统改变过大 很多函数和思路都只能借鉴而无法调试学习。 还有NETSTAT命令的源码也可以参考。
《进程与端口映射》 http://www.cnblogs.com/BoyXiao/archive/2012/02/20/2359273.html 是目前最为详细 而且支持多操作系统的 获取进程与端口映射的代码
不过我们这里重点介绍processhacker的办法 其映射进程于端口的代码主体为PhGetNetworkConnections 主要是依靠两个未公开函数
static _GetExtendedTcpTable GetExtendedTcpTable_I;
static _GetExtendedUdpTable GetExtendedUdpTable_I;
typedef DWORD (WINAPI *_GetExtendedTcpTable)(
__out_bcount_opt(*pdwSize) PVOID pTcpTable,
__inout PDWORD pdwSize,
__in BOOL bOrder,
__in ULONG ulAf,
__in TCP_TABLE_CLASS TableClass,
__in ULONG Reserved
); typedef DWORD (WINAPI *_GetExtendedUdpTable)(
__out_bcount_opt(*pdwSize) PVOID pUdpTable,
__inout PDWORD pdwSize,
__in BOOL bOrder,
__in ULONG ulAf,
__in UDP_TABLE_CLASS TableClass,
__in ULONG Reserved
);
额基本就是这么多。 跟了半天,但是其实关键就这么几点。 正所谓大道不过三二句,说破不值半文钱
ProcessHacker学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- 阿里轻量应用服务器 Tomcat 注意的地方 Unsupported major.minor version 52.0(unable to load class
本地编译工程,提交到远程服务其的tomcat上报这个错 Unsupported major.minor version 52.0(unable to load class com.cl.busines ...
- Linux安装rz/sz,htop插件
Linux下rz/sz安装及使用方法 sz: 将选定的文件发送(send)到本地机器; rz:运行该命令会弹出 一个文件选择窗口, 从本地选择文件上传到服务器(receive). 下载安装包 lrzs ...
- POJ1003 – Hangover (基础)
Hangover Description How far can you make a stack of cards overhang a table? If you have one card, ...
- mysql六种日志
错误日志 MySQL服务启动和关闭过程中的信息以及其它错误和警告信息.默认在数据目录下 普通查询日志 用于记录select查询语句的日志.general_log.general_log_file 默认 ...
- List 的add()与addAll()的区别
add 是将传入的参数作为当前List中的一个Item存储,即使你传入一个List也只会另当前的List增加1个元素addAll 是传入一个List,将此List中的所有元素加入到当前List中,也就 ...
- 多端统一框架尝试--Taro
参考资料 Taro官网Taro GitHubTaro资源汇总Taro-UI 我的demo代码 github地址 Taro介绍和尝试心得 Taro是基于React语法规范开发的多端统一的框架,一套代码可 ...
- 【.NET架构】BIM软件架构01:Revit插件产品架构梳理
一.前言 BIM:Building Information Modeling 建筑信息模型,就是将建筑的相关信息附着于模型中,以管理该建筑在设计.算量.施工.运维全生命周期的情况.创建模 ...
- Java 性能调优工具
CPU使用率工具: vmstat 检查应用性能时,应该首先审查CPU时间.代码优化的目的是提升而不是降低(更短时间段内的)CPU的使用率.在试图深入优化应用前,应该先弄清楚为何CPU使用率低.磁盘使用 ...
- canvas 2.0
了解 虽然大家都称Canvas为html5的新标签,看起来好像Canvas属于html语言的新知识,但其实Canvas画图是通过javascript来做的.所以,如果你想学习Canvas画图,你必须要 ...
- TCP与UDP,可靠UDP如何实现
两种协议都是传输层协议,为应用层提供信息载体. TCP协议是基于连接的字节流的可靠协议,有三次握手,四次挥手,超时重传,流量控制(滑动窗口),拥塞控制和差错控制,也正因为有可靠性的保证和控制手段,所以 ...