- Add RtlSetProcessCritical
[reactos.git] / reactos / include / ndk / pstypes.h
index 28e5f3c..d5cb503 100644 (file)
 
 /* DEPENDENCIES **************************************************************/
 #include "ldrtypes.h"
-#include "rtltypes.h"
+#include "mmtypes.h"
+#include "obtypes.h"
+//#include "extypes.h"
+#ifndef NTOS_MODE_USER
+#include "setypes.h"
+#endif
 
 /* EXPORTED DATA *************************************************************/
 
-extern NTOSAPI struct _EPROCESS* PsInitialSystemProcess;
-extern NTOSAPI POBJECT_TYPE PsProcessType;
-extern NTOSAPI POBJECT_TYPE PsThreadType;
+#ifndef NTOS_MODE_USER
+extern NTSYSAPI struct _EPROCESS* PsInitialSystemProcess;
+extern NTSYSAPI POBJECT_TYPE PsProcessType;
+#endif
 
 /* CONSTANTS *****************************************************************/
 
 /* These are not exposed to drivers normally */
-#ifndef _NTOS_MODE_USER
-    #define JOB_OBJECT_ASSIGN_PROCESS    (1)
-    #define JOB_OBJECT_SET_ATTRIBUTES    (2)
-    #define JOB_OBJECT_QUERY    (4)
-    #define JOB_OBJECT_TERMINATE    (8)
-    #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES    (16)
-    #define JOB_OBJECT_ALL_ACCESS    (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|31)
+#ifndef NTOS_MODE_USER
+    #define JOB_OBJECT_ASSIGN_PROCESS           1
+    #define JOB_OBJECT_SET_ATTRIBUTES           2
+    #define JOB_OBJECT_QUERY                    4
+    #define JOB_OBJECT_TERMINATE                8
+    #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES  16
+    #define JOB_OBJECT_ALL_ACCESS               (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|31)
 #endif
 
-/* FIXME: This was changed in XP... Ask ThomasW about it */
-#define PROCESS_SET_PORT 0x800
-
-#define THREAD_ALERT 0x4
-
 #define USER_SHARED_DATA (0x7FFE0000)
 
+#ifdef NTOS_MODE_USER
+/* Macros for current Process/Thread built-in 'special' ID */
+#define NtCurrentProcess()                      ((HANDLE)(LONG_PTR)-1)
+#define ZwCurrentProcess()                      NtCurrentProcess()
+#define NtCurrentThread()                       ((HANDLE)(LONG_PTR)-2)
+#define ZwCurrentThread()                       NtCurrentThread()
+#endif
+
 /* Process priority classes */
-#define PROCESS_PRIORITY_CLASS_HIGH    (4) /* FIXME */
-#define PROCESS_PRIORITY_CLASS_IDLE    (0) /* FIXME */
-#define PROCESS_PRIORITY_CLASS_NORMAL  (2) /* FIXME */
-#define PROCESS_PRIORITY_CLASS_REALTIME        (5) /* FIXME */
-#define PROCESS_PRIORITY_CLASS_BELOW_NORMAL (1) /* FIXME */
-#define PROCESS_PRIORITY_CLASS_ABOVE_NORMAL (3) /* FIXME */
+#define PROCESS_PRIORITY_CLASS_INVALID          0
+#define PROCESS_PRIORITY_CLASS_IDLE             1
+#define PROCESS_PRIORITY_CLASS_NORMAL           2
+#define PROCESS_PRIORITY_CLASS_HIGH             3
+#define PROCESS_PRIORITY_CLASS_REALTIME         4
+#define PROCESS_PRIORITY_CLASS_BELOW_NORMAL     5
+#define PROCESS_PRIORITY_CLASS_ABOVE_NORMAL     6
+
+/* Process base priorities */
+#define PROCESS_PRIORITY_IDLE                   3
+#define PROCESS_PRIORITY_NORMAL                 8
+#define PROCESS_PRIORITY_NORMAL_FOREGROUND      9
 
 /* Global Flags */
 #define FLG_STOP_ON_EXCEPTION          0x00000001
@@ -77,30 +92,133 @@ extern NTOSAPI POBJECT_TYPE PsThreadType;
 
 /* ENUMERATIONS **************************************************************/
 
