原文发表于百度空间,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辨别一个进程是否已退出的更多相关文章

  1. 【旧文章搬运】遍历EPROCESS中的ActiveProcessLinks枚举进程

    原文发表于百度空间,2008-7-25========================================================================== 前面对PEB ...

  2. 【旧文章搬运】Windows内核常见数据结构(进程相关)

    原文发表于百度空间,2008-7-24========================================================================== 进程的相关结 ...

  3. 【旧文章搬运】Idle进程相关的一些东西

    原文发表于百度空间,2009-05-13========================================================================== Idle进 ...

  4. 【旧文章搬运】PspCidTable攻与防

    原文发表于百度空间,2009-03-29========================================================================== PspCi ...

  5. 【旧文章搬运】KeUserModeCallback用法详解

    原文发表于百度空间及看雪论坛,2010-01-10 看雪论坛地址:https://bbs.pediy.com/thread-104918.htm  代码及附件可到这里下载=============== ...

  6. 【旧文章搬运】为什么win32k.sys在System进程空间无法访问

    原文发表于百度空间,2010-01-02========================================================================== 玩过Sha ...

  7. 【旧文章搬运】Windows句柄分配算法(二)

    原文发表于百度空间,2009-04-04========================================================================== 在创建句柄 ...

  8. 【旧文章搬运】Windows句柄表分配算法分析(三)

    原文发表于百度空间,2009-03-30========================================================================== 三.当需要 ...

  9. 【旧文章搬运】扩展一下ProcessNotify~~

    原文发表于百度空间,2009-01-08 看雪论坛地址:https://bbs.pediy.com/thread-80109.htm DebugMan论坛地址:http://www.debugman. ...

随机推荐

  1. Servlet(生命周期)

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" ...

  2. 5.Longest Palindrome substring

    /* * 5.Longest Palindrome substring * 2016-4-9 by Mingyang 自然而然的想到用dp来做 * 刚开始自己做的时候分的条件太细,两个index相等, ...

  3. HeatMap(热图)的原理和实现

    先来看两张图: (1)10年世界杯决赛,冠军西班牙队中门将.后卫.中场及前锋的跑位热图 通过热图,我们可以很清楚的看出四个球员在比赛中跑动位置的差异. (2)历史地震震源位置的热图 也可以很清楚的看出 ...

  4. underscore.js 页面数据渲染

    1.underscore.js  源码 // Underscore.js 1.8.3 // http://underscorejs.org // (c) 2009-2015 Jeremy Ashken ...

  5. 【转载】C# 理解泛型

    术语表 generics:泛型type-safe:类型安全collection: 集合compiler:编译器run time:程序运行时object: 对象.NET library:.Net类库va ...

  6. 用python编写的简易端口扫描器

    #coding = utf-8 ''' python 3.4 通过简单的TCP端口连接来判断指定IP是否开放了指定端口. ''' import socket import optparse impor ...

  7. Seesion和Cookie详解2

    转载来自: https://www.toutiao.com/a6693986851193094664/?tt_from=weixin&utm_campaign=client_share& ...

  8. C系列语言终极校对宝典【第一、第二部分】

    第一部分:基本概念及其它问答题 1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一 ...

  9. NameNode和JobTracker的网络接口

    Hadoop快速入门 http://hadoop.apache.org/docs/r1.0.4/cn/quickstart.html

  10. extjs4.0 treepanel节点的选中、展开! 数据的重新加载

    1.extjs4.0API较3.0有非常大变化2.多级子父节点的选中和展开.3.数据的重新加载.tree.getStore().load4.节点的移除,从树中根据ID获取节点 tree.getStor ...