惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
MyScale Blog
MyScale Blog
Y
Y Combinator Blog
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
Google DeepMind News
Google DeepMind News
V
Vulnerabilities – Threatpost
T
The Blog of Author Tim Ferriss
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
N
News and Events Feed by Topic
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
博客园 - 叶小钗
B
Blog
Vercel News
Vercel News
T
Tenable Blog
T
The Exploit Database - CXSecurity.com
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Microsoft Security Blog
Microsoft Security Blog
S
Securelist
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Palo Alto Networks Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
DataBreaches.Net
Cyberwarzone
Cyberwarzone
Engineering at Meta
Engineering at Meta
Martin Fowler
Martin Fowler
G
GRAHAM CLULEY
Project Zero
Project Zero
Cisco Talos Blog
Cisco Talos Blog
A
Arctic Wolf
C
CERT Recently Published Vulnerability Notes
L
LangChain Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Check Point Blog
A
About on SuperTechFans
W
WeLiveSecurity
The GitHub Blog
The GitHub Blog

博客园 - cxun

使用 Sublime Text 将含下划线的字符串批量替换为驼峰命名法格式的字符串 如何使用iTunes与iTools导出微信聊天记录 git 常用命令粗略总结 如何从第三方应用下载广播电台的缓存节目内容 在 Windows 10 中启用 Windows Photo Viewer iOS版微信朋友圈数据库的简要分析 如何将密切好友的微信聊天记录恢复到自己的微信中 Hash工具下载地址 微信聊天记录查看器(程序+源码) - iOS版 XEN的启动信息输出到“Platform timer is 14.318MHz HPET”就暂停接收的解决办法 利用 Serial Over Lan(SOL)搭建 XEN 的调试信息输出环境 Windows内核开发中如何区分文件对象究竟是文件还是文件夹? 白盒密码入门 Windows Language Packs Downloading Links 使用VirtualBox SDK之初步编译 VirtualBox开发环境的搭建详解 最简单的7z API接口 Chrome的Awesome Screenshot的插件离线下载 Chrome插件安装文件提取方法及 PwdHash Port 的插件下载
[转] win32内核程序中进程的pid,handle,eprocess之间相互转换的方法
cxun · 2013-05-10 · via 博客园 - cxun

很有用,收下以后方便查询。

原贴地址:http://bbs.pediy.com/showthread.php?t=119193

在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。

以上方法在Windows XP SP2中验证通过,欢迎大家补充

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
                    );