[Win32] ToolHelp API 和 进程API 详解

本文详细介绍了Windows中的ToolHelp API和进程API,包括如何使用CreateToolhelp32Snapshot创建进程快照,Process32First获取进程信息,以及如何利用TerminateProcess结束进程。此外,还探讨了进程API中的其他关键函数和注意事项。
摘要由CSDN通过智能技术生成
 本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/47720803

一:ToolHelp API

MSDN:https://msdn.microsoft.com/en-us/library/ms686832(VS.85).aspx

关于Toolhelp API,MSDN是这样解释的:

The functions provided by the tool help library make it easier for you to obtain information about currently executing applications. These functions are designed to streamline the creation of tools.

提供的工具帮助库的功能方便您可以获取有关当前正在执行的应用程序的信息。这些功能旨在简化创建工具。

其实,ToolHelp API就是用于枚举进程,枚举模块,获取进程和模块信息的工具API。

1。CreateToolhelp32Snapshot

HANDLE WINAPI CreateToolhelp32Snapshot(
  _In_ DWORD dwFlags,
  _In_ DWORD th32ProcessID
);

创建进程快照

dwFlags:

TH32CS_INHERIT:指示是可继承的快照句柄。

TH32CS_SNAPALL:包括所有进程和线程,再加上堆的 th32ProcessID 中指定的进程和模块。等效于指定 TH32CS_SNAPHEAPLIST,TH32CS_SNAPMODULE,TH32CS_SNAPPROCESS 和 TH32CS_SNAPTHREAD 的值组合使用或运算 (|)。

TH32CS_SNAPHEAPLIST:包括所有堆的快照中的 th32ProcessID 中指定的进程。若要枚举的堆,请参阅 Heap32ListFirst。

TH32CS_SNAPMODULE:包括所有模块的快照中的 th32ProcessID 中指定的进程。若要枚举模块,请参阅 Module32First。如果函数失败与 ERROR_BAD_LENGTH,重试功能,直到成功为止。
64 位 Windows: 在 32 位进程中使用此标志,而在 64 位进程中使用 64 位的进程。若要包括 64 位进程从 th32ProcessID 中指定的进程的 32 位模块,请使用 TH32CS_SNAPMODULE32 标志。

TH32CS_SNAPMODULE32:包括所有的 32 位模块的 th32ProcessID 在快照时从 64 位进程调用中指定的进程。此标志可以结合 TH32CS_SNAPMODULE 或 TH32CS_SNAPALL。如果函数失败与 ERROR_BAD_LENGTH,重试功能,直到成功为止。

TH32CS_SNAPPROCESS:包含在快照中系统中的所有进程。若要枚举的进程,请参阅 Process32First。

TH32CS_SNAPTHREAD:包含在快照中系统中的所有线程。若要枚举的线程,请参阅 Thread32First。若要标识属于特定进程的线程,线程进行枚举时比较 THREADENTRY32 结构的 th32OwnerProcessID 成员及其进程标识符。

th32ProcessID:

要包含在快照中的进程的进程标识符。这个参数可以是零,以表明当前进程。当指定的 TH32CS_SNAPHEAPLIST、 TH32CS_SNAPMODULE、 TH32CS_SNAPMODULE32 或 TH32CS_SNAPALL 的值,将使用此参数。否则为它将被忽略,所有流程都包含在快照中。

如果指定的进程是空闲进程或 CSRSS 之一处理,此函数将失败和最后的错误代码是 ERROR_ACCESS_DENIED,因为它们的访问限制阻止用户级代码打开它们。

如果指定的进程是一个 64 位的过程和调用方是 32 位的进程,此函数将失败和最后的错误代码是 ERROR_PARTIAL_COPY (299)。

返回值:如果此函数成功,它返回一个打开句柄到指定快照。如果函数失败,则返回 INVALID_HANDLE_VALUE

简单解释:如果你想枚举进程,dwFlags用TH32CS_SNAPPROCESS,此时th32ProcessID会被忽略,要枚举模块,用TH32CS_SNAPMODULE(64位程序枚举32位进程的模块时用TH32CS_SNAPMODULE32),枚举模块时th32ProcessID表示进程ID

2。Process32First

BOOL WINAPI Process32First(
  _In_    HANDLE           hSnapshot,
  _Inout_ LPPROCESSENTRY32 lppe
);

获取进程快照中的第一个进程信息

hSnapshot:调用 CreateToolhelp32

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值