+#ifdef NTOS_MODE_USER
+typedef enum _PROCESSINFOCLASS
+{
+    ProcessBasicInformation,
+    ProcessQuotaLimits,
+    ProcessIoCounters,
+    ProcessVmCounters,
+    ProcessTimes,
+    ProcessBasePriority,
+    ProcessRaisePriority,
+    ProcessDebugPort,
+    ProcessExceptionPort,
+    ProcessAccessToken,
+    ProcessLdtInformation,
+    ProcessLdtSize,
+    ProcessDefaultHardErrorMode,
+    ProcessIoPortHandlers,
+    ProcessPooledUsageAndLimits,
+    ProcessWorkingSetWatch,
+    ProcessUserModeIOPL,
+    ProcessEnableAlignmentFaultFixup,
+    ProcessPriorityClass,
+    ProcessWx86Information,
+    ProcessHandleCount,
+    ProcessAffinityMask,
+    ProcessPriorityBoost,
+    ProcessDeviceMap,
+    ProcessSessionInformation,
+    ProcessForegroundInformation,
+    ProcessWow64Information,
+    ProcessImageFileName,
+    ProcessLUIDDeviceMapsEnabled,
+    ProcessBreakOnTermination,
+    ProcessDebugObjectHandle,
+    ProcessDebugFlags,
+    ProcessHandleTracing,
+    ProcessIoPriority,
+    ProcessExecuteFlags,
+    ProcessTlsInformation,
+    ProcessCookie,
+    ProcessImageInformation,
+    ProcessCycleTime,
+    ProcessPagePriority,
+    ProcessInstrumentationCallback,
+    MaxProcessInfoClass
+} PROCESSINFOCLASS;
+
+typedef enum _THREADINFOCLASS
+{
+    ThreadBasicInformation,
+    ThreadTimes,
+    ThreadPriority,
+    ThreadBasePriority,
+    ThreadAffinityMask,
+    ThreadImpersonationToken,
+    ThreadDescriptorTableEntry,
+    ThreadEnableAlignmentFaultFixup,
+    ThreadEventPair_Reusable,
+    ThreadQuerySetWin32StartAddress,
+    ThreadZeroTlsCell,
+    ThreadPerformanceCount,
+    ThreadAmILastThread,
+    ThreadIdealProcessor,
+    ThreadPriorityBoost,
+    ThreadSetTlsArrayAddress,
+    ThreadIsIoPending,
+    ThreadHideFromDebugger,
+    ThreadBreakOnTermination,
+    ThreadSwitchLegacyState,
+    ThreadIsTerminated,
+    ThreadLastSystemCall,
+    ThreadIoPriority,
+    ThreadCycleTime,
+    ThreadPagePriority,
+    ThreadActualBasePriority,
+    MaxThreadInfoClass
+} THREADINFOCLASS;
+#endif
+
+#ifndef NTOS_MODE_USER
+typedef enum _JOBOBJECTINFOCLASS
+{
+    JobObjectBasicAccountingInformation = 1,
+    JobObjectBasicLimitInformation,
+    JobObjectBasicProcessIdList,
+    JobObjectBasicUIRestrictions,
+    JobObjectSecurityLimitInformation,
+    JobObjectEndOfJobTimeInformation,
+    JobObjectAssociateCompletionPortInformation,
+    JobObjectBasicAndIoAccountingInformation,
+    JobObjectExtendedLimitInformation,
+    JobObjectJobSetInformation,
+    MaxJobObjectInfoClass
+} JOBOBJECTINFOCLASS;
+#endif
+
 /* FUNCTION TYPES ************************************************************/
-typedef VOID (STDCALL *PPEBLOCKROUTINE)(PVOID);
+typedef VOID (NTAPI *PPEBLOCKROUTINE)(PVOID);
 
