Files
exectos/sdk/xtdk/pstypes.h
Aiken Harris 34620b182a
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 39s
Builds / ExectOS (amd64, debug) (push) Successful in 40s
Builds / ExectOS (i686, release) (push) Successful in 1m8s
Builds / ExectOS (i686, debug) (push) Successful in 1m10s
Introduce working set list types and extend EPROCESS structure
2026-07-14 19:08:01 +02:00

249 lines
8.5 KiB
C

/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: sdk/xtdk/pstypes.h
* DESCRIPTION: Process-related data structure definitions
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
*/
#ifndef __XTDK_PSTYPES_H
#define __XTDK_PSTYPES_H
#include <xttypes.h>
#include <xtstruct.h>
#include <extypes.h>
#include <mmtypes.h>
#include <setypes.h>
/* Quota bypass marker */
#define PS_QUOTA_BYPASS_MARKER ((PEPROCESS_QUOTA_BLOCK)1)
/* Current process & thread handles */
#define PS_CURRENT_PROCESS_HANDLE ((HANDLE)(LONG_PTR)-1)
#define PS_CURRENT_THREAD_HANDLE ((HANDLE)(LONG_PTR)-2)
/* Generic access rights mapping for process */
#define PS_PROCESS_GENERIC_MAPPING {SE_STANDARD_RIGHTS_READ | \
SE_PROCESS_QUERY_INFORMATION | \
SE_PROCESS_VM_READ, \
SE_STANDARD_RIGHTS_WRITE | \
SE_PROCESS_CREATE_PROCESS | \
SE_PROCESS_CREATE_THREAD | \
SE_PROCESS_DUP_HANDLE | \
SE_PROCESS_SET_INFORMATION | \
SE_PROCESS_SET_QUOTA | \
SE_PROCESS_SUSPEND_RESUME | \
SE_PROCESS_TERMINATE | \
SE_PROCESS_VM_OPERATION | \
SE_PROCESS_VM_WRITE, \
SE_STANDARD_RIGHTS_EXECUTE | \
SE_PROCESS_ALL_ACCESS | \
SE_SYNCHRONIZE} \
/* Generic access rights mapping for thread */
#define PS_THREAD_GENERIC_MAPPING {SE_STANDARD_RIGHTS_READ | \
SE_THREAD_GET_CONTEXT | \
SE_THREAD_QUERY_INFORMATION, \
SE_STANDARD_RIGHTS_WRITE | \
SE_THREAD_ALERT | \
SE_THREAD_SET_CONTEXT | \
SE_THREAD_SET_INFORMATION | \
SE_THREAD_SUSPEND_RESUME | \
SE_THREAD_TERMINATE, \
SE_STANDARD_RIGHTS_EXECUTE | \
SE_THREAD_ALL_ACCESS | \
SE_SYNCHRONIZE}
/* C/C++ specific code */
#ifndef __XTOS_ASSEMBLER__
/* Process quota types */
typedef enum _PS_QUOTA_TYPE
{
PsNonPagedPool,
PsPagedPool,
PsPageFile,
PsQuotaTypes
} PS_QUOTA_TYPE, *PPS_QUOTA_TYPE;
/* Kernel's representation of a process object */
typedef struct _EPROCESS
{
KPROCESS ProcessControlBlock;
KPUSH_LOCK ProcessLock;
LARGE_INTEGER CreateTime;
LARGE_INTEGER ExitTime;
EX_RUNDOWN_REFERENCE RundownProtect;
HANDLE UniqueProcessId;
LIST_ENTRY ActiveProcessLinks;
SIZE_T QuotaUsage[PsQuotaTypes];
SIZE_T QuotaPeak[PsQuotaTypes];
PVOID DebugPort;
PVOID ExceptionPort;
PHANDLE_TABLE ObjectTable;
PVOID Job;
PVOID SectionObject;
PVOID SectionBaseAddress;
PEPROCESS_QUOTA_BLOCK QuotaBlock;
HANDLE InheritedFromUniqueProcessId;
CHAR ImageFileName[16];
LIST_ENTRY ThreadListHead;
ACCESS_MASK GrantedAccess;
ULONG DefaultHardErrorProcessing;
PPEB ProcessEnvironmentBlock;
SECURITY_AUDIT_PROCESS_CREATION_INFO AuditProcessCreationInfo;
MMSUPPORT Vm;
union
{
struct
{
ULONG CreateReported:1;
ULONG NoDebugInherit:1;
ULONG ProcessExiting:1;
ULONG ProcessDelete:1;
ULONG Reserved1:1;
ULONG VmDeleted:1;
ULONG OutswapEnabled:1;
ULONG Outswapped:1;
ULONG ForkFailed:1;
ULONG Reserved2:1;
ULONG AddressSpaceInitialized:2;
ULONG SetTimerResolution:1;
ULONG BreakOnTermination:1;
ULONG DeprioritizeViews: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 Reserved3:1;
ULONG SmapAllowed:1;
ULONG ProcessInserted:1;
ULONG DefaultIoPriority:3;
ULONG Reserved4:1;
ULONG Reserved5:1;
};
ULONG Flags;
};
XTSTATUS ExitStatus;
UCHAR PriorityClass;
} EPROCESS, *PEPROCESS;
/* Kernel's representation of a process quota entry*/
typedef struct _EPROCESS_QUOTA_ENTRY
{
SIZE_T Usage;
SIZE_T Limit;
SIZE_T Peak;
SIZE_T Return;
} EPROCESS_QUOTA_ENTRY, *PEPROCESS_QUOTA_ENTRY;
/* Kernel's representation of a process quota block */
typedef struct _EPROCESS_QUOTA_BLOCK
{
EPROCESS_QUOTA_ENTRY QuotaEntry[PsQuotaTypes];
LIST_ENTRY QuotaList;
ULONG ReferenceCount;
ULONG ProcessCount;
} EPROCESS_QUOTA_BLOCK, *PEPROCESS_QUOTA_BLOCK;
/* Kernel's representation of a thread object */
typedef struct _ETHREAD
{
KTHREAD ThreadControlBlock;
ACCESS_MASK GrantedAccess;
} ETHREAD, *PETHREAD;
/* Kernel's representation of a process environment block */
typedef struct _PEB
{
BOOLEAN InheritedAddressSpace;
BOOLEAN ReadImageFileExecOptions;
BOOLEAN BeingDebugged;
union
{
BOOLEAN BitField;
struct
{
BOOLEAN ImageUsesLargePages:1;
BOOLEAN IsProtectedProcess:1;
BOOLEAN IsLegacyProcess:1;
BOOLEAN IsImageDynamicallyRelocated:1;
BOOLEAN SkipPatchingUser32Forwarders:1;
BOOLEAN SpareBits:3;
};
};
HANDLE Mutant;
PVOID ImageBaseAddress;
PLDR_PEB_DATA Ldr;
PVOID SubSystemData;
PVOID ProcessHeap;
PVOID AltThunkSListPtr;
PVOID SparePtr2;
ULONG EnvironmentUpdateCount;
PVOID KernelCallbackTable;
ULONG SystemReserved[1];
ULONG SpareUlong;
PPEB_FREE_BLOCK FreeList;
ULONG TlsExpansionCounter;
PVOID TlsBitmap;
ULONG TlsBitmapBits[2];
PVOID ReadOnlySharedMemoryBase;
PVOID HotpatchInformation;
PVOID* ReadOnlyStaticServerData;
PVOID AnsiCodePageData;
PVOID OemCodePageData;
PVOID UnicodeCaseTableData;
ULONG NumberOfProcessors;
ULONG NtGlobalFlag;
LARGE_INTEGER CriticalSectionTimeout;
ULONG_PTR HeapSegmentReserve;
ULONG_PTR HeapSegmentCommit;
ULONG_PTR HeapDeCommitTotalFreeThreshold;
ULONG_PTR HeapDeCommitFreeBlockThreshold;
ULONG NumberOfHeaps;
ULONG MaximumNumberOfHeaps;
PVOID* ProcessHeaps;
PVOID GdiSharedHandleTable;
PVOID ProcessStarterHelper;
ULONG GdiDCAttributeList;
ULONG OSMajorVersion;
ULONG OSMinorVersion;
USHORT OSBuildNumber;
USHORT OSCSDVersion;
ULONG OSPlatformId;
ULONG ImageSubsystem;
ULONG ImageSubsystemMajorVersion;
ULONG ImageSubsystemMinorVersion;
ULONG_PTR ImageProcessAffinityMask;
PVOID TlsExpansionBitmap;
ULONG TlsExpansionBitmapBits[32];
ULONG SessionId;
ULARGE_INTEGER AppCompatFlags;
ULARGE_INTEGER AppCompatFlagsUser;
PVOID pShimData;
PVOID AppCompatInfo;
UNICODE_STRING CSDVersion;
ULONG_PTR MinimumStackCommit;
PVOID* FlsCallback;
LIST_ENTRY FlsListHead;
PVOID FlsBitmap;
ULONG FlsBitmapBits[4];
ULONG FlsHighIndex;
} PEB, *PPEB;
/* Process Environment Block Free Block structure definition */
typedef struct _PEB_FREE_BLOCK
{
PPEB_FREE_BLOCK Next;
ULONG Size;
} PEB_FREE_BLOCK, *PPEB_FREE_BLOCK;
#endif /* __XTOS_ASSEMBLER__ */
#endif /* __XTDK_PSTYPES_H */