【旧文章搬运】如何从EPROCESS辨别一个进程是否已退出
原文发表于百度空间,2008-7-31
==========================================================================
前面已经通过遍历活动进程双链,来得到一个进程列表.
但是,这个链表中有些进程其实是已经退出的进程.
因此,在得到一个EPROCESS之后,必须对其进行识别,判断其是否已经退出.
通过对一死一活两个进程的EPROCESS的对比,发现以下标志可以用作判断进程是否退出的标准.
这是已经退出的IceSword的EPROCESS
lkd> dt _EPROCESS FDCE6518
nt!_EPROCESS
+0x000 Pcb : _KPROCESS
+0x06c ProcessLock : _EX_PUSH_LOCK
+0x070 CreateTime : _LARGE_INTEGER 0x1c8f265`a3f26690
+0x078 ExitTime : _LARGE_INTEGER 0x1c8f265`c12e5c1e //不为0
+0x080 RundownProtect : _EX_RUNDOWN_REF
+0x084 UniqueProcessId : 0x00000934
+0x088 ActiveProcessLinks : _LIST_ENTRY [ 0x814c9a08 - 0x813370b8 ]
+0x090 QuotaUsage : [3] 0
+0x09c QuotaPeak : [3] 0x1578
+0x0a8 CommitCharge : 0
+0x0ac PeakVirtualSize : 0x2fa8000
+0x0b0 VirtualSize : 0x230d000
+0x0b4 SessionProcessLinks : _LIST_ENTRY [ 0xf89b9014 - 0x813370e4 ]
+0x0bc DebugPort : (null)
+0x0c0 ExceptionPort : 0xe15bf1d8
+0x0c4 ObjectTable : (null) //为NULL
+0x0c8 Token : _EX_FAST_REF
+0x0cc WorkingSetLock : _FAST_MUTEX
+0x0ec WorkingSetPage : 0x19c5c
+0x0f0 AddressCreationLock : _FAST_MUTEX
+0x110 HyperSpaceLock : 0
+0x114 ForkInProgress : (null)
+0x118 HardwareTrigger : 0
+0x11c VadRoot : (null) //为NULL
+0x120 VadHint : (null) //为NULL
+0x124 CloneRoot : (null)
+0x128 NumberOfPrivatePages : 0 //为NULL
+0x12c NumberOfLockedPages : 0
+0x130 Win32Process : (null)
+0x134 Job : (null)
+0x138 SectionObject : (null) //为NULL
+0x13c SectionBaseAddress : 0x00400000
+0x140 QuotaBlock : 0x816f87c8 _EPROCESS_QUOTA_BLOCK
+0x144 WorkingSetWatch : (null)
+0x148 Win32WindowStation : 0x00000024
+0x14c InheritedFromUniqueProcessId : 0x000005e8
+0x150 LdtInformation : (null)
+0x154 VadFreeHint : (null)
+0x158 VdmObjects : (null)
+0x15c DeviceMap : 0xe26c13a0
+0x160 PhysicalVadList : _LIST_ENTRY [ 0xfdce6678 - 0xfdce6678 ]
+0x168 PageDirectoryPte : _HARDWARE_PTE
+0x168 Filler : 0
+0x170 Session : 0xf89b9000
+0x174 ImageFileName : [16] "IceSword.exe"
+0x184 JobLinks : _LIST_ENTRY [ 0x0 - 0x0 ]
+0x18c LockedPagesList : (null)
+0x190 ThreadListHead : _LIST_ENTRY [ 0xfdce66a8 - 0xfdce66a8 ]
+0x198 SecurityPort : (null)
+0x19c PaeTop : (null)
+0x1a0 ActiveThreads : 0 //为0
+0x1a4 GrantedAccess : 0x1f0fff
+0x1a8 DefaultHardErrorProcessing : 0x8000
+0x1ac LastThreadExitStatus : 0
+0x1b0 Peb : 0x7ffdf000 _PEB
+0x1b4 PrefetchTrace : _EX_FAST_REF
+0x1b8 ReadOperationCount : _LARGE_INTEGER 0xc2
+0x1c0 WriteOperationCount : _LARGE_INTEGER 0x5
+0x1c8 OtherOperationCount : _LARGE_INTEGER 0x3875
+0x1d0 ReadTransferCount : _LARGE_INTEGER 0x38ecb2
+0x1d8 WriteTransferCount : _LARGE_INTEGER 0x33cd5
+0x1e0 OtherTransferCount : _LARGE_INTEGER 0x93d458
+0x1e8 CommitChargeLimit : 0
+0x1ec CommitChargePeak : 0x861
+0x1f0 AweInfo : (null)
+0x1f4 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO
+0x1f8 Vm : _MMSUPPORT
+0x238 LastFaultCount : 0
+0x23c ModifiedPageCount : 0xcd
+0x240 NumberOfVads : 0
+0x244 JobStatus : 0
+0x248 Flags : 0xc082c
+0x248 CreateReported : 0y0
+0x248 NoDebugInherit : 0y0
+0x248 ProcessExiting : 0y1 //为1
+0x248 ProcessDelete : 0y1 //为1
+0x248 Wow64SplitPages : 0y0
+0x248 VmDeleted : 0y1 //为1
+0x248 OutswapEnabled : 0y0
+0x248 Outswapped : 0y0
+0x248 ForkFailed : 0y0
+0x248 HasPhysicalVad : 0y0
+0x248 AddressSpaceInitialized : 0y10
+0x248 SetTimerResolution : 0y0
+0x248 BreakOnTermination : 0y0
+0x248 SessionCreationUnderway : 0y0
+0x248 WriteWatch : 0y0
+0x248 ProcessInSession : 0y0 //为0
+0x248 OverrideAddressSpace : 0y0
+0x248 HasAddressSpace : 0y1
+0x248 LaunchPrefetched : 0y1
+0x248 InjectInpageErrors : 0y0
+0x248 VmTopDown : 0y0
+0x248 Unused3 : 0y0
+0x248 Unused4 : 0y0
+0x248 VdmAllowed : 0y0
+0x248 Unused : 0y00000 (0)
+0x248 Unused1 : 0y0
+0x248 Unused2 : 0y0
+0x24c ExitStatus : 0
+0x250 NextPageColor : 0x4752
+0x252 SubSystemMinorVersion : 0 ''
+0x253 SubSystemMajorVersion : 0x4 ''
+0x252 SubSystemVersion : 0x400
+0x254 PriorityClass : 0x2 ''
+0x255 WorkingSetAcquiredUnsafe : 0 ''
+0x258 Cookie : 0xf02d7ae4
以上标志大部分都可以可靠地用作识别的标志,通常使用ObjectTable的指针是否为NULL来判断进程是否已经退出.由些也可以知道,Idle进程比较特殊,也是一个ObjectTable为NULL的死进程,但其ExitTime却为0(即没有退出),看来要遍历进程做判断的话,还是用ObjectTable比较可靠些.

