Windows API 进程状态信息函数
这里的进程状态信息函数主要分为两类,一类是PS(PROCESS STATUS HELPER) API,另外一类是Th(TOOL HELP) API。
话说第一次遇到这个ToolHelp函数时我在看《windows核心编程》时遇到的。那时还仅仅是简单的看了一下,并未深入。
Ps API 函数列表及其功能说明:MSDN地址连接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms684894(v=vs.85).aspx
使用Ps API需要包含Psapi.h文件以及Psapi.lib
EmptyWorkingSet 从执行的工作集中尽可能的多删除页(page),内存优化工具就使用了这个软件。
原型:BOOL WINAPI EmptyWorkingSet( _In_ HANDLE hProcess );
EnumDeviceDrivers 枚举设备驱动
原型:BOOL WINAPI EnumDeviceDrivers( _Out_ LPVOID *lpImageBase, _In_ DWORD cb, _Out_ LPDWORD lpcbNeeded );
EnumPageFiles 枚举页文件
原型:BOOL WINAPI EnumPageFiles( _Out_ PENUM_PAGE_CALLBACK pCallbackRoutine, _In_ LPVOID lpContext );
EnumProcesses 枚举进程
原型:BOOL WINAPI EnumProcesses( _Out_ DWORD *pProcessIds, _In_ DWORD cb, _Out_ DWORD *pBytesReturned );
EnumProcessModules 枚举进程模块
原型:BOOL WINAPI EnumProcessModules( _In_ HANDLE hProcess, _Out_ HMODULE *lphModule, _In_ DWORD cb, _Out_ LPDWORD lpcbNeeded );
GetDeviceDriverBaseName 获取驱动的base name(我并不清楚base name是什么东西)
原型:DWORD WINAPI GetDeviceDriverBaseName( _In_ LPVOID ImageBase, _Out_ LPTSTR lpBaseName, _In_ DWORD nSize );
GetDeviceDriverFileName 这个是用来获取驱动的文件名
原型:DWORD WINAPI GetDeviceDriverFileName( _In_ LPVOID ImageBase, _Out_ LPTSTR lpFilename, _In_ DWORD nSize );
GetMappedFileName 这个很函数检测参数地址是不是在指定进程的地址空间的内存映射文件中,如果是,则返回内存映射文件名
原型:DWORD WINAPI GetMappedFileName(
_In_ HANDLE hProcess,
_In_ LPVOID lpv,
_Out_ LPTSTR lpFilename,
_In_ DWORD nSize
);
GetModuleBaseName 获取模块的基址名称
原型:DWORD WINAPI GetModuleBaseName(
_In_ HANDLE hProcess,
_In_opt_ HMODULE hModule,
_Out_ LPTSTR lpBaseName,
_In_ DWORD nSize
);
GetModuleFileNameEx 获取模块文件名
原型:DWORD WINAPI GetModuleFileNameEx(
_In_ HANDLE hProcess,
_In_opt_ HMODULE hModule,
_Out_ LPTSTR lpFilename,
_In_ DWORD nSize
);
GetModuleInformation 获取模块文件信息原型:
原型:BOOL WINAPI GetModuleInformation(
_In_ HANDLE hProcess,
_In_ HMODULE hModule,
_Out_ LPMODULEINFO lpmodinfo,
_In_ DWORD cb
);
GetPerformanceInfo 返回一个包含性能信息的PERFORMANCE_INFORMATION 结构体
原型:BOOL WINAPI GetPerformanceInfo(
_Out_ PPERFORMANCE_INFORMATION pPerformanceInformation,
_In_ DWORD cb
);
GetProcessimagefilename 获取指定进程的可执行文件名
原型:DWORD WINAPI GetProcessImageFileName(
_In_ HANDLE hProcess,
_Out_ LPTSTR lpImageFileName,
_In_ DWORD nSize
);
GetProcessMemoryInfo 通过PROCESS_MEMORY_COUNTERS结构返回指定进程的内存使用信息
原型:BOOL WINAPI GetProcessMemoryInfo(
_In_ HANDLE Process,
_Out_ PPROCESS_MEMORY_COUNTERS ppsmemCounters,
_In_ DWORD cb
);
GetWsChanges 返回自 InitializeProcessForWsWatch 函数被调用后添加到工作集(WS:working set)的页(pages)信息
原型:BOOL WINAPI GetWsChanges(
_In_ HANDLE hProcess,
_Out_ PPSAPI_WS_WATCH_INFORMATION lpWatchInfo,
_In_ DWORD cb
);
InitializeProcessForWsWatch 启动对指定进程的ws监控
原型:BOOL WINAPI InitializeProcessForWsWatch(
_In_ HANDLE hProcess
);
QueryWorkingSet获取指定进程位于虚拟地址空间的页(pages)扩展信息
原型:BOOL WINAPI QueryWorkingSet(
_In_ HANDLE hProcess,
_Out_ PVOID pv,
_In_ DWORD cb
);
Ps API的相关结构信息:MSDN地址连接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms684898(v=vs.85).aspx
ENUM_PAGE_FILE_INFORMATION
MODULEINFO
PERFORMANCE_INFORMATION
PROCESS_MEMORY_COUNTERS
PROCESS_MEMORY_COUNTERS_EX
PSAPI_WORKING_SET_BLOCK
PSAPI_WORKING_SET_EX_BLOCK
PSAPI_WORKING_SET_EX_INFORMATION
PSAPI_WORKING_SET_INFORMATION
PSAPI_WS_WATCH_INFORMATION
PSAPI_WS_WATCH_INFORMATION_EX
ToolHelp API 函数及其功能:MSDN地址连接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms686832(v=vs.85).aspx
使用ToolHelp API需要包含TlHelp32.h文件
CreateToolhelp32Snapshot 获取指定进程的快照,包含堆,模块,线程
Heap32First 获取指定进程的第一个堆块的信息
Heap32ListFirst 获取指定进程的第一个堆的信息
Heap32ListNext 获取下一个指定进程的堆信息
Heap32Next 获取进程分配的下一个堆块的信息
Module32First 获取指定进程的第一个模块信息
Module32Next 获取指定进程的下一个模块信息
Process32First 获取系统中第一个进程的信息
Process32Next 获取系统中下一个进程的信息
Thread32First 获取系统中的第一个线程信息,不论是哪一个进程的
Thread32Next 获取系统中下一个线程的信息
Toolhelp32ReadProcessMemory 从指定进程的指定地址复制内存数据
ToolHelp API相关结构信息:MSDN地址连接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms686844(v=vs.85).aspx
HEAPENTRY32
HEAPLIST32
MODULEENTRY32
PROCESSENTRY32
THREADENTRY32
ToolHelp函数中,其余函数的使用大多都需要CreateToolhelpSnapshot函数返回的句柄。
另外附一个前几天在网上查到的通过进程句柄获取窗口句柄的方法:
先调用一个函数,名为:GetTopWindo。最开始传入参数为0,获取到一个句柄(应该是explorer的句柄)。然后根据这个句柄调用GetWindowThreadProcessId函数,能获取到创建这个窗口的线程ID,以及这个窗口所属的进程ID。在这里获取到线程ID后,需要做的是将此ID与当前ID进行比较。如果ID相同,就表明找到了窗口的句柄,返回即可。如果不同,那么就要继续查找,这里使用函数:GetNextWindow( h , GW_HWNDNEXT);。里面的h参数为当前的窗口句柄。此函数的返回值为下一个窗口的句柄,即HWND。不过我也是今天才明确的知道,HWND句柄和HANDLE是不一样的。
不过这里存在一个问题就是,对于一个多窗口的进程,会存在查找遗漏的问题。这个方法的原理还是很简单的,思路就是进行窗口遍历。
Windows API 进程状态信息函数的更多相关文章
- C# Windows API
API:应用程序接口(API:Application Program Interface)应用程序接口(API:application programming interface)是一组定义.程序及协 ...
- Windows API 函数列表 附帮助手册
所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...
- Windows API Hooking in Python
catalogue . 相关基础知识 . Deviare API Hook Overview . 使用ctypes调用Windows API . pydbg . winappdbg . dll inj ...
- 初识【Windows API】--文本去重
最近学习操作系统中,老师布置了一个作业,运用系统调用函数删除文件夹下两个重复文本类文件,Linux玩不动,于是就只能在Windows下进行了. 看了一下介绍Windows API的博客: 点击打开 基 ...
- C#调用windows API的一些方法
使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1. 直接调用从 DLL 导出的函数. 2. ...
- Qt中使用Windows API
在Windows平台上进行开发,不可避免与Windows API打交道,Qt中使用的时候要添加对应API的头文件和链接lib文件,另外使用的Windows API的代码部分要使用#ifdef Q_O ...
- 在VBA中使用Windows API
VBA是一种强大的编程语言,可用于自定义Microsoft Office解决方案.通过使用VBA处理一个或多个Office应用程序对象模型,可以容易地修改Office应用程序的功能或者能够使两个或多个 ...
- FormatMessage与GetLastError配合使用,排查windows api调用过程中的错误
前一段时间在学习windows api调用过程中,遇到过一些调用错误或者程序没能显示预期的结果,或者直接出现vc运行时错误. 这对新手来说是司空见惯的事,因为不太熟悉难免会出错,出错的信息如果能显示很 ...
- C#调用Windows API函数截图
界面如下: 下面放了一个PictureBox 首先是声明函数: //这里是调用 Windows API函数来进行截图 //首先导入库文件 [System.Runtime.InteropServices ...
随机推荐
- 前端之JavaScript第一天学习(3)-JavaScript输出
JavaScript 通常用于操作 HTML 元素. 操作 HTML 元素 如需从 JavaScript 访问某个 HTML 元素,您可以使用 document.getElementById(id) ...
- 安装Symfony2
我就不明白这个框架明明很小就几M,为什么这么难下载. 他们为什么不把文件打包好?非要搞得这么复杂. 一开始我在Linux ubuntu下载没有成功 然后想在win10上试试 到www.apache.o ...
- 【BZOJ】【2756】【SCOI2012】奇怪的游戏
网络流-最大流 这题……建模部分先略过 这道题是会卡时限的T_T俺的Dinic被卡了,在此放几篇很棒的讲网络流算法的文章,至于大家耳熟能详的论文就不放了…… http://www.cppblog.co ...
- NYOJ-206 矩形的个数 AC 分类: NYOJ 2013-12-29 22:19 265人阅读 评论(0) 收藏
这题目是小学奥数题目,方法可以百度到,但是,有个难点就是,数据类型大小不够,如果是1000x1000的矩阵,那么就会超过int的范围,所以,就引进了long long的数据类型 #include< ...
- 女性社区TOP10
“女性和孩子的钱是世界上最好赚的”并不是一句空话.据统计,女性掌管着家庭70%的支出,如果你能让女性为你掏出腰包,那么你基本就掌控了一个家庭的大部分的消费. 有趣的是,女性还是一个喜欢分享的群体,他们 ...
- c++new和new()区别(了解)
我们在C++程序中经常看到两种new的使用方式:new A以及new A().那么这两种究竟有什么区别呢? 调用new分配的内存有时候会被初始化,而有时候不会,这依赖于A的类型是否是POD(Plain ...
- nginx+php+flight 构建RESTFul API
配置: Nginx: conf目录下nginx.conf配置文件. 第44行改为:root D:/wwwroot/www; 第45行改为:index index.html index.htm i ...
- Swift-4-数组和字典
// Playground - noun: a place where people can play import UIKit // 数组 字典 // 集合的可变性 赋值给var的集合是可变的mut ...
- HDU1048The Hardest Problem Ever
The Hardest Problem Ever Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- 6 高级IO函数
6.1 pipe函数 pipe函数创建一个管道,用于实现进程间通信 #include<unistd.h> ]); 参数包含两个文件描述符fd[0]和fd[1],往fd[1]写入的数据可以从 ...