这里的进程状态信息函数主要分为两类,一类是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. 01.Apache FtpServer配置

    1.解压Apache FTPServer 将下载下来的压缩包(ftpserver-1.0.6.zip)解压到本地,其目录结构如下图: 2.修改users.properties 修改 \apache-f ...

  2. poj 1300 Door Man 欧拉回路

    题目链接:http://poj.org/problem?id=1300 You are a butler in a large mansion. This mansion has so many ro ...

  3. Codeforces Round #277.5 (Div. 2)

    题目链接:http://codeforces.com/contest/489 A:SwapSort In this problem your goal is to sort an array cons ...

  4. load d3dcompiler_46.dll failed

    https://gist.github.com/rygorous/7936047 编shader的时候遇到这个warning不知道是不是什么隐患..从今天开始要做新项目了 尝试从同事那里要了这dll ...

  5. Javascript动态生成表格的性能调优

        vision 0.8 [耗时672ms]终极优化 将字符串作为数组对象的方式是目前效率最高,性能最优的方式.   <script> var t1 = new Date(); < ...

  6. Metasploit Framework命令汇总

    一.msfconsole ? 帮助菜单back 从当前环境返回banner 显示一个MSF bannercd 切换目录color 颜色转换connect 连接一个主机exit 退出MSFhelp 帮助 ...

  7. PowerDesigner(六)-物理数据模型(PDM逆向工程)(转)

    物理数据模型PDM 物理数据模型(Physical Data Model,PDM):在数据库的逻辑结构设计好之后,就需要完成其物理设计,PDM就是为实现这一目的而设计的. 物理数据模型是以常用的DBM ...

  8. Sqlite中使用rowid来表示行号,用于分页。

    在SQLite的查询结果中显示行号,可以使用select rowid as RowNumber ,* from WSCLanguage: select rowid as RowNumber ,* fr ...

  9. 如何做好一名DBA【转】

    我一直有一个观点:程序是暂时的,而数据是永恒的.所以我一直都认为数据的重要性在很多企业中都远远高于应用程序,在多年的工作实践中努力做好DBA的工作.而要做好一名DBA,必须要清楚作为一名DBA的职责. ...

  10. Javascript的怪癖

    1.匿名函数在不闭包的情况下this对象为window,而在双匿名闭包的情况下内部匿名函数的this对象为window. 2.在函数中定义变量,在函数外部想使用该变量,如果变量声明时有var,则访问不 ...