【旧文章搬运】如何从EPROCESS辨别一个进程是否已退出的更多相关文章
- 【旧文章搬运】遍历EPROCESS中的ActiveProcessLinks枚举进程
原文发表于百度空间,2008-7-25========================================================================== 前面对PEB ...
- 【旧文章搬运】Windows内核常见数据结构(进程相关)
原文发表于百度空间,2008-7-24========================================================================== 进程的相关结 ...
- 【旧文章搬运】Idle进程相关的一些东西
原文发表于百度空间,2009-05-13========================================================================== Idle进 ...
- 【旧文章搬运】PspCidTable攻与防
原文发表于百度空间,2009-03-29========================================================================== PspCi ...
- 【旧文章搬运】KeUserModeCallback用法详解
原文发表于百度空间及看雪论坛,2010-01-10 看雪论坛地址:https://bbs.pediy.com/thread-104918.htm 代码及附件可到这里下载=============== ...
- 【旧文章搬运】为什么win32k.sys在System进程空间无法访问
原文发表于百度空间,2010-01-02========================================================================== 玩过Sha ...
- 【旧文章搬运】Windows句柄分配算法(二)
原文发表于百度空间,2009-04-04========================================================================== 在创建句柄 ...
- 【旧文章搬运】Windows句柄表分配算法分析(三)
原文发表于百度空间,2009-03-30========================================================================== 三.当需要 ...
- 【旧文章搬运】扩展一下ProcessNotify~~
原文发表于百度空间,2009-01-08 看雪论坛地址:https://bbs.pediy.com/thread-80109.htm DebugMan论坛地址:http://www.debugman. ...
随机推荐
- How to resolve 'Potential Leak' issue
-1 down vote favorite I am using the 'analyze' tool in xcode to check for potential leakages in my a ...
- 快速上传到rackspace cdn工具turbolift swift 安装
快速上传到rackspace cdn 工具安装,2步即可完成: 1.安装git CentOS的yum源中没有git,只能自己编译安装,现在记录下编译安装的内容,留给自己备忘. 确保已安装了依赖的包 y ...
- Android的activity的生命周期
activity的生命周期有四个重要的状态:活动,暂停,停止,销毁 基本的方法有:onCreate.onStart.onResume.onPause.onStop.onDestory 最经常使用的方法 ...
- qt动画入门
Qt-4.6新增了Animation Framework(动画框架),让我们可以方便的写一些生动的程序. 不必像曾经的版本号一样,全部的控件都枯燥的呆在伟大光荣的QLayout里,或许它们可以唱个歌, ...
- Html5培训之精髓
一.核心技术(可去各技术官网学习) 1.html5的六大核心技术:Html5,CSS3,JavaScript,WebSocket,PhoneGap,Node.js,它们覆盖了设备端,浏览器端和云端的开 ...
- 6.非关系型数据库(Nosql)之mongodb:集群(主从复制)
1.主从复制是MongoDB最经常使用的复制方式.这样的方式很灵活,可用于备份.故障恢复.读扩展等 2最主要的设置方式就是建立一个主节点和一个或多个从节点,每一个从节点要知道主节点的地址. 执行 ...
- 令人赞叹的 MySQL
原文链接 译文链接 感谢 艾凌风 小伙伴校稿 令人赞叹的 MySQL 一个很棒的 MySQL 软件.库以及资源列表. 这个列表接受并鼓舞 pull requests,请看 CONTRIBUTING 文 ...
- 作为iOS程序员,最核心的60%能力有哪些?
作为iOS程序员,最核心的60%能力有哪些? 一个合格的iOS程序员需要掌握多少核心技能?你和专业的开发工程师的差距有多大?你现在的水平能开发一个功能完整性能高效的iOS APP吗?一起来看看下面 ...
- java接口的一些想法
最近一直在闷头往前看<thingking in java> ,但是却由于赶了进度而忘记了初衷.当学到集合的时候,回头却发现,我连最基本的接口都不明白.查了一上午资料,现在明白例如一点点,写 ...
- UVA - 11019 Matrix Matcher hash+KMP
题目链接:传送门 题解: 枚举每一行,每一行当中连续的y个我们hash 出来 那么一行就是 m - y + 1个hash值,形成的一个新 矩阵 大小是 n*(m - y + 1), 我们要找到x*y这 ...