EPROCESS:NT进程的核心(更新)

原创 2005年02月25日 22:10:00

作者是 陆麟

是2000年写的了  呵呵 
内核类的文章沉寂了好长一段时间,再度开写.今天写的乃是未公开的WIN2000的EPROCESS结构.
EPROCESS乃是NT进程的核心.该结构定义了所有进程相关的数据.知道了该结构,NT的核心机密就公开了一半.下面乃是我于7.26挖到凌晨的奥秘.:)))看哪.大补啊.:DDD
该结构仅在英文WIN2000零售版上验证通过.如果以后WIN2000有了SERVICE PACK,并不保证兼容.使用者请自己注意.

typedef struct _DISPATCHER_HEADER {
UCHAR Type;
UCHAR Absolute;
UCHAR Size;
UCHAR Inserted;
LONG SignalState;
LIST_ENTRY WaitListHead;
} DISPATCHER_HEADER;

typedef struct _FIRSTPART_OBJ{
unsigned inheritable : 1;
unsigned protected :1;
unsigned pobj :14;
}FIRSTPART_OBJ;

typedef struct _OBJTBL{
FIRSTPART_OBJ firstpart_obj;
DWORD access_control_mask;
}OBJTBL,*POBJTBL;

typedef struct vad {
void *StartingAddress;
void *EndingAddress;
struct vad *ParentLink;
struct vad *LeftLink;
struct vad *RightLink;
ULONG Flags;
}VAD, *PVAD;

typedef struct{
struct KPCB Pcb; //0x0
INT ExitStatus; //0x6c
DISPATCHER_HEADER LockEvent; //0x70
__int64 LockCount; //0x80
__int64 CreateTime; //0x88
__int64 ExitTime; //0x90
UINT LockOwner; //0x98
UINT UniqueProcessId; //0x9c
LIST_ENTRY ActiveProcessLinks; //0xa0
__int64 QuotaPeakPoolUsage[0]; //0xa8
__int64 QuotaPoolUsage[0]; //0xb0
UINT PagefileUsage; //0xb8
UINT CommitCharge; //0xbc
UINT PeakPagefileUsage; //0xc0
UINT PeakVirtualSize; //0xc4
UINT VirtualSize; //0xc8
__int64 Vm; //0xd0
BYTE UNKNOW[0x48]; //0xd8
HANDLE DebugPort; //0x120
UINT ExceptionPort; //0x124
POBJTBL ObjectTable; //0x128
PTOKEN Token; //0x12c
BYTE WorkingSetLock[0x20]; //0x130
UINT WorkingSetPage; //0x150
BYTE ProcessOutswapEnabled; //0x154
BYTE ProcessOutswapped; //0x155
BYTE AddressSpaceInitialized; //0x156
BYTE AddressSpaceDeleted; //0x157
BYTE AddressCreationLock; //0x158
BYTE UNKNOWN2[0x23]; //0x159
UINT ForkInProgress; //0x17c
WORD VmOperation; //0x180
WORD ForkWasSuccessful; //0x182
UINT VmOperationEvent; //0x184
UINT LastFaultCount; //0x188
BYTE UNKNOW3[8]; //0x18c
PVAD VadRoot; //0x194
UINT VadHint; //0x198
UINT CloneRoot; //0x19c
UINT NumberOfPrivatePages; //0x1a0
UINT NumberOfLockedPages; //0x1a4
BYTE ExitProcessCalled; //0x1aa
BYTE CreateProcessReported; //0x1ab
HANDLE SectionHandle; //0x1ac
PPEB Peb; //0x1b0
PVOID SectionBaseAddress; //0x1b4
UINT QuotaBlock; //0x1b8
UINT LastThreadExitStatus; //0x1bc
PVOID WorkingSetWatch; //0x1c0
PVOID Win32WindowStation; //0x1c4
UINT InheritedFromUniqueProcessId; //0x1c8
UINT GrantedAccess; //0x1cc
UINT DefaultHardErrorProcessing; //0x1d0
PLDT_ENTRY LdtInformation; //0x1d4
UINT VadFreeHint; //0x1d8
PVOID VdmObjects; //0x1dc
PPROCESS_DEVICEMAP_INFORMATION DeviceMap;//0x1e0
DWORD *PageDirectoryPte; //0x1f0
WORD *ImageFileName; //0x1fc
BYTE UNKNOWN4[0xc]; //200
__int64 VmTrimFaultValue; //0x20c
PVOID Win32Process; //0x214
}EPROCESS,*PEPROCESS;

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

下面的结构来处费尔:

typedef struct _EPROCESS
{
KPROCESS Pcb;
NTSTATUS ExitStatus;
KEVENT LockEvent;
DWORD LockCount;
QWORD CreateTime;
QWORD ExitTime;
PVOID LockOwner;
DWORD UniqueProcessId;
QWORD ActiveProcessLinks;
DWORD QuotaPeakPoolUsage [2]; // NP, P
DWORD QuotaPoolUsage [2]; // NP, P
DWORD PagefileUsage;
DWORD CommitCharge;
DWORD PeakPagefileUsage;
DWORD PeakVirtualSize;
QWORD VirtualSize;
DWORD Vm [12];
DWORD LastProtoPteFault;
DWORD DebugPort;
DWORD ExceptionPort;
DWORD ObjectTable;
DWORD Token;
DWORD WorkingSetLock [8];
DWORD WorkingSetPage;
BOOLEAN ProcessOutswapEnabled;
BOOLEAN ProcessOutswapped;
BOOLEAN AddressSpaceInitialized;
BOOLEAN AddressSpaceDeleted;
DWORD AddressCreationLock [9];
DWORD ForkInProgress;
DWORD VmOperation;
DWORD VmOperationEvent;
DWORD PageDirectoryPte;
QWORD LastFaultCount;
PVOID VadRoot;
DWORD VadHint;
DWORD CloneRoot;
DWORD NumberOfPrivatePages;
DWORD NumberOfLockedPages;
WORD w184;
BOOLEAN ExitProcessCalled;
BOOLEAN CreateProcessReported;
HANDLE SectionHandle;
struct _PEB *Peb; // offset 0x1B0
PVOID SectionBaseAddress;
PVOID QuotaBlock;
NTSTATUS LastThreadExitStatus;
PROCESS_WS_WATCH_INFORMATION WorkingSetWatch;
DWORD InheritedFromUniqueProcessId;
ACCESS_MASK GrantedAccess;
DWORD DefaultHardErrorProcessing;
DWORD LdtInformation;
DWORD VadFreeHint;
DWORD VdmObjects;
KMUTANT ProcessMutant;
BYTE ImageFileName [16]; // offset 0x1FC
DWORD VmTrimFaultValue [2];
PVOID Win32Process;
DWORD d1F8;
DWORD d1FC;
}
EPROCESS,
* PEPROCESS,
**PPEPROCESS;

相关文章推荐

如何从EPROCESS辨别一个进程是否已退出

前面已经通过遍历活动进程双链,来得到一个进程列表. 但是,这个链表中有些进程其实是已经退出的进程. 因此,在得到一个EPROCESS之后,必须对其进行识别,判断其是否已经退出. 通过对一死一活两...

使用EPROCESS下Win32Process枚举进程

此方法硬编码很多!!! EPROCESS下win32Process其实是一个tagPROCESSINFO 结构 typedef struct _tagPROCESSINFO ...

EPROCESS进程断链

本身今天说写《Windows驱动开发技术详解》第六章的笔记,但是发现第六章无非是字符串、文件、注册表,其实没有必要抄书,之前写了写笔记,也能够尝试写一点小函数练练手的,就想自己写点小例子记作笔记也是O...
  • SR0ad
  • SR0ad
  • 2012年10月24日 20:36
  • 654

执行体进程--EPROCESS

执行体层位于内核层之上,它侧重于提供各种管理策略,同时为上层应用层程序提供基本的功能接口。 // Process structure. // // If you remove a field from...

EPROCESS 进程/线程优先级 句柄表 GDT LDT 页表 《寒江独钓》内核学习笔记(2)

在学习笔记(1)中,我们学习了IRP的数据结构的相关知识,接下来我们继续来学习内核中很重要的另一批数据结构: EPROCESS/KPROCESS/PEB。把它们放到一起是因为这三个数据结构及其外延和w...

基于visual c++之windows核心编程代码分析(35)实践NT服务的框架

NT指的是计算机操作系统的核心,有NT4.0/server2000/xp/server2003/vista/2008.是微软NT系列NT服务器网络是计算机网络中服务器是NT型主机。一个NT服务有三部分...

WIndows NT服务和普通进程之间大数据传输问题

问题: 我的项目中有一个后台服务,开机自启动,然后会去服务器上获取大数据,缓存在自己的地址空间中。 另外一个进程(Windows Form界面)启动之后会来这个服务这里获取这些数据。 开始为了方便...

NT KERNEL & SYSTEM 进程占用 80 端口导致 Nginx 启动失败

NT KERNEL & SYSTEM 进程占用 80 端口导致 Nginx 启动失败

我的计算机问题解决之:NT Kernel & System 进程CPU占用过高(开机便保持在50%)

最近电脑突然出现顿卡顿卡的现象,查看进程管理,发现有一个System的进程一直占用CPU 50%,并且开机便如此。 针对这个问题我在网上查了很多资料,大部分都说系统该清理啦或...
  • yulingha
  • yulingha
  • 2013年03月11日 22:24
  • 29760
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EPROCESS:NT进程的核心(更新)
举报原因:
原因补充:

(最多只允许输入30个字)