《Windows内核原理与实现》中,定义的EPROCESS结构如下:
(注,没改偏移地址,不能直接使用偏移地址)
typedef struct _EPROCESS {
KPROCESS Pcb; // +0x000EX_PUSH_LOCK ProcessLock; // +0x06c
LARGE_INTEGER CreateTime; // +0x070
LARGE_INTEGER ExitTime; // +0x078
EX_RUNDOWN_REF RundownProtect; // +0x080
ULONG UniqueProcessId; // +0x084
LIST_ENTRY ActiveProcessLinks; // +0x088
ULONG QuotaUsage[3]; // +0x090
ULONG QuotaPeak[3]; // +0x09c
ULONG CommitCharge; // +0x0a8
ULONG CommitChargeLimit;
ULONG CommitChargePeak;
ULONG VirtualSize; // +0x0b0
LIST_ENTRY SessionProcessLinks; // +0x0b4
PVOID DebugPort; // +0x0bc
PVOID ExceptionPort; // +0x0c0
PHANDLE_TABLE ObjectTable; // +0x0c4
EX_FAST_REF Token; // +0x0c8
ULONG WorkingSetPage; // +0x0cc
KGUARDED_MUTEX AddressCreationLock; // +0x0d0
ULONG HyperSpaceLock; // +0x0f0
PETHREAD ForkInProgress; // +0x0f4
ULONG HardwareTrigger; // +0x0f8
PMM_AVL_TABLE PhysicalVadRoot; // +0x0fc
PVOID CloneRoot; // +0x100
ULONG NumberOfPrivatePages; // +0x104
ULONG NumberOfLockedPages; // +0x108
PVOID Win32Process; // +0x10c
PEJOB Job; // +0x110
PVOID SectionObject; // +0x114
PVOID SectionBaseAddress; // +0x118
PEPROCESS_QUOTA_BLOCK QuotaBlock; // +0x11c
PPAGEFAULT_HISTORY WorkingSetWatch; // +0x120
PVOID Win32WindowStation; // +0x124
ULONG InheritedFromUniqueProcessId; // +0x128
PVOID LdtInformation; // +0x12c
PVOID VadFreeHint; // +0x130
PVOID VdmObjects; // +0x134
PVOID DeviceMap; // +0x138
PVOID Spare0[3]; // +0x13c
union {
HARDWARE_PTE PageDirectoryPte; // +0x148
UINT64 Filler; // +0x148
};
PVOID Session; // +0x150
UCHAR ImageFileName[16]; // +0x154
LIST_ENTRY JobLinks; // +0x164
PVOID LockedPagesList; // +0x16c
LIST_ENTRY ThreadListHead; // +0x170
PVOID SecurityPort; // +0x178
PVOID PaeTop; // +0x17c
ULONG ActiveThreads; // +0x180
ULONG GrantedAccess; // +0x184
ULONG DefaultHardErrorProcessing; // +0x188
SHORT LastThreadExitStatus; // +0x18c
PPEB Peb; // +0x190
EX_FAST_REF PrefetchTrace; // +0x194
LARGE_INTEGER ReadOperationCount; // +0x198
LARGE_INTEGER WriteOperationCount; // +0x1a0
LARGE_INTEGER OtherOperationCount; // +0x1a8
LARGE_INTEGER ReadTransferCount; // +0x1b0
LARGE_INTEGER WriteTransferCount; // +0x1b8
LARGE_INTEGER OtherTransferCount; // +0x1c0
// ULONG CommitChargeLimit; // +0x1c8
// ULONG CommitChargePeak; // +0x1cc
PVOID AweInfo; // +0x1d0
SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo; // +0x1d4
MMSUPPORT Vm; // +0x1d8
LIST_ENTRY MmProcessLinks; // +0x238
ULONG ModifiedPageCount; // +0x240
ULONG JobStatus; // +0x244
union {
ULONG Flags; // 0x248
struct {
ULONG CreateReported : 1;
ULONG NoDebugInherit : 1;
ULONG ProcessExiting : 1;
ULONG ProcessDelete : 1;
ULONG Wow64SplitPages : 1;
ULONG VmDeleted : 1;
ULONG OutswapEnabled : 1;
ULONG Outswapped : 1;
ULONG ForkFailed : 1;
ULONG Wow64VaSpace4Gb : 1;
ULONG AddressSpaceInitialized : 2;
ULONG SetTimerResolution : 1;
ULONG BreakOnTermination : 1;
ULONG SessionCreationUnderway : 1;
ULONG WriteWatch : 1;
ULONG ProcessInSession : 1;
ULONG OverrideAddressSpace : 1;
ULONG HasAddressSpace : 1;
ULONG LaunchPrefetched : 1;
ULONG InjectInpageErrors : 1;
ULONG VmTopDown : 1;
ULONG ImageNotifyDone : 1;
ULONG PdeUpdateNeeded : 1;
ULONG VdmAllowed : 1;
ULONG Unused : 7;
};
};
NTSTATUS ExitStatus; // +0x24c
USHORT NextPageColor; // +0x250
union {
struct {
UCHAR SubSystemMinorVersion; // +0x252
UCHAR SubSystemMajorVersion; // +0x253
};
USHORT SubSystemVersion; // +0x252
};
UCHAR PriorityClass; // +0x254
MM_AVL_TABLE VadRoot; // +0x258
ULONG Cookie;