-typedef NTSTATUS 
-(STDCALL *PW32_PROCESS_CALLBACK)(
+#ifndef NTOS_MODE_USER
+typedef NTSTATUS
+(NTAPI *PW32_PROCESS_CALLBACK)(
     struct _EPROCESS *Process,
     BOOLEAN Create
 );
 
 typedef NTSTATUS
-(STDCALL *PW32_THREAD_CALLBACK)(
+(NTAPI *PW32_THREAD_CALLBACK)(
     struct _ETHREAD *Thread,
     BOOLEAN Create
 );
+#endif
 
 /* TYPES *********************************************************************/
 
+struct _W32THREAD;
+struct _W32PROCESS;
+
 struct _ETHREAD;
 
-typedef struct _CURDIR 
+#ifdef NTOS_MODE_USER
+typedef struct _CLIENT_ID
 {
-    UNICODE_STRING DosPath;
-    PVOID Handle;
-} CURDIR, *PCURDIR;
+    HANDLE UniqueProcess;
+    HANDLE UniqueThread;
+} CLIENT_ID, *PCLIENT_ID;
+#endif
 
 typedef struct _DESCRIPTOR_TABLE_ENTRY
 {
@@ -108,7 +226,7 @@ typedef struct _DESCRIPTOR_TABLE_ENTRY
     LDT_ENTRY Descriptor;
 } DESCRIPTOR_TABLE_ENTRY, *PDESCRIPTOR_TABLE_ENTRY;
 
-typedef struct _PEB_FREE_BLOCK 
+typedef struct _PEB_FREE_BLOCK
 {
     struct _PEB_FREE_BLOCK* Next;
     ULONG Size;
@@ -123,7 +241,7 @@ typedef struct _PEB
     HANDLE Mutant;                                   /* 04h */
     PVOID ImageBaseAddress;                          /* 08h */
     PPEB_LDR_DATA Ldr;                               /* 0Ch */
-    PRTL_USER_PROCESS_PARAMETERS ProcessParameters;  /* 10h */
+    struct _RTL_USER_PROCESS_PARAMETERS *ProcessParameters;  /* 10h */
     PVOID SubSystemData;                             /* 14h */
     PVOID ProcessHeap;                               /* 18h */
     PVOID FastPebLock;                               /* 1Ch */
@@ -168,14 +286,14 @@ typedef struct _PEB
     ULONG ImageProcessAffinityMask;                  /* C0h */
     ULONG GdiHandleBuffer[0x22];                     /* C4h */
     PVOID PostProcessInitRoutine;                    /* 14Ch */
-    PVOID *TlsExpansionBitmap;                       /* 150h */
+    struct _RTL_BITMAP *TlsExpansionBitmap;          /* 150h */
     ULONG TlsExpansionBitmapBits[0x20];              /* 154h */
     ULONG SessionId;                                 /* 1D4h */
     PVOID AppCompatInfo;                             /* 1D8h */
     UNICODE_STRING CSDVersion;                       /* 1DCh */
-} PEB;
+} PEB, *PPEB;
 
