这里的进程状态信息函数主要分为两类,一类是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 进程状态信息函数的更多相关文章

  1. C# Windows API

    API:应用程序接口(API:Application Program Interface)应用程序接口(API:application programming interface)是一组定义.程序及协 ...

  2. Windows API 函数列表 附帮助手册

    所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...

  3. Windows API Hooking in Python

    catalogue . 相关基础知识 . Deviare API Hook Overview . 使用ctypes调用Windows API . pydbg . winappdbg . dll inj ...

  4. 初识【Windows API】--文本去重

    最近学习操作系统中,老师布置了一个作业,运用系统调用函数删除文件夹下两个重复文本类文件,Linux玩不动,于是就只能在Windows下进行了. 看了一下介绍Windows API的博客: 点击打开 基 ...

  5. C#调用windows API的一些方法

    使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2. ...

  6. Qt中使用Windows API

    在Windows平台上进行开发,不可避免与Windows API打交道,Qt中使用的时候要添加对应API的头文件和链接lib文件,另外使用的Windows API的代码部分要使用#ifdef  Q_O ...

  7. 在VBA中使用Windows API

    VBA是一种强大的编程语言,可用于自定义Microsoft Office解决方案.通过使用VBA处理一个或多个Office应用程序对象模型,可以容易地修改Office应用程序的功能或者能够使两个或多个 ...

  8. FormatMessage与GetLastError配合使用,排查windows api调用过程中的错误

    前一段时间在学习windows api调用过程中,遇到过一些调用错误或者程序没能显示预期的结果,或者直接出现vc运行时错误. 这对新手来说是司空见惯的事,因为不太熟悉难免会出错,出错的信息如果能显示很 ...

  9. C#调用Windows API函数截图

    界面如下: 下面放了一个PictureBox 首先是声明函数: //这里是调用 Windows API函数来进行截图 //首先导入库文件 [System.Runtime.InteropServices ...

随机推荐

  1. Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor 模拟

    题目链接: http://codeforces.com/contest/670/problem/E 题解: 用STL的list和stack模拟的,没想到跑的还挺快. 代码: #include<i ...

  2. 将apk安装包安装在Android真机或者模拟器

    例子如下: 一.准备 打开MAC PC上的Android模拟器方法:打开eclipse-—>window->Android Virtual Device Manager 如果是安装在真机上 ...

  3. 9 I/O复用

    I/O复用使得程序能够同时监听多个文件描述符,适用于以下情况: 客户端同时处理多个socket,比如非阻塞connect 客户端同时处理用户输入和网络连接,比如聊天室程序 TCP服务器同时处理监听so ...

  4. Asp.net页面无刷新请求实现

    Asp.net页面无刷新请求实现 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=&qu ...

  5. 三维云模拟Three.js

    http://www.mrdoob.com/#/131/clouds http://www.webgl.com/2012/03/webgl-demo-clouds/ <!DOCTYPE html ...

  6. LNMP笔记:安装 Xcache 缓存扩展,降低服务器负载

    LNMP笔记:安装 Xcache 缓存扩展,降低服务器负载 2014/11/27 教程笔记 4,743 14     WordPress 精品主机推荐:恒创主机 | 阿里云(本站目前所用云主机) 倡萌 ...

  7. JAVA 异常对于性能的影响

    陶炳哲 - MAY 12, 2015 在对OneAPM的客户做技术支持时,我们常常会看到很多客户根本没意识到的异常.在消除了这些异常之后,代码运行速度与以前相比大幅提升.这让我们产生一种猜测,就是在代 ...

  8. 2015年4月 15款免费jQuery插件

    点这里 We have collected for you the 15 fresh, free and handy jQuery plugins that will help to speed up ...

  9. Linux网络编程3——socket

    宏定义 首先介绍两个宏定义,看如下代码 代码1 /************************************************************************* & ...

  10. hdu 3118(二进制枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3118 思路:题目要求是去掉最少的边使得图中不存在路径长度为奇数的环,这个问题等价于在图中去掉若干条边, ...