/** * 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 */ #ifndef __XTDK_PSTYPES_H #define __XTDK_PSTYPES_H #include #include #include #include #include #include /* 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 GlobalFlag; LARGE_INTEGER CriticalSectionTimeout; ULONG_PTR HeapSegmentReserve; ULONG_PTR HeapSegmentCommit; ULONG_PTR HeapDeCommitTotalFreeThreshold; ULONG_PTR HeapDeCommitFreeBlockThreshold; ULONG NumberOfHeaps; ULONG MaximumNumberOfHeaps; PVOID *ProcessHeaps; PVOID ProcessStarterHelper; 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; /* Kernel's representation of a thread environment block */ typedef struct _TEB { THREAD_INFORMATION_BLOCK ThreadInformationBlock; PVOID EnvironmentPointer; CLIENT_ID ClientId; PVOID ActiveRpcHandle; PVOID ThreadLocalStoragePointer; PPEB ProcessEnvironmentBlock; ULONG LastErrorValue; ULONG CountOfOwnedCriticalSections; ULONG UserReserved[5]; LCID CurrentLocale; ULONG FpSoftwareStatusRegister; PVOID SystemReserved1[54]; LONG ExceptionCode; PACTIVATION_CONTEXT_STACK ActivationContextStackPointer; CLIENT_ID RealClientId; ULONG LastStatusValue; UNICODE_STRING StaticUnicodeString; WCHAR StaticUnicodeBuffer[261]; PVOID DeallocationStack; PVOID TlsSlots[64]; LIST_ENTRY TlsLinks; PVOID ReservedForNtRpc; PVOID DbgSsReserved[2]; ULONG HardErrorMode; PVOID Instrumentation[14]; PVOID SubProcessTag; PVOID EtwTraceData; PVOID WinSockData; BOOLEAN InDbgPrint; BOOLEAN FreeStackOnTermination; BOOLEAN HasFiberData; UCHAR IdealProcessor; ULONG GuaranteedStackBytes; PVOID ReservedForPerf; PVOID ReservedForOle; ULONG WaitingOnLoaderLock; ULONG_PTR SparePointer1; ULONG_PTR SoftPatchPtr1; ULONG_PTR SoftPatchPtr2; PVOID *TlsExpansionSlots; ULONG ImpersonationLocale; ULONG IsImpersonating; PVOID NlsCache; PVOID ShimData; ULONG HeapVirtualAffinity; HANDLE CurrentTransactionHandle; PTEB_ACTIVE_FRAME ActiveFrame; PVOID FlsData; BOOLEAN SafeThunkCall; BOOLEAN BooleanSpare[3]; } TEB, *PTEB; /* Thread Environment Block Active Frame structure definition */ typedef struct _TEB_ACTIVE_FRAME { ULONG Flags; PTEB_ACTIVE_FRAME Previous; PTEB_ACTIVE_FRAME_CONTEXT Context; } TEB_ACTIVE_FRAME, *PTEB_ACTIVE_FRAME; /* Thread Environment Block Active Frame Context structure definition */ typedef struct _TEB_ACTIVE_FRAME_CONTEXT { ULONG Flags; LPSTR FrameName; } TEB_ACTIVE_FRAME_CONTEXT, *PTEB_ACTIVE_FRAME_CONTEXT; #endif /* __XTOS_ASSEMBLER__ */ #endif /* __XTDK_PSTYPES_H */