-typedef struct _GDI_TEB_BATCH 
+typedef struct _GDI_TEB_BATCH
 {
     ULONG Offset;
     ULONG HDC;
@@ -184,90 +302,176 @@ typedef struct _GDI_TEB_BATCH
 
 typedef struct _INITIAL_TEB
 {
-  PVOID StackBase;
-  PVOID StackLimit;
-  PVOID StackCommit;
-  PVOID StackCommitMax;
-  PVOID StackReserved;
+    PVOID PreviousStackBase;
+    PVOID PreviousStackLimit;
+    PVOID StackBase;
+    PVOID StackLimit;
+    PVOID AllocatedStackBase;
 } INITIAL_TEB, *PINITIAL_TEB;
 
-typedef struct _TEB 
+typedef struct _TEB_ACTIVE_FRAME_CONTEXT 
+{
+    ULONG Flags;
+    LPSTR FrameName;
+} TEB_ACTIVE_FRAME_CONTEXT, *PTEB_ACTIVE_FRAME_CONTEXT;
+
+typedef struct _TEB_ACTIVE_FRAME
+{
+    ULONG Flags;
+    struct _TEB_ACTIVE_FRAME *Previous;
+    PTEB_ACTIVE_FRAME_CONTEXT Context;
+} TEB_ACTIVE_FRAME, *PTEB_ACTIVE_FRAME;
+
+typedef struct _TEB
 {
-    NT_TIB Tib;                         /* 00h */
-    PVOID EnvironmentPointer;           /* 1Ch */
-    CLIENT_ID Cid;                      /* 20h */
-    PVOID ActiveRpcInfo;                /* 28h */
-    PVOID ThreadLocalStoragePointer;    /* 2Ch */
-    struct _PEB *Peb;                   /* 30h */
-    ULONG LastErrorValue;               /* 34h */
-    ULONG CountOfOwnedCriticalSections; /* 38h */
-    PVOID CsrClientThread;              /* 3Ch */
-    struct _W32THREAD* Win32ThreadInfo; /* 40h */
-    ULONG Win32ClientInfo[0x1F];        /* 44h */
-    PVOID WOW32Reserved;                /* C0h */
-    LCID CurrentLocale;                 /* C4h */
-    ULONG FpSoftwareStatusRegister;     /* C8h */
-    PVOID SystemReserved1[0x36];        /* CCh */
-    PVOID Spare1;                       /* 1A4h */
-    LONG ExceptionCode;                 /* 1A8h */
-    UCHAR SpareBytes1[0x28];            /* 1ACh */
-    PVOID SystemReserved2[0xA];         /* 1D4h */
-    GDI_TEB_BATCH GdiTebBatch;          /* 1FCh */
-    ULONG gdiRgn;                       /* 6DCh */
-    ULONG gdiPen;                       /* 6E0h */
-    ULONG gdiBrush;                     /* 6E4h */
-    CLIENT_ID RealClientId;             /* 6E8h */
-    PVOID GdiCachedProcessHandle;       /* 6F0h */
-    ULONG GdiClientPID;                 /* 6F4h */
-    ULONG GdiClientTID;                 /* 6F8h */
-    PVOID GdiThreadLocaleInfo;          /* 6FCh */
-    PVOID UserReserved[5];              /* 700h */
-    PVOID glDispatchTable[0x118];       /* 714h */
-    ULONG glReserved1[0x1A];            /* B74h */
-    PVOID glReserved2;                  /* BDCh */
-    PVOID glSectionInfo;                /* BE0h */
-    PVOID glSection;                    /* BE4h */
-    PVOID glTable;                      /* BE8h */
-    PVOID glCurrentRC;                  /* BECh */
-    PVOID glContext;                    /* BF0h */
-    NTSTATUS LastStatusValue;           /* BF4h */
-    UNICODE_STRING StaticUnicodeString; /* BF8h */
-    WCHAR StaticUnicodeBuffer[0x105];   /* C00h */
-    PVOID DeallocationStack;            /* E0Ch */
-    PVOID TlsSlots[0x40];               /* E10h */
-    LIST_ENTRY TlsLinks;                /* F10h */
-    PVOID Vdm;                          /* F18h */
-    PVOID ReservedForNtRpc;             /* F1Ch */
-    PVOID DbgSsReserved[0x2];           /* F20h */
-    ULONG HardErrorDisabled;            /* F28h */
-    PVOID Instrumentation[0x10];        /* F2Ch */
-    PVOID WinSockData;                  /* F6Ch */
-    ULONG GdiBatchCount;                /* F70h */
-    USHORT _Spare2;                     /* F74h */
-    BOOLEAN IsFiber;                    /* F76h */
-    UCHAR Spare3;                       /* F77h */
-    ULONG _Spare4;                      /* F78h */
-    ULONG _Spare5;                      /* F7Ch */
-    PVOID ReservedForOle;               /* F80h */
-    ULONG WaitingOnLoaderLock;          /* F84h */
-    ULONG _Unknown[11];                 /* F88h */
-    PVOID FlsSlots;                     /* FB4h */
-    PVOID WineDebugInfo;                /* Needed for WINE DLL's  */
+    NT_TIB Tib;                             /* 00h */
+    PVOID EnvironmentPointer;               /* 1Ch */
+    CLIENT_ID Cid;                          /* 20h */
+    PVOID ActiveRpcHandle;                  /* 28h */
+    PVOID ThreadLocalStoragePointer;        /* 2Ch */
+    struct _PEB *ProcessEnvironmentBlock;   /* 30h */
+    ULONG LastErrorValue;                   /* 34h */
+    ULONG CountOfOwnedCriticalSections;     /* 38h */
+    PVOID CsrClientThread;                  /* 3Ch */
+    struct _W32THREAD* Win32ThreadInfo;     /* 40h */
+    ULONG User32Reserved[0x1A];             /* 44h */
+    ULONG UserReserved[5];                  /* ACh */
+    PVOID WOW32Reserved;                    /* C0h */
+    LCID CurrentLocale;                     /* C4h */
+    ULONG FpSoftwareStatusRegister;         /* C8h */
+    PVOID SystemReserved1[0x36];            /* CCh */
+    LONG ExceptionCode;                     /* 1A4h */
+    struct _ACTIVATION_CONTEXT_STACK *ActivationContextStackPointer; /* 1A8h */
+    UCHAR SpareBytes1[0x28];                /* 1ACh */
+    GDI_TEB_BATCH GdiTebBatch;              /* 1D4h */
+    CLIENT_ID RealClientId;                 /* 6B4h */
+    PVOID GdiCachedProcessHandle;           /* 6BCh */
+    ULONG GdiClientPID;                     /* 6C0h */
+    ULONG GdiClientTID;                     /* 6C4h */
+    PVOID GdiThreadLocalInfo;               /* 6C8h */
+    ULONG Win32ClientInfo[62];              /* 6CCh */
+    PVOID glDispatchTable[0xE9];            /* 7C4h */
+    ULONG glReserved1[0x1D];                /* B68h */
+    PVOID glReserved2;                      /* BDCh */
+    PVOID glSectionInfo;                    /* BE0h */
+    PVOID glSection;                        /* BE4h */
+    PVOID glTable;                          /* BE8h */
+    PVOID glCurrentRC;                      /* BECh */
+    PVOID glContext;                        /* BF0h */
+    NTSTATUS LastStatusValue;               /* BF4h */
+    UNICODE_STRING StaticUnicodeString;     /* BF8h */
+    WCHAR StaticUnicodeBuffer[0x105];       /* C00h */
+    PVOID DeallocationStack;                /* E0Ch */
+    PVOID TlsSlots[0x40];                   /* E10h */
+    LIST_ENTRY TlsLinks;                    /* F10h */
+    PVOID Vdm;                              /* F18h */
+    PVOID ReservedForNtRpc;                 /* F1Ch */
+    PVOID DbgSsReserved[0x2];               /* F20h */
+    ULONG HardErrorDisabled;                /* F28h */
+    PVOID Instrumentation[14];              /* F2Ch */
+    PVOID SubProcessTag;                    /* F64h */
+    PVOID EtwTraceData;                     /* F68h */
+    PVOID WinSockData;                      /* F6Ch */
+    ULONG GdiBatchCount;                    /* F70h */
+    BOOLEAN InDbgPrint;                     /* F74h */
+    BOOLEAN FreeStackOnTermination;         /* F75h */
+    BOOLEAN HasFiberData;                   /* F76h */
+    UCHAR IdealProcessor;                   /* F77h */
+    ULONG GuaranteedStackBytes;             /* F78h */
+    PVOID ReservedForPerf;                  /* F7Ch */
+    PVOID ReservedForOle;                   /* F80h */
+    ULONG WaitingOnLoaderLock;              /* F84h */
+    ULONG SparePointer1;                    /* F88h */
+    ULONG SoftPatchPtr1;                    /* F8Ch */
+    ULONG SoftPatchPtr2;                    /* F90h */
+    PVOID *TlsExpansionSlots;               /* F94h */
+    ULONG ImpersionationLocale;             /* F98h */
+    ULONG IsImpersonating;                  /* F9Ch */
+    PVOID NlsCache;                         /* FA0h */
+    PVOID pShimData;                        /* FA4h */
+    ULONG HeapVirualAffinity;               /* FA8h */
+    PVOID CurrentTransactionHandle;         /* FACh */
+    PTEB_ACTIVE_FRAME ActiveFrame;          /* FB0h */
+    PVOID FlsData;                          /* FB4h */
+    UCHAR SafeThunkCall;                    /* FB8h */
+    UCHAR BooleanSpare[3];                  /* FB9h */
 } TEB, *PTEB;
 
-/* KERNEL MODE ONLY **********************************************************/
-#ifndef NTOS_MODE_USER
+#ifdef NTOS_MODE_USER
+typedef struct _PROCESS_BASIC_INFORMATION
+{
+    NTSTATUS ExitStatus;
+    PPEB PebBaseAddress;
+    ULONG_PTR AffinityMask;
+    KPRIORITY BasePriority;
+    ULONG_PTR UniqueProcessId;
+    ULONG_PTR InheritedFromUniqueProcessId;
+} PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
+
+typedef struct _PROCESS_ACCESS_TOKEN
+{
+    HANDLE Token;
+    HANDLE Thread;
+} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
 
-#include "mmtypes.h"
-#include "extypes.h"
-#include "setypes.h"
+typedef struct _PROCESS_DEVICEMAP_INFORMATION
+{
+    union
+    {
+        struct
+        {
+            HANDLE DirectoryHandle;
+        } Set;
+        struct
+        {
+            ULONG DriveMap;
+            UCHAR DriveType[32];
+        } Query;
+    };
+} PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
+
+typedef struct _KERNEL_USER_TIMES
+{
+    LARGE_INTEGER CreateTime;
+    LARGE_INTEGER ExitTime;
+    LARGE_INTEGER KernelTime;
+    LARGE_INTEGER UserTime;
+} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
+
+typedef struct _PROCESS_SESSION_INFORMATION
+{
+    ULONG SessionId;
+} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
+#endif
+
+typedef struct _PROCESS_PRIORITY_CLASS
+{
+    BOOLEAN Foreground;
+    UCHAR   PriorityClass;
+} PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;
+
+typedef struct _THREAD_BASIC_INFORMATION
+{
+    NTSTATUS ExitStatus;
+    PVOID TebBaseAddress;
+    CLIENT_ID ClientId;
+    KAFFINITY AffinityMask;
+    KPRIORITY Priority;
+    KPRIORITY BasePriority;
+} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
+
+#ifndef NTOS_MODE_USER
+/* FIXME: see note in mmtypes.h */
+#ifdef _NTOSKRNL_
+#include <internal/mm.h>
+#endif
 
 typedef struct _EPROCESS_QUOTA_ENTRY
 {
-    ULONG Usage;
-    ULONG Limit;
-    ULONG Peak;
-    ULONG Return;
+    SIZE_T Usage;
+    SIZE_T Limit;
+    SIZE_T Peak;
+    SIZE_T Return;
 } EPROCESS_QUOTA_ENTRY, *PEPROCESS_QUOTA_ENTRY;
 
 typedef struct _EPROCESS_QUOTA_BLOCK
@@ -295,29 +499,31 @@ typedef struct _PS_IMPERSONATION_INFORMATION
     SECURITY_IMPERSONATION_LEVEL    ImpersonationLevel;
 } PS_IMPERSONATION_INFORMATION, *PPS_IMPERSONATION_INFORMATION;
 
