-/*
- * PROJECT: ReactOS Native Headers
- * FILE: include/ndk/pstypes.h
- * PURPOSE: Defintions for Process Manager Types not documented in DDK/IFS.
- * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
- * UPDATE HISTORY:
- * Created 06/10/04
- */
+/*++ NDK Version: 0095
+
+Copyright (c) Alex Ionescu. All rights reserved.
+
+Header Name:
+
+ pstypes.h
+
+Abstract:
+
+ Type definitions for the Process Manager
+
+Author:
+
+ Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
+
+--*/
+
#ifndef _PSTYPES_H
#define _PSTYPES_H
-/* DEPENDENCIES **************************************************************/
-#include "ldrtypes.h"
-#include "rtltypes.h"
+//
+// Dependencies
+//
+#include <umtypes.h>
+#include <ldrtypes.h>
+#include <mmtypes.h>
+#include <obtypes.h>
+#ifndef NTOS_MODE_USER
+#include <extypes.h>
+#include <setypes.h>
+#endif
-/* EXPORTED DATA *************************************************************/
+//
+// KUSER_SHARED_DATA location in User Mode
+//
+#define USER_SHARED_DATA (0x7FFE0000)
-extern NTOSAPI struct _EPROCESS* PsInitialSystemProcess;
-extern NTOSAPI POBJECT_TYPE PsProcessType;
-extern NTOSAPI POBJECT_TYPE PsThreadType;
+//
+// Kernel Exports
+//
+#ifndef NTOS_MODE_USER
-/* CONSTANTS *****************************************************************/
+extern NTSYSAPI struct _EPROCESS* PsInitialSystemProcess;
+extern NTSYSAPI POBJECT_TYPE PsProcessType;
-/* 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)
#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)
-
-/* 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 */
-
-/* Global Flags */
-#define FLG_STOP_ON_EXCEPTION 0x00000001
-#define FLG_SHOW_LDR_SNAPS 0x00000002
-#define FLG_DEBUG_INITIAL_COMMAND 0x00000004
-#define FLG_STOP_ON_HUNG_GUI 0x00000008
-#define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
-#define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
-#define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
-#define FLG_HEAP_VALIDATE_ALL 0x00000080
-#define FLG_POOL_ENABLE_TAIL_CHECK 0x00000100
-#define FLG_POOL_ENABLE_FREE_CHECK 0x00000200
-#define FLG_POOL_ENABLE_TAGGING 0x00000400
-#define FLG_HEAP_ENABLE_TAGGING 0x00000800
-#define FLG_USER_STACK_TRACE_DB 0x00001000
-#define FLG_KERNEL_STACK_TRACE_DB 0x00002000
-#define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
-#define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
-#define FLG_IGNORE_DEBUG_PRIV 0x00010000
-#define FLG_ENABLE_CSRDEBUG 0x00020000
-#define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
-#define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
-#define FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
-#define FLG_HEAP_DISABLE_COALESCING 0x00200000
-#define FLG_ENABLE_CLOSE_EXCEPTIONS 0x00400000
-#define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
-#define FLG_ENABLE_HANDLE_TYPE_TAGGING 0x01000000
-#define FLG_HEAP_PAGE_ALLOCS 0x02000000
-#define FLG_DEBUG_INITIAL_COMMAND_EX 0x04000000
-
-/* ENUMERATIONS **************************************************************/
-
-/* FUNCTION TYPES ************************************************************/
-typedef VOID (STDCALL *PPEBLOCKROUTINE)(PVOID);
-
-typedef NTSTATUS
-(STDCALL *PW32_PROCESS_CALLBACK)(
+//
+// Global Flags
+//
+#define FLG_STOP_ON_EXCEPTION 0x00000001
+#define FLG_SHOW_LDR_SNAPS 0x00000002
+#define FLG_DEBUG_INITIAL_COMMAND 0x00000004
+#define FLG_STOP_ON_HUNG_GUI 0x00000008
+#define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
+#define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
+#define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
+#define FLG_HEAP_VALIDATE_ALL 0x00000080
+#define FLG_POOL_ENABLE_TAIL_CHECK 0x00000100
+#define FLG_POOL_ENABLE_FREE_CHECK 0x00000200
+#define FLG_POOL_ENABLE_TAGGING 0x00000400
+#define FLG_HEAP_ENABLE_TAGGING 0x00000800
+#define FLG_USER_STACK_TRACE_DB 0x00001000
+#define FLG_KERNEL_STACK_TRACE_DB 0x00002000
+#define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
+#define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
+#define FLG_IGNORE_DEBUG_PRIV 0x00010000
+#define FLG_ENABLE_CSRDEBUG 0x00020000
+#define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
+#define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
+#define FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
+#define FLG_HEAP_DISABLE_COALESCING 0x00200000
+#define FLG_ENABLE_CLOSE_EXCEPTIONS 0x00400000
+#define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
+#define FLG_ENABLE_HANDLE_TYPE_TAGGING 0x01000000
+#define FLG_HEAP_PAGE_ALLOCS 0x02000000
+#define FLG_DEBUG_INITIAL_COMMAND_EX 0x04000000
+
+//
+// Process priority classes
+//
+#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
+
+//
+// NtCreateProcessEx flags
+//
+#define PS_REQUEST_BREAKAWAY 1
+#define PS_NO_DEBUG_INHERIT 2
+#define PS_INHERIT_HANDLES 4
+#define PS_UNKNOWN_VALUE 8
+#define PS_ALL_FLAGS (PS_REQUEST_BREAKAWAY | \
+ PS_NO_DEBUG_INHERIT | \
+ PS_INHERIT_HANDLES | \
+ PS_UNKNOWN_VALUE)
+
+//
+// Process base priorities
+//
+#define PROCESS_PRIORITY_IDLE 3
+#define PROCESS_PRIORITY_NORMAL 8
+#define PROCESS_PRIORITY_NORMAL_FOREGROUND 9
+
+//
+// Process Access Types
+//
+#ifndef NTOS_MODE_USER
+#define PROCESS_TERMINATE 0x0001
+#define PROCESS_CREATE_THREAD 0x0002
+#define PROCESS_SET_SESSIONID 0x0004
+#define PROCESS_VM_OPERATION 0x0008
+#define PROCESS_VM_READ 0x0010
+#define PROCESS_VM_WRITE 0x0020
+#define PROCESS_CREATE_PROCESS 0x0080
+#define PROCESS_SET_QUOTA 0x0100
+#define PROCESS_SET_INFORMATION 0x0200
+#define PROCESS_QUERY_INFORMATION 0x0400
+#define PROCESS_SUSPEND_RESUME 0x0800
+#define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
+#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
+
+
+//
+// Job Access Types
+//
+#define JOB_OBJECT_ASSIGN_PROCESS 0x1
+#define JOB_OBJECT_SET_ATTRIBUTES 0x2
+#define JOB_OBJECT_QUERY 0x4
+#define JOB_OBJECT_TERMINATE 0x8
+#define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x10
+#define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 31)
+#endif
+
+#ifdef NTOS_MODE_USER
+//
+// Current Process/Thread built-in 'special' handles
+//
+#define NtCurrentProcess() ((HANDLE)(LONG_PTR)-1)
+#define ZwCurrentProcess() NtCurrentProcess()
+#define NtCurrentThread() ((HANDLE)(LONG_PTR)-2)
+#define ZwCurrentThread() NtCurrentThread()
+
+//
+// Process/Thread/Job Information Classes for NtQueryInformationProcess/Thread/Job
+//
+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;
+
+#else
+
+typedef enum _JOBOBJECTINFOCLASS
+{
+ JobObjectBasicAccountingInformation = 1,
+ JobObjectBasicLimitInformation,
+ JobObjectBasicProcessIdList,
+ JobObjectBasicUIRestrictions,
+ JobObjectSecurityLimitInformation,
+ JobObjectEndOfJobTimeInformation,
+ JobObjectAssociateCompletionPortInformation,
+ JobObjectBasicAndIoAccountingInformation,
+ JobObjectExtendedLimitInformation,
+ JobObjectJobSetInformation,
+ MaxJobObjectInfoClass
+} JOBOBJECTINFOCLASS;
+
+//
+// Declare empty structure definitions so that they may be referenced by
+// routines before they are defined
+//
+struct _W32THREAD;
+struct _W32PROCESS;
+struct _ETHREAD;
+
+//
+// Win32K Process and Thread Callbacks
+//
+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
);
-/* TYPES *********************************************************************/
+#endif
-struct _ETHREAD;
+#ifdef NTOS_MODE_USER
-typedef struct _CURDIR
+//
+// ClientID Structure
+//
+typedef struct _CLIENT_ID
{
- UNICODE_STRING DosPath;
- PVOID Handle;
-} CURDIR, *PCURDIR;
+ HANDLE UniqueProcess;
+ HANDLE UniqueThread;
+} CLIENT_ID, *PCLIENT_ID;
+
+#endif
+//
+// Descriptor Table Entry Definition
+//
+#define _DESCRIPTOR_TABLE_ENTRY_DEFINED
typedef struct _DESCRIPTOR_TABLE_ENTRY
{
ULONG Selector;
LDT_ENTRY Descriptor;
} DESCRIPTOR_TABLE_ENTRY, *PDESCRIPTOR_TABLE_ENTRY;
-typedef struct _PEB_FREE_BLOCK
+//
+// PEB Lock Routine
+//
+typedef VOID
+(NTAPI *PPEBLOCKROUTINE)(
+ PVOID PebLock
+);
+
+//
+// PEB Free Block Descriptor
+//
+typedef struct _PEB_FREE_BLOCK
{
struct _PEB_FREE_BLOCK* Next;
ULONG Size;
} PEB_FREE_BLOCK, *PPEB_FREE_BLOCK;
+//
+// Process Environment Block (PEB)
+//
typedef struct _PEB
{
UCHAR InheritedAddressSpace; /* 00h */
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 */
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
+//
+// GDI Batch Descriptor
+//
+typedef struct _GDI_TEB_BATCH
{
ULONG Offset;
ULONG HDC;
ULONG Buffer[0x136];
} GDI_TEB_BATCH, *PGDI_TEB_BATCH;
+//
+// Initial TEB
+//
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
+//
+// TEB Active Frame Structures
+//
+typedef struct _TEB_ACTIVE_FRAME_CONTEXT
{
- 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 */
+ 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;
+
+//
+// Thread Environment Block (TEB)
+//
+typedef struct _TEB
+{
+ 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
+
+//
+// Process Information Structures for NtQueryProcessInformation
+//
+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;
-/* FIXME: see note in mmtypes.h */
-#ifdef _NTOSKRNL_
-#include <internal/mm.h>
#endif
+typedef struct _PROCESS_PRIORITY_CLASS
+{
+ BOOLEAN Foreground;
+ UCHAR PriorityClass;
+} PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;
+
+//
+// Thread Information Structures for NtQueryProcessInformation
+//
+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
+
+//
+// EPROCESS Quota Structures
+//
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
ULONG ProcessCount;
} EPROCESS_QUOTA_BLOCK, *PEPROCESS_QUOTA_BLOCK;
+//
+// FIXME: This really belongs in mmtypes.h
+//
typedef struct _PAGEFAULT_HISTORY
{
ULONG CurrentIndex;
PROCESS_WS_WATCH_INFORMATION WatchInfo[1];
} PAGEFAULT_HISTORY, *PPAGEFAULT_HISTORY;
+//
+// Process Impersonation Information
+//
typedef struct _PS_IMPERSONATION_INFORMATION
{
- PACCESS_TOKEN Token;
- BOOLEAN CopyOnOpen;
- BOOLEAN EffectiveOnly;
- SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ PACCESS_TOKEN Token;
+ BOOLEAN CopyOnOpen;
+ BOOLEAN EffectiveOnly;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
} PS_IMPERSONATION_INFORMATION, *PPS_IMPERSONATION_INFORMATION;
+//
+// Process Termination Port
+//
+typedef struct _TERMINATION_PORT
+{
+ struct _TERMINATION_PORT *Next;
+ PVOID Port;
+} TERMINATION_PORT, *PTERMINATION_PORT;
+
+//
+// Executive Thread (ETHREAD)
+//
#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 {
+ KTHREAD Tcb; /* 000 */
+ PVOID Padding; /* 1B4 */
+ LARGE_INTEGER CreateTime; /* 1B8 */
+ union
+ {
+ LARGE_INTEGER ExitTime; /* 1C0 */
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 */
};
KSPIN_LOCK ActiveTimerListLock; /* 1D8 */
- LIST_ENTRY ActiveTimerListHead; /* 1D8 */
- CLIENT_ID Cid; /* 1E0 */
- union {
- KSEMAPHORE LpcReplySemaphore; /* 1E4 */
- KSEMAPHORE KeyedReplySemaphore; /* 1E4 */
+ LIST_ENTRY ActiveTimerListHead; /* 1DC */
+ CLIENT_ID Cid; /* 1E4 */
+ union
+ {
+ KSEMAPHORE LpcReplySemaphore; /* 1EC */
+ KSEMAPHORE KeyedReplySemaphore; /* 1EC */
};
- union {
+ union
+ {
PVOID LpcReplyMessage; /* 200 */
PVOID LpcWaitingOnPort; /* 200 */
};
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 */
ULONG LpcReplyMessageId; /* 234 */
ULONG ReadClusterSize; /* 238 */
ACCESS_MASK GrantedAccess; /* 23C */
- union {
- struct {
+ union
+ {
+ struct
+ {
ULONG Terminated:1;
ULONG DeadThread:1;
ULONG HideFromDebugger:1;
};
ULONG CrossThreadFlags; /* 240 */
};
- union {
- struct {
+ union
+ {
+ struct
+ {
ULONG ActiveExWorker:1;
ULONG ExWorkerCanWaitUser:1;
ULONG MemoryMaker:1;
};
ULONG SameThreadPassiveFlags; /* 244 */
};
- union {
- struct {
+ union
+ {
+ struct
+ {
ULONG LpcReceivedMsgIdValid:1;
ULONG LpcExitThreadCalled:1;
ULONG AddressSpaceOwner:1;
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
- */
+#if defined(_NTOSKRNL_)
+ #include <internal/mm.h>
+#endif
+
+//
+// Executive Process (EPROCESS)
+//
typedef struct _EPROCESS
{
KPROCESS Pcb; /* 000 */
PVOID VdmObjects; /* 144 */
PVOID DeviceMap; /* 148 */
PVOID Spare0[3]; /* 14C */
- union {
+ union
+ {
HARDWARE_PTE_X86 PagedirectoryPte; /* 158 */
ULONGLONG Filler; /* 158 */
};
LIST_ENTRY ThreadListHead; /* 184 */
PVOID SecurityPort; /* 188 */
PVOID PaeTop; /* 18C */
- ULONG ActiveThreds; /* 190 */
+ ULONG ActiveThreads; /* 190 */
ACCESS_MASK GrantedAccess; /* 194 */
ULONG DefaultHardErrorProcessing; /* 198 */
NTSTATUS LastThreadExitStatus; /* 19C */
LIST_ENTRY MmProcessLinks; /* 230 */
ULONG ModifiedPageCount; /* 238 */
ULONG JobStatus; /* 23C */
- union {
- struct {
+ union
+ {
+ struct
+ {
ULONG CreateReported:1;
ULONG NoDebugInherit:1;
ULONG ProcessExiting:1;
NTSTATUS ExitStatus; /* 244 */
USHORT NextPageColor; /* 248 */
- union {
- struct {
+ union
+ {
+ struct
+ {
UCHAR SubSystemMinorVersion; /* 24A */
UCHAR SubSystemMajorVersion; /* 24B */
};
MM_AVL_TABLE VadRoot; /* 250 */
ULONG Cookie; /* 270 */
-/***************************************************************
- * REACTOS SPECIFIC START
- ***************************************************************/
- /* FIXME WILL BE DEPRECATED WITH PUSHLOCK SUPPORT IN 0.3.0 */
+#ifdef _REACTOS_
+ /* FIXME: WILL BE DEPRECATED WITH PUSHLOCK SUPPORT IN 0.3.0*/
KEVENT LockEvent; /* 274 */
ULONG LockCount; /* 284 */
struct _KTHREAD *LockOwner; /* 288 */
- /* FIXME MOVE TO AVL TREES */
+ /* FIXME: MOVE TO AVL TREES */
MADDRESS_SPACE AddressSpace; /* 28C */
+#endif
} EPROCESS;
#include <poppack.h>
+//
+// Job Token Filter Data
+//
#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;
+//
+// Executive Job (EJOB)
+//
typedef struct _EJOB
{
KEVENT Event;
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;
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>
+//
+// Win32K Callback Registration Data
+//
+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;
+#ifdef _REACTOS_
+ /* FIXME: REACTOS ONLY */
+ OB_FIND_METHOD WinStaFind;
+ OB_OPEN_METHOD WinStaCreate;
+ OB_CREATE_METHOD DesktopCreate;
#endif
+} W32_CALLOUT_DATA, *PW32_CALLOUT_DATA;
-#endif
+#endif // !NTOS_MODE_USER
+
+#endif // _PSTYPES_H