博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PID,EPROCESS,HANDLE转换【转】
阅读量:4354 次
发布时间:2019-06-07

本文共 1930 字,大约阅读时间需要 6 分钟。

1. 通过 pid 获取目标进程的 EPROCESS (PsLookupProcessByProcessId)。如果当前进程不是目标进

程,那么我们切换当前进程,方法当然是通过 KeAttachProcess 或者 KeStackAttachProcess 啦。
接下来我们就可以从 _PEB结构中随心所欲的获取目标路径,命令行,啥滴东西了。最后别忘了 Detach 
(如果你没有 Attach 那么这一步不需要)。

2. 通过 pid 获取目标 EPROCESS。然后那,我们用 ObOpenObjectByPointer 函数,记得把 ObjectType

置为 *PsProcessType (置空也行啦)。这样我们就获得了 Process Handle,现在 EPROCESS 指针对我们
已经么有用了,释放掉,释放掉!方法是... ObfDereferenceObject。最后通过 ZwQueryInformationProcess
大法,最最后,记得 ZwClose 掉 handle! 搞定收工!

win32内核程序中进程的pid,handle,eprocess 

在win32内核程序开发中,我们常常需要取得某进程的pid或句柄,或者需要检索进程的eprocess结构,很多API函数需要的参数也不同,所以掌 握pid<->handle<->eprocess相互转换的方法会大大提高我们的开发效率。

以下就是我自己在实际开发中总结出来的转换方法,在此记录下来,以供需要的朋友参考。

1、pid->handle

OBJECT_ATTRIBUTES ObjectAttributes;

CLIENT_ID clientid;
InitializeObjectAttributes(&ObjectAttributes, 0 ,OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, 0, 0);
clientid.UniqueProcess = (HANDLE)pid;
clientid.UniqueThread=0;
ZwOpenProcess(&handle, PROCESS_ALL_ACCESS, &ObjectAttributes, &clientid); 
handle即为所求。

2、handle->pid

PROCESS_BASIC_INFORMATION pbi;

ns = ZwQueryInformationProcess(ProcessHandle, ProcessBasicInformation, (PVOID)&pbi, sizeof(ProcessBasicInformation), NULL);
pid = pbi.UniqueProcessId; 
pid即为所求。

3、pid->eprocess

PEPROCESS pEProc;

PsLookupProcessByProcessId((HANDLE)pid, &pEProc);
ObDereferenceObject(pEProc); 
pEProc即为所求eprocess的指针。

4、handle->eprocess

暂未发现直接转换的方法,可由handle->pid->eprocess。

5、eprocess->pid

_EPROCESS.UniqueProcessId即为所求,虽然声明类型为HANDLE,但实际上是pid。

6、eprocess->handle

暂未发现直接转换的方法,可由eprocess->pid->handle。

4、handle->eprocess

暂未发现直接转换的方法,可由handle->pid->eprocess。

这个我来完善吧.

st = ObReferenceObjectByHandle (ProcessHandle,

PROCESS_TERMINATE,
PsProcessType,
KeGetPreviousModeByThread(&Self->Tcb),
&Process,
NULL);

6、eprocess->handle

暂未发现直接转换的方法,可由eprocess->pid->handle。

这个也完善下.

Status = ObOpenObjectByPointer(
Process,
Attributes,
&AccessState,
0,
PsProcessType,
PreviousMode,
&Handle
);

转载于:https://www.cnblogs.com/trxdy/archive/2012/03/26/2417574.html

你可能感兴趣的文章
软件测试6班2组第一天任务分配
查看>>
惠普开源的通信测试工具Seagull的安装体会
查看>>
路由器
查看>>
用户体验
查看>>
浅析c++和c语言的enum类型
查看>>
sql编写注意
查看>>
(简单) POJ 2352 Stars,Treap。
查看>>
(中等) POJ 2948 Martian Mining,DP。
查看>>
Java IO输入输出
查看>>
一对一单向双向主键关联
查看>>
ecshop 调用其他数据库中的商品
查看>>
如何一步一步用DDD设计一个电商网站(十二)—— 提交并生成订单
查看>>
给用户授权以root身份执行ls,touch,passwd命令,但是禁止修改root用户密码
查看>>
SpringBoot访问NoSQL和简单的Thymeleaf-Spring-Spring-boot整合
查看>>
心跳检测机制
查看>>
Eclipse提交任务至Hadoop集群遇到的问题
查看>>
python BeautifulSoup4解析网页
查看>>
wxPython中添加窗口标题图标
查看>>
web服务器boa的移植
查看>>
linux 查看网络负载
查看>>