NTAPI枚举指定进程中指定模块创建的线程

本文介绍了一种通过NTAPI来枚举指定进程中由特定模块创建的线程的方法,涉及到线程和模块地址的关系判断,以及在不同环境下的线程起始地址获取。代码示例中,首先调用NtQuerySystemInformation获取系统进程信息,然后遍历找到目标进程及其线程,最后使用KiOpenThread和NtQueryInformationThread等函数判断线程是否在模块范围内。
摘要由CSDN通过智能技术生成
代码示例了如何使用API枚举指定进程中指定模块创建的线程, 注意该方案存在一定局限性, 就是模块的起始地址和线程起始地址之间的关系无法保证, 可能存在漏掉的.

static HANDLE KiOpenThread(ACCESS_MASK dwDesiredAccess, BOOL bInheritHandle, HANDLE dwThreadId)
{
	OBJECT_ATTRIBUTES ObjectAttributes;
	InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL);
	if (bInheritHandle)
		ObjectAttributes.Attributes = OBJ_INHERIT;

	CLIENT_ID ClientId;
	ClientId.UniqueProcess = NULL;
	ClientId.UniqueThread  = dwThreadId;

	HANDLE hThread = NULL;
	NtOpenThread(&hThread, dwDesiredAccess, &ObjectAttributes, &ClientId);
	return hThread;
}

//-------------------------------------------------------------------------

/// <summary>
/// NTAPI枚举指定进程中指定模块创建的线程
/// </summary>
/// <param name="HANDLE dwProcessId"></param>
/// <param name="LPBYTE lpStart">模块开始地址, 可用 GetModuleInformation 等取得</param>
/// <param
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值