+typedef struct _TERMINATION_PORT
+{
+    struct _TERMINATION_PORT *Next;
+    PVOID Port;
+} TERMINATION_PORT, *PTERMINATION_PORT;
+
 #include <pshpack4.h>
-/*
- * NAME:           ETHREAD
- * DESCRIPTION:    Internal Executive Thread Structure.
- * PORTABILITY:    Architecture Independent.
- * KERNEL VERSION: 5.2
- * DOCUMENTATION:  http://reactos.com/wiki/index.php/ETHREAD
- */
 typedef struct _ETHREAD
 {
     KTHREAD                        Tcb;                         /* 1C0 */
     LARGE_INTEGER                  CreateTime;                  /* 1C0 */
     LARGE_INTEGER                  ExitTime;                    /* 1C0 */
-    union {
+    union
+    {
         LIST_ENTRY                 LpcReplyChain;               /* 1C0 */
         LIST_ENTRY                 KeyedWaitChain;              /* 1C0 */
     };
-    union {
+    union
+    {
         NTSTATUS                   ExitStatus;                  /* 1C8 */
         PVOID                      OfsChain;                    /* 1C8 */
     };
     LIST_ENTRY                     PostBlockList;               /* 1CC */
-    union {
+    union
+    {
         struct _TERMINATION_PORT   *TerminationPort;            /* 1D4 */
         struct _ETHREAD            *ReaperLink;                 /* 1D4 */
         PVOID                      KeyedWaitValue;              /* 1D4 */
@@ -325,11 +531,13 @@ typedef struct _ETHREAD
     KSPIN_LOCK                     ActiveTimerListLock;         /* 1D8 */
     LIST_ENTRY                     ActiveTimerListHead;         /* 1D8 */
     CLIENT_ID                      Cid;                         /* 1E0 */
-    union {
+    union
+    {
         KSEMAPHORE                 LpcReplySemaphore;           /* 1E4 */
         KSEMAPHORE                 KeyedReplySemaphore;         /* 1E4 */
     };
-    union {
+    union
+    {
         PVOID                      LpcReplyMessage;             /* 200 */
         PVOID                      LpcWaitingOnPort;            /* 200 */
     };
@@ -339,8 +547,9 @@ typedef struct _ETHREAD
     PDEVICE_OBJECT                 DeviceToVerify;              /* 214 */
     struct _EPROCESS               *ThreadsProcess;             /* 218 */
     PKSTART_ROUTINE                StartAddress;                /* 21C */
-    union {
-        PTHREAD_START_ROUTINE      Win32StartAddress;           /* 220 */
+    union
+    {
+        PVOID                      Win32StartAddress;           /* 220 */
         ULONG                      LpcReceivedMessageId;        /* 220 */
     };
     LIST_ENTRY                     ThreadListEntry;             /* 224 */
@@ -349,8 +558,10 @@ typedef struct _ETHREAD
     ULONG                          LpcReplyMessageId;           /* 234 */
     ULONG                          ReadClusterSize;             /* 238 */
     ACCESS_MASK                    GrantedAccess;               /* 23C */
-    union {
-        struct {
+    union
+    {
+        struct
+        {
            ULONG                   Terminated:1;
            ULONG                   DeadThread:1;
            ULONG                   HideFromDebugger:1;
@@ -363,8 +574,10 @@ typedef struct _ETHREAD
         };
         ULONG                      CrossThreadFlags;            /* 240 */
     };
-    union {
-        struct {
+    union
+    {
+        struct
+        {
            ULONG                   ActiveExWorker:1;
            ULONG                   ExWorkerCanWaitUser:1;
            ULONG                   MemoryMaker:1;
@@ -372,8 +585,10 @@ typedef struct _ETHREAD
         };
         ULONG                      SameThreadPassiveFlags;      /* 244 */
     };
-    union {
-        struct {
+    union
+    {
+        struct
+        {
            ULONG                   LpcReceivedMsgIdValid:1;
            ULONG                   LpcExitThreadCalled:1;
            ULONG                   AddressSpaceOwner:1;
@@ -392,13 +607,6 @@ typedef struct _ETHREAD
     UCHAR                          ActiveFaultCount;            /* 24E */
 } ETHREAD;
 
-/*
- * NAME:           EPROCESS
- * DESCRIPTION:    Internal Executive Process Structure.
- * PORTABILITY:    Architecture Independent.
- * KERNEL VERSION: 5.2
- * DOCUMENTATION:  http://reactos.com/wiki/index.php/EPROCESS
- */
 typedef struct _EPROCESS
 {
     KPROCESS              Pcb;                          /* 000 */
@@ -440,7 +648,8 @@ typedef struct _EPROCESS
     PVOID                 VdmObjects;                   /* 144 */
     PVOID                 DeviceMap;                    /* 148 */
     PVOID                 Spare0[3];                    /* 14C */
-    union {
+    union
+    {
         HARDWARE_PTE_X86  PagedirectoryPte;             /* 158 */
         ULONGLONG         Filler;                       /* 158 */
     };
@@ -471,8 +680,10 @@ typedef struct _EPROCESS
     LIST_ENTRY            MmProcessLinks;               /* 230 */
     ULONG                 ModifiedPageCount;            /* 238 */
     ULONG                 JobStatus;                    /* 23C */
-    union {
-        struct {
+    union
+    {
+        struct
+        {
             ULONG         CreateReported:1;
             ULONG         NoDebugInherit:1;
             ULONG         ProcessExiting:1;
@@ -508,8 +719,10 @@ typedef struct _EPROCESS
 
     NTSTATUS              ExitStatus;                   /* 244 */
     USHORT                NextPageColor;                /* 248 */
-    union {
-        struct {
+    union
+    {
+        struct
+        {
             UCHAR         SubSystemMinorVersion;        /* 24A */
             UCHAR         SubSystemMajorVersion;        /* 24B */
         };
@@ -535,15 +748,15 @@ typedef struct _EPROCESS
 #include <pshpack1.h>
 typedef struct _PS_JOB_TOKEN_FILTER
 {
-    UINT CapturedSidCount;
+    ULONG CapturedSidCount;
     PSID_AND_ATTRIBUTES CapturedSids;
-    UINT CapturedSidsLength;
-    UINT CapturedGroupCount;
+    ULONG CapturedSidsLength;
+    ULONG CapturedGroupCount;
     PSID_AND_ATTRIBUTES CapturedGroups;
-    UINT CapturedGroupsLength;
-    UINT CapturedPrivilegeCount;
+    ULONG CapturedGroupsLength;
+    ULONG CapturedPrivilegeCount;
     PLUID_AND_ATTRIBUTES CapturedPrivileges;
-    UINT CapturedPrivilegesLength;
+    ULONG CapturedPrivilegesLength;
 } PS_JOB_TOKEN_FILTER, *PPS_JOB_TOKEN_FILTER;
 
 typedef struct _EJOB
@@ -556,27 +769,27 @@ typedef struct _EJOB
     LARGE_INTEGER TotalKernelTime;
     LARGE_INTEGER ThisPeriodTotalUserTime;
     LARGE_INTEGER ThisPeriodTotalKernelTime;
-    UINT TotalPageFaultCount;
-    UINT TotalProcesses;
-    UINT ActiveProcesses;
-    UINT TotalTerminatedProcesses;
+    ULONG TotalPageFaultCount;
+    ULONG TotalProcesses;
+    ULONG ActiveProcesses;
+    ULONG TotalTerminatedProcesses;
     LARGE_INTEGER PerProcessUserTimeLimit;
     LARGE_INTEGER PerJobUserTimeLimit;
-    UINT LimitFlags;
-    UINT MinimumWorkingSetSize;
-    UINT MaximumWorkingSetSize;
-    UINT ActiveProcessLimit;
-    UINT Affinity;
-    BYTE PriorityClass;
-    UINT UIRestrictionsClass;
-    UINT SecurityLimitFlags;
+    ULONG LimitFlags;
+    ULONG MinimumWorkingSetSize;
+    ULONG MaximumWorkingSetSize;
+    ULONG ActiveProcessLimit;
+    ULONG Affinity;
+    UCHAR PriorityClass;
+    ULONG UIRestrictionsClass;
+    ULONG SecurityLimitFlags;
     PVOID Token;
     PPS_JOB_TOKEN_FILTER Filter;
-    UINT EndOfJobTimeAction;
+    ULONG EndOfJobTimeAction;
     PVOID CompletionPort;
     PVOID CompletionKey;
-    UINT SessionId;
-    UINT SchedulingClass;
+    ULONG SessionId;
+    ULONG SchedulingClass;
     ULONGLONG ReadOperationCount;
     ULONGLONG WriteOperationCount;
     ULONGLONG OtherOperationCount;
@@ -584,17 +797,40 @@ typedef struct _EJOB
     ULONGLONG WriteTransferCount;
     ULONGLONG OtherTransferCount;
     IO_COUNTERS IoInfo;
-    UINT ProcessMemoryLimit;
-    UINT JobMemoryLimit;
-    UINT PeakProcessMemoryUsed;
-    UINT PeakJobMemoryUsed;
-    UINT CurrentJobMemoryUsed;
+    ULONG ProcessMemoryLimit;
+    ULONG JobMemoryLimit;
+    ULONG PeakProcessMemoryUsed;
+    ULONG PeakJobMemoryUsed;
+    ULONG CurrentJobMemoryUsed;
     KGUARDED_MUTEX MemoryLimitsLock;
     ULONG MemberLevel;
     ULONG JobFlags;
 } EJOB, *PEJOB;
 #include <poppack.h>
 
+typedef struct _W32_CALLOUT_DATA
+{
+    PW32_PROCESS_CALLBACK W32ProcessCallout;
+    PW32_THREAD_CALLBACK W32ThreadCallout;
+    PVOID UserGlobalAtomTableCallout;
+    PVOID UserPowerEventCallout;
+    PVOID UserPowerStateCallout;
+    PVOID UserJobCallout;
+    PVOID NtGdiUserFlushUserBatch;
+    OB_OPEN_METHOD DesktopOpen;
+    PVOID DesktopUnmap;
+    OB_DELETE_METHOD DesktopDelete;
+    OB_OKAYTOCLOSE_METHOD WinstaOkayToClose;
+    OB_DELETE_METHOD WinStaDelete;
+    OB_PARSE_METHOD WinStaParse;
+    OB_OPEN_METHOD WinStaOpen;
+    
+    /* FIXME: These are ROS-ONLY and are fixed in a future local patch */
+    OB_FIND_METHOD WinStaFind;
+    OB_OPEN_METHOD WinStaCreate;
+    OB_CREATE_METHOD DesktopCreate;
+} W32_CALLOUT_DATA, *PW32_CALLOUT_DATA;
+
 #endif
 
 #endif