3 Copyright (c) Alex Ionescu. All rights reserved.
11 Type definitions for the Process Manager
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
29 #ifndef NTOS_MODE_USER
35 // KUSER_SHARED_DATA location in User Mode
37 #define USER_SHARED_DATA (0x7FFE0000)
42 #ifndef NTOS_MODE_USER
44 //extern NTSYSAPI struct _EPROCESS* PsInitialSystemProcess;
45 //extern NTSYSAPI POBJECT_TYPE PsProcessType;
52 #define FLG_STOP_ON_EXCEPTION 0x00000001
53 #define FLG_SHOW_LDR_SNAPS 0x00000002
54 #define FLG_DEBUG_INITIAL_COMMAND 0x00000004
55 #define FLG_STOP_ON_HUNG_GUI 0x00000008
56 #define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
57 #define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
58 #define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
59 #define FLG_HEAP_VALIDATE_ALL 0x00000080
60 #define FLG_POOL_ENABLE_TAIL_CHECK 0x00000100
61 #define FLG_POOL_ENABLE_FREE_CHECK 0x00000200
62 #define FLG_POOL_ENABLE_TAGGING 0x00000400
63 #define FLG_HEAP_ENABLE_TAGGING 0x00000800
64 #define FLG_USER_STACK_TRACE_DB 0x00001000
65 #define FLG_KERNEL_STACK_TRACE_DB 0x00002000
66 #define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
67 #define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
68 #define FLG_IGNORE_DEBUG_PRIV 0x00010000
69 #define FLG_ENABLE_CSRDEBUG 0x00020000
70 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
71 #define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
72 #define FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
73 #define FLG_HEAP_DISABLE_COALESCING 0x00200000
74 #define FLG_ENABLE_CLOSE_EXCEPTIONS 0x00400000
75 #define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
76 #define FLG_ENABLE_HANDLE_TYPE_TAGGING 0x01000000
77 #define FLG_HEAP_PAGE_ALLOCS 0x02000000
78 #define FLG_DEBUG_INITIAL_COMMAND_EX 0x04000000
79 #define FLG_VALID_BITS 0x07FFFFFF
82 // Process priority classes
84 #define PROCESS_PRIORITY_CLASS_INVALID 0
85 #define PROCESS_PRIORITY_CLASS_IDLE 1
86 #define PROCESS_PRIORITY_CLASS_NORMAL 2
87 #define PROCESS_PRIORITY_CLASS_HIGH 3
88 #define PROCESS_PRIORITY_CLASS_REALTIME 4
89 #define PROCESS_PRIORITY_CLASS_BELOW_NORMAL 5
90 #define PROCESS_PRIORITY_CLASS_ABOVE_NORMAL 6
93 // NtCreateProcessEx flags
95 #define PS_REQUEST_BREAKAWAY 1
96 #define PS_NO_DEBUG_INHERIT 2
97 #define PS_INHERIT_HANDLES 4
98 #define PS_UNKNOWN_VALUE 8
99 #define PS_ALL_FLAGS (PS_REQUEST_BREAKAWAY | \
100 PS_NO_DEBUG_INHERIT | \
101 PS_INHERIT_HANDLES | \
105 // Process base priorities
107 #define PROCESS_PRIORITY_IDLE 3
108 #define PROCESS_PRIORITY_NORMAL 8
109 #define PROCESS_PRIORITY_NORMAL_FOREGROUND 9
112 // Process Priority Separation Values (OR)
114 #define PSP_VARIABLE_QUANTUMS 4
115 #define PSP_LONG_QUANTUMS 16
117 #ifndef NTOS_MODE_USER
120 // Thread Access Types
122 #define THREAD_QUERY_INFORMATION 0x0040
123 #define THREAD_SET_THREAD_TOKEN 0x0080
124 #define THREAD_IMPERSONATE 0x0100
125 #define THREAD_DIRECT_IMPERSONATION 0x0200
128 // Process Access Types
130 #define PROCESS_TERMINATE 0x0001
131 #define PROCESS_CREATE_THREAD 0x0002
132 #define PROCESS_SET_SESSIONID 0x0004
133 #define PROCESS_VM_OPERATION 0x0008
134 #define PROCESS_VM_READ 0x0010
135 #define PROCESS_VM_WRITE 0x0020
136 #define PROCESS_CREATE_PROCESS 0x0080
137 #define PROCESS_SET_QUOTA 0x0100
138 #define PROCESS_SET_INFORMATION 0x0200
139 #define PROCESS_QUERY_INFORMATION 0x0400
140 #define PROCESS_SUSPEND_RESUME 0x0800
141 #define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
142 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
143 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
147 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
152 // Thread Base Priorities
154 #define THREAD_BASE_PRIORITY_LOWRT 15
155 #define THREAD_BASE_PRIORITY_MAX 2
156 #define THREAD_BASE_PRIORITY_MIN -2
157 #define THREAD_BASE_PRIORITY_IDLE -15
162 #define TLS_MINIMUM_AVAILABLE 64
163 #define TLS_EXPANSION_SLOTS 1024
169 #define JOB_OBJECT_ASSIGN_PROCESS 0x1
170 #define JOB_OBJECT_SET_ATTRIBUTES 0x2
171 #define JOB_OBJECT_QUERY 0x4
172 #define JOB_OBJECT_TERMINATE 0x8
173 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x10
174 #define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
179 // Cross Thread Flags
181 #define CT_TERMINATED_BIT 0x1
182 #define CT_DEAD_THREAD_BIT 0x2
183 #define CT_HIDE_FROM_DEBUGGER_BIT 0x4
184 #define CT_ACTIVE_IMPERSONATION_INFO_BIT 0x8
185 #define CT_SYSTEM_THREAD_BIT 0x10
186 #define CT_HARD_ERRORS_ARE_DISABLED_BIT 0x20
187 #define CT_BREAK_ON_TERMINATION_BIT 0x40
188 #define CT_SKIP_CREATION_MSG_BIT 0x80
189 #define CT_SKIP_TERMINATION_MSG_BIT 0x100
192 // Same Thread Passive Flags
194 #define STP_ACTIVE_EX_WORKER_BIT 0x1
195 #define STP_EX_WORKER_CAN_WAIT_USER_BIT 0x2
196 #define STP_MEMORY_MAKER_BIT 0x4
197 #define STP_KEYED_EVENT_IN_USE_BIT 0x8
200 // Same Thread APC Flags
202 #define STA_LPC_RECEIVED_MSG_ID_VALID_BIT 0x1
203 #define STA_LPC_EXIT_THREAD_CALLED_BIT 0x2
204 #define STA_ADDRESS_SPACE_OWNER_BIT 0x4
210 #define PSF_CREATE_REPORTED_BIT 0x1
211 #define PSF_NO_DEBUG_INHERIT_BIT 0x2
212 #define PSF_PROCESS_EXITING_BIT 0x4
213 #define PSF_PROCESS_DELETE_BIT 0x8
214 #define PSF_WOW64_SPLIT_PAGES_BIT 0x10
215 #define PSF_VM_DELETED_BIT 0x20
216 #define PSF_OUTSWAP_ENABLED_BIT 0x40
217 #define PSF_OUTSWAPPED_BIT 0x80
218 #define PSF_FORK_FAILED_BIT 0x100
219 #define PSF_WOW64_VA_SPACE_4GB_BIT 0x200
220 #define PSF_ADDRESS_SPACE_INITIALIZED_BIT 0x400
221 #define PSF_SET_TIMER_RESOLUTION_BIT 0x1000
222 #define PSF_BREAK_ON_TERMINATION_BIT 0x2000
223 #define PSF_SESSION_CREATION_UNDERWAY_BIT 0x4000
224 #define PSF_WRITE_WATCH_BIT 0x8000
225 #define PSF_PROCESS_IN_SESSION_BIT 0x10000
226 #define PSF_OVERRIDE_ADDRESS_SPACE_BIT 0x20000
227 #define PSF_HAS_ADDRESS_SPACE_BIT 0x40000
228 #define PSF_LAUNCH_PREFETCHED_BIT 0x80000
229 #define PSF_INJECT_INPAGE_ERRORS_BIT 0x100000
230 #define PSF_VM_TOP_DOWN_BIT 0x200000
231 #define PSF_IMAGE_NOTIFY_DONE_BIT 0x400000
232 #define PSF_PDE_UPDATE_NEEDED_BIT 0x800000
233 #define PSF_VDM_ALLOWED_BIT 0x1000000
234 #define PSF_SWAP_ALLOWED_BIT 0x2000000
235 #define PSF_CREATE_FAILED_BIT 0x4000000
236 #define PSF_DEFAULT_IO_PRIORITY_BIT 0x8000000
238 #ifdef NTOS_MODE_USER
240 // Current Process/Thread built-in 'special' handles
242 #define NtCurrentProcess() ((HANDLE)(LONG_PTR)-1)
243 #define ZwCurrentProcess() NtCurrentProcess()
244 #define NtCurrentThread() ((HANDLE)(LONG_PTR)-2)
245 #define ZwCurrentThread() NtCurrentThread()
248 // Process/Thread/Job Information Classes for NtQueryInformationProcess/Thread/Job
250 typedef enum _PROCESSINFOCLASS
252 ProcessBasicInformation
,
258 ProcessRaisePriority
,
260 ProcessExceptionPort
,
262 ProcessLdtInformation
,
264 ProcessDefaultHardErrorMode
,
265 ProcessIoPortHandlers
,
266 ProcessPooledUsageAndLimits
,
267 ProcessWorkingSetWatch
,
269 ProcessEnableAlignmentFaultFixup
,
270 ProcessPriorityClass
,
271 ProcessWx86Information
,
274 ProcessPriorityBoost
,
276 ProcessSessionInformation
,
277 ProcessForegroundInformation
,
278 ProcessWow64Information
,
279 ProcessImageFileName
,
280 ProcessLUIDDeviceMapsEnabled
,
281 ProcessBreakOnTermination
,
282 ProcessDebugObjectHandle
,
284 ProcessHandleTracing
,
287 ProcessTlsInformation
,
289 ProcessImageInformation
,
292 ProcessInstrumentationCallback
,
296 typedef enum _THREADINFOCLASS
298 ThreadBasicInformation
,
303 ThreadImpersonationToken
,
304 ThreadDescriptorTableEntry
,
305 ThreadEnableAlignmentFaultFixup
,
306 ThreadEventPair_Reusable
,
307 ThreadQuerySetWin32StartAddress
,
309 ThreadPerformanceCount
,
311 ThreadIdealProcessor
,
313 ThreadSetTlsArrayAddress
,
315 ThreadHideFromDebugger
,
316 ThreadBreakOnTermination
,
317 ThreadSwitchLegacyState
,
319 ThreadLastSystemCall
,
323 ThreadActualBasePriority
,
324 ThreadTebInformation
,
331 typedef enum _PSPROCESSPRIORITYMODE
333 PsProcessPriorityForeground
,
334 PsProcessPriorityBackground
,
335 PsProcessPrioritySpinning
336 } PSPROCESSPRIORITYMODE
;
338 typedef enum _JOBOBJECTINFOCLASS
340 JobObjectBasicAccountingInformation
= 1,
341 JobObjectBasicLimitInformation
,
342 JobObjectBasicProcessIdList
,
343 JobObjectBasicUIRestrictions
,
344 JobObjectSecurityLimitInformation
,
345 JobObjectEndOfJobTimeInformation
,
346 JobObjectAssociateCompletionPortInformation
,
347 JobObjectBasicAndIoAccountingInformation
,
348 JobObjectExtendedLimitInformation
,
349 JobObjectJobSetInformation
,
350 MaxJobObjectInfoClass
351 } JOBOBJECTINFOCLASS
;
354 // Power Event Events for Win32K Power Event Callback
356 typedef enum _PSPOWEREVENTTYPE
360 PsW32PowerPolicyChanged
= 2,
361 PsW32SystemPowerState
= 3,
363 PsW32DisplayState
= 5,
364 PsW32CapabilitiesChanged
= 6,
365 PsW32SetStateFailed
= 7,
368 PsW32GdiPrepareResumeUI
= 10,
369 PsW32GdiOffRequest
= 11,
370 PsW32MonitorOff
= 12,
374 // Power State Tasks for Win32K Power State Callback
376 typedef enum _POWERSTATETASK
378 PowerState_BlockSessionSwitch
= 0,
380 PowerState_QueryApps
= 2,
381 PowerState_QueryServices
= 3,
382 PowerState_QueryAppsFailed
= 4,
383 PowerState_QueryServicesFailed
= 5,
384 PowerState_SuspendApps
= 6,
385 PowerState_SuspendServices
= 7,
386 PowerState_ShowUI
= 8,
387 PowerState_NotifyWL
= 9,
388 PowerState_ResumeApps
= 10,
389 PowerState_ResumeServices
= 11,
390 PowerState_UnBlockSessionSwitch
= 12,
392 PowerState_BlockInput
= 14,
393 PowerState_UnblockInput
= 15,
397 // Win32K Job Callback Types
399 typedef enum _PSW32JOBCALLOUTTYPE
401 PsW32JobCalloutSetInformation
= 0,
402 PsW32JobCalloutAddProcess
= 1,
403 PsW32JobCalloutTerminate
= 2,
404 } PSW32JOBCALLOUTTYPE
;
407 // Win32K Thread Callback Types
409 typedef enum _PSW32THREADCALLOUTTYPE
411 PsW32ThreadCalloutInitialize
,
412 PsW32ThreadCalloutExit
,
413 } PSW32THREADCALLOUTTYPE
;
416 // Declare empty structure definitions so that they may be referenced by
417 // routines before they are defined
422 struct _WIN32_POWEREVENT_PARAMETERS
;
423 struct _WIN32_POWERSTATE_PARAMETERS
;
424 struct _WIN32_JOBCALLOUT_PARAMETERS
;
425 struct _WIN32_OPENMETHOD_PARAMETERS
;
426 struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS
;
427 struct _WIN32_CLOSEMETHOD_PARAMETERS
;
428 struct _WIN32_DELETEMETHOD_PARAMETERS
;
429 struct _WIN32_PARSEMETHOD_PARAMETERS
;
432 // Win32K Process and Thread Callbacks
436 (NTAPI
*PKWIN32_PROCESS_CALLOUT
)(
437 struct _EPROCESS
*Process
,
443 (NTAPI
*PKWIN32_THREAD_CALLOUT
)(
444 struct _ETHREAD
*Thread
,
445 PSW32THREADCALLOUTTYPE Type
450 (NTAPI
*PKWIN32_GLOBALATOMTABLE_CALLOUT
)(
456 (NTAPI
*PKWIN32_POWEREVENT_CALLOUT
)(
457 struct _WIN32_POWEREVENT_PARAMETERS
*Parameters
462 (NTAPI
*PKWIN32_POWERSTATE_CALLOUT
)(
463 struct _WIN32_POWERSTATE_PARAMETERS
*Parameters
468 (NTAPI
*PKWIN32_JOB_CALLOUT
)(
469 struct _WIN32_JOBCALLOUT_PARAMETERS
*Parameters
474 (NTAPI
*PGDI_BATCHFLUSH_ROUTINE
)(
480 (NTAPI
*PKWIN32_OPENMETHOD_CALLOUT
)(
481 struct _WIN32_OPENMETHOD_PARAMETERS
*Parameters
486 (NTAPI
*PKWIN32_OKTOCLOSEMETHOD_CALLOUT
)(
487 struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS
*Parameters
492 (NTAPI
*PKWIN32_CLOSEMETHOD_CALLOUT
)(
493 struct _WIN32_CLOSEMETHOD_PARAMETERS
*Parameters
498 (NTAPI
*PKWIN32_DELETEMETHOD_CALLOUT
)(
499 struct _WIN32_DELETEMETHOD_PARAMETERS
*Parameters
504 (NTAPI
*PKWIN32_PARSEMETHOD_CALLOUT
)(
505 struct _WIN32_PARSEMETHOD_PARAMETERS
*Parameters
510 (NTAPI
*PKWIN32_WIN32DATACOLLECTION_CALLOUT
)(
511 struct _EPROCESS
*Process
,
521 (NTAPI
*PLEGO_NOTIFY_ROUTINE
)(
528 (NTAPI
*PPOST_PROCESS_INIT_ROUTINE
)(
532 #ifdef NTOS_MODE_USER
535 // ClientID Structure
537 typedef struct _CLIENT_ID
539 HANDLE UniqueProcess
;
541 } CLIENT_ID
, *PCLIENT_ID
;
546 // Descriptor Table Entry Definition
548 #define _DESCRIPTOR_TABLE_ENTRY_DEFINED
549 typedef struct _DESCRIPTOR_TABLE_ENTRY
552 LDT_ENTRY Descriptor
;
553 } DESCRIPTOR_TABLE_ENTRY
, *PDESCRIPTOR_TABLE_ENTRY
;
559 (NTAPI
*PPEBLOCKROUTINE
)(
564 // PEB Free Block Descriptor
566 typedef struct _PEB_FREE_BLOCK
568 struct _PEB_FREE_BLOCK
* Next
;
570 } PEB_FREE_BLOCK
, *PPEB_FREE_BLOCK
;
573 // Process Environment Block (PEB)
577 UCHAR InheritedAddressSpace
;
578 UCHAR ReadImageFileExecOptions
;
580 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
583 UCHAR ImageUsesLargePages
:1;
584 UCHAR IsProtectedProcess
:1;
585 UCHAR IsLegacyProcess
:1;
592 PVOID ImageBaseAddress
;
594 struct _RTL_USER_PROCESS_PARAMETERS
*ProcessParameters
;
597 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
598 struct _RTL_CRITICAL_SECTION
*FastPebLock
;
599 PVOID AltThunkSListPtr
;
604 PVOID
* KernelCallbackTable
;
605 PVOID UserSharedInfoPtr
;
607 ULONG SystemReserved
[1];
611 PPEBLOCKROUTINE FastPebLockRoutine
;
612 PPEBLOCKROUTINE FastPebUnlockRoutine
;
613 ULONG EnvironmentUpdateCount
;
614 PVOID
* KernelCallbackTable
;
615 PVOID EventLogSection
;
618 PPEB_FREE_BLOCK FreeList
;
619 ULONG TlsExpansionCounter
;
621 ULONG TlsBitmapBits
[0x2];
622 PVOID ReadOnlySharedMemoryBase
;
623 PVOID ReadOnlySharedMemoryHeap
;
624 PVOID
* ReadOnlyStaticServerData
;
625 PVOID AnsiCodePageData
;
626 PVOID OemCodePageData
;
627 PVOID UnicodeCaseTableData
;
628 ULONG NumberOfProcessors
;
630 LARGE_INTEGER CriticalSectionTimeout
;
631 ULONG HeapSegmentReserve
;
632 ULONG HeapSegmentCommit
;
633 ULONG HeapDeCommitTotalFreeThreshold
;
634 ULONG HeapDeCommitFreeBlockThreshold
;
636 ULONG MaximumNumberOfHeaps
;
638 PVOID GdiSharedHandleTable
;
639 PVOID ProcessStarterHelper
;
640 PVOID GdiDCAttributeList
;
641 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
642 struct _RTL_CRITICAL_SECTION
*LoaderLock
;
646 ULONG OSMajorVersion
;
647 ULONG OSMinorVersion
;
648 USHORT OSBuildNumber
;
651 ULONG ImageSubSystem
;
652 ULONG ImageSubSystemMajorVersion
;
653 ULONG ImageSubSystemMinorVersion
;
654 ULONG ImageProcessAffinityMask
;
655 ULONG GdiHandleBuffer
[0x22];
656 PPOST_PROCESS_INIT_ROUTINE PostProcessInitRoutine
;
657 struct _RTL_BITMAP
*TlsExpansionBitmap
;
658 ULONG TlsExpansionBitmapBits
[0x20];
660 #if (NTDDI_VERSION >= NTDDI_WINXP)
661 ULARGE_INTEGER AppCompatFlags
;
662 ULARGE_INTEGER AppCompatFlagsUser
;
665 UNICODE_STRING CSDVersion
;
666 struct _ACTIVATION_CONTEXT_DATA
*ActivationContextData
;
667 struct _ASSEMBLY_STORAGE_MAP
*ProcessAssemblyStorageMap
;
668 struct _ACTIVATION_CONTEXT_DATA
*SystemDefaultActivationContextData
;
669 struct _ASSEMBLY_STORAGE_MAP
*SystemAssemblyStorageMap
;
670 ULONG MinimumStackCommit
;
672 #if (NTDDI_VERSION >= NTDDI_WS03)
674 LIST_ENTRY FlsListHead
;
675 struct _RTL_BITMAP
*FlsBitmap
;
676 ULONG FlsBitmapBits
[4];
679 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
680 PVOID WerRegistrationData
;
681 PVOID WerShipAssertPtr
;
686 // GDI Batch Descriptor
688 typedef struct _GDI_TEB_BATCH
693 } GDI_TEB_BATCH
, *PGDI_TEB_BATCH
;
698 typedef struct _INITIAL_TEB
700 PVOID PreviousStackBase
;
701 PVOID PreviousStackLimit
;
704 PVOID AllocatedStackBase
;
705 } INITIAL_TEB
, *PINITIAL_TEB
;
708 // TEB Active Frame Structures
710 typedef struct _TEB_ACTIVE_FRAME_CONTEXT
714 } TEB_ACTIVE_FRAME_CONTEXT
, *PTEB_ACTIVE_FRAME_CONTEXT
;
716 typedef struct _TEB_ACTIVE_FRAME
719 struct _TEB_ACTIVE_FRAME
*Previous
;
720 PTEB_ACTIVE_FRAME_CONTEXT Context
;
721 } TEB_ACTIVE_FRAME
, *PTEB_ACTIVE_FRAME
;
724 // Thread Environment Block (TEB)
729 PVOID EnvironmentPointer
;
731 PVOID ActiveRpcHandle
;
732 PVOID ThreadLocalStoragePointer
;
733 struct _PEB
*ProcessEnvironmentBlock
;
734 ULONG LastErrorValue
;
735 ULONG CountOfOwnedCriticalSections
;
736 PVOID CsrClientThread
;
737 struct _W32THREAD
* Win32ThreadInfo
;
738 ULONG User32Reserved
[0x1A];
739 ULONG UserReserved
[5];
742 ULONG FpSoftwareStatusRegister
;
743 PVOID SystemReserved1
[0x36];
745 struct _ACTIVATION_CONTEXT_STACK
*ActivationContextStackPointer
;
746 UCHAR SpareBytes1
[0x24];
748 GDI_TEB_BATCH GdiTebBatch
;
749 CLIENT_ID RealClientId
;
750 PVOID GdiCachedProcessHandle
;
753 PVOID GdiThreadLocalInfo
;
754 ULONG Win32ClientInfo
[62];
755 PVOID glDispatchTable
[0xE9];
756 ULONG glReserved1
[0x1D];
763 NTSTATUS LastStatusValue
;
764 UNICODE_STRING StaticUnicodeString
;
765 WCHAR StaticUnicodeBuffer
[0x105];
766 PVOID DeallocationStack
;
767 PVOID TlsSlots
[0x40];
770 PVOID ReservedForNtRpc
;
771 PVOID DbgSsReserved
[0x2];
772 ULONG HardErrorDisabled
;
773 PVOID Instrumentation
[9];
779 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
785 BOOLEAN FreeStackOnTermination
;
786 BOOLEAN HasFiberData
;
788 UCHAR IdealProcessor
;
789 ULONG GuaranteedStackBytes
;
790 PVOID ReservedForPerf
;
791 PVOID ReservedForOle
;
792 ULONG WaitingOnLoaderLock
;
793 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
794 PVOID SavedPriorityState
;
800 PVOID
*TlsExpansionSlots
;
801 ULONG ImpersonationLocale
;
802 ULONG IsImpersonating
;
805 ULONG HeapVirualAffinity
;
806 PVOID CurrentTransactionHandle
;
807 PTEB_ACTIVE_FRAME ActiveFrame
;
808 #if (NTDDI_VERSION >= NTDDI_WS03)
811 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
812 PVOID PreferredLangauges
;
813 PVOID UserPrefLanguages
;
814 PVOID MergedPrefLanguages
;
815 ULONG MuiImpersonation
;
820 USHORT SpareCrossTebFlags
:16;
822 USHORT CrossTebFlags
;
828 USHORT DbgSafeThunkCall
:1;
829 USHORT DbgInDebugPrint
:1;
830 USHORT DbgHasFiberData
:1;
831 USHORT DbgSkipThreadAttach
:1;
832 USHORT DbgWerInShipAssertCode
:1;
833 USHORT DbgIssuedInitialBp
:1;
834 USHORT DbgClonedThread
:1;
835 USHORT SpareSameTebBits
:9;
839 PVOID TxnScopeEntercallback
;
840 PVOID TxnScopeExitCAllback
;
841 PVOID TxnScopeContext
;
843 ULONG ProcessRundown
;
844 ULONGLONG LastSwitchTime
;
845 ULONGLONG TotalSwitchOutTime
;
846 LARGE_INTEGER WaitReasonBitMap
;
849 UCHAR BooleanSpare
[3];
853 #ifdef NTOS_MODE_USER
856 // Process Information Structures for NtQueryProcessInformation
858 typedef struct _PROCESS_BASIC_INFORMATION
862 ULONG_PTR AffinityMask
;
863 KPRIORITY BasePriority
;
864 ULONG_PTR UniqueProcessId
;
865 ULONG_PTR InheritedFromUniqueProcessId
;
866 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
868 typedef struct _PROCESS_ACCESS_TOKEN
872 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
874 typedef struct _PROCESS_DEVICEMAP_INFORMATION
880 HANDLE DirectoryHandle
;
888 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
890 typedef struct _KERNEL_USER_TIMES
892 LARGE_INTEGER CreateTime
;
893 LARGE_INTEGER ExitTime
;
894 LARGE_INTEGER KernelTime
;
895 LARGE_INTEGER UserTime
;
896 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
898 typedef struct _PROCESS_SESSION_INFORMATION
901 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
905 typedef struct _PROCESS_PRIORITY_CLASS
909 } PROCESS_PRIORITY_CLASS
, *PPROCESS_PRIORITY_CLASS
;
912 // Thread Information Structures for NtQueryProcessInformation
914 typedef struct _THREAD_BASIC_INFORMATION
917 PVOID TebBaseAddress
;
919 KAFFINITY AffinityMask
;
921 KPRIORITY BasePriority
;
922 } THREAD_BASIC_INFORMATION
, *PTHREAD_BASIC_INFORMATION
;
924 #ifndef NTOS_MODE_USER
929 typedef struct _JOB_SET_ARRAY
934 } JOB_SET_ARRAY
, *PJOB_SET_ARRAY
;
937 // EPROCESS Quota Structures
939 typedef struct _EPROCESS_QUOTA_ENTRY
945 } EPROCESS_QUOTA_ENTRY
, *PEPROCESS_QUOTA_ENTRY
;
947 typedef struct _EPROCESS_QUOTA_BLOCK
949 EPROCESS_QUOTA_ENTRY QuotaEntry
[3];
950 LIST_ENTRY QuotaList
;
951 ULONG ReferenceCount
;
953 } EPROCESS_QUOTA_BLOCK
, *PEPROCESS_QUOTA_BLOCK
;
956 // Process Pagefault History
958 typedef struct _PAGEFAULT_HISTORY
964 PROCESS_WS_WATCH_INFORMATION WatchInfo
[1];
965 } PAGEFAULT_HISTORY
, *PPAGEFAULT_HISTORY
;
968 // Process Impersonation Information
970 typedef struct _PS_IMPERSONATION_INFORMATION
974 BOOLEAN EffectiveOnly
;
975 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
976 } PS_IMPERSONATION_INFORMATION
, *PPS_IMPERSONATION_INFORMATION
;
979 // Process Termination Port
981 typedef struct _TERMINATION_PORT
983 struct _TERMINATION_PORT
*Next
;
985 } TERMINATION_PORT
, *PTERMINATION_PORT
;
988 // Per-Process APC Rate Limiting
990 typedef struct _PSP_RATE_APC
994 SINGLE_LIST_ENTRY NextApc
;
995 ULONGLONG ExcessCycles
;
997 ULONGLONG TargetGEneration
;
999 } PSP_RATE_APC
, *PPSP_RATE_APC
;
1002 // Executive Thread (ETHREAD)
1004 #include <pshpack4.h>
1005 typedef struct _ETHREAD
1009 LARGE_INTEGER CreateTime
;
1012 LARGE_INTEGER ExitTime
;
1013 LIST_ENTRY LpcReplyChain
;
1014 LIST_ENTRY KeyedWaitChain
;
1018 NTSTATUS ExitStatus
;
1021 LIST_ENTRY PostBlockList
;
1024 struct _TERMINATION_PORT
*TerminationPort
;
1025 struct _ETHREAD
*ReaperLink
;
1026 PVOID KeyedWaitValue
;
1027 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1028 PVOID Win32StartParameter
;
1031 KSPIN_LOCK ActiveTimerListLock
;
1032 LIST_ENTRY ActiveTimerListHead
;
1034 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1035 KSEMAPHORE KeyedWaitSemaphore
;
1039 KSEMAPHORE LpcReplySemaphore
;
1040 KSEMAPHORE KeyedReplySemaphore
;
1044 PVOID LpcReplyMessage
;
1045 PVOID LpcWaitingOnPort
;
1048 PPS_IMPERSONATION_INFORMATION ImpersonationInfo
;
1051 PDEVICE_OBJECT DeviceToVerify
;
1052 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1053 PPSP_RATE_APC RateControlApc
;
1055 struct _EPROCESS
*ThreadsProcess
;
1057 PVOID Win32StartAddress
;
1060 PKSTART_ROUTINE StartAddress
;
1061 ULONG LpcReceivedMessageId
;
1063 LIST_ENTRY ThreadListEntry
;
1064 EX_RUNDOWN_REF RundownProtect
;
1065 EX_PUSH_LOCK ThreadLock
;
1066 #if (NTDDI_VERSION < NTDDI_LONGHORN)
1067 ULONG LpcReplyMessageId
;
1069 ULONG ReadClusterSize
;
1070 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1073 ACCESS_MASK GrantedAccess
;
1080 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1081 ULONG ThreadInserted
:1;
1085 ULONG HideFromDebugger
:1;
1086 ULONG ActiveImpersonationInfo
:1;
1087 ULONG SystemThread
:1;
1088 ULONG HardErrorsAreDisabled
:1;
1089 ULONG BreakOnTermination
:1;
1090 ULONG SkipCreationMsg
:1;
1091 ULONG SkipTerminationMsg
:1;
1092 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1093 ULONG CreateMsgSent
:1;
1094 ULONG ThreadIoPriority
:3;
1095 ULONG ThreadPagePriority
:3;
1096 ULONG PendingRatecontrol
:1;
1099 ULONG CrossThreadFlags
;
1105 ULONG ActiveExWorker
:1;
1106 ULONG ExWorkerCanWaitUser
:1;
1107 ULONG MemoryMaker
:1;
1108 ULONG KeyedEventInUse
:1;
1109 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1110 ULONG RateApcState
:2;
1113 ULONG SameThreadPassiveFlags
;
1119 ULONG LpcReceivedMsgIdValid
:1;
1120 ULONG LpcExitThreadCalled
:1;
1121 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1124 ULONG AddressSpaceOwner
:1;
1126 ULONG OwnsProcessWorkingSetExclusive
:1;
1127 ULONG OwnsProcessWorkingSetShared
:1;
1128 ULONG OwnsSystemWorkingSetExclusive
:1;
1129 ULONG OwnsSystemWorkingSetShared
:1;
1130 ULONG OwnsSessionWorkingSetExclusive
:1;
1131 ULONG OwnsSessionWorkingSetShared
:1;
1132 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1133 ULONG SupressSymbolLoad
:1;
1135 ULONG PriorityRegionActive
:4;
1140 ULONG SameThreadApcFlags
;
1142 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1143 UCHAR CacheManagerActive
;
1145 UCHAR ForwardClusterOnly
;
1147 UCHAR DisablePageFaultClustering
;
1148 UCHAR ActiveFaultCount
;
1149 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1150 ULONG AlpcMessageId
;
1154 ULONG AlpcReceiveAttributeSet
;
1156 LIST_ENTRY AlpcWaitListEntry
;
1157 KSEMAPHORE AlpcWaitSemaphore
;
1158 ULONG CacheManagerCount
;
1163 // Executive Process (EPROCESS)
1165 typedef struct _EPROCESS
1168 EX_PUSH_LOCK ProcessLock
;
1169 LARGE_INTEGER CreateTime
;
1170 LARGE_INTEGER ExitTime
;
1171 EX_RUNDOWN_REF RundownProtect
;
1172 HANDLE UniqueProcessId
;
1173 LIST_ENTRY ActiveProcessLinks
;
1174 ULONG QuotaUsage
[3];
1177 ULONG PeakVirtualSize
;
1179 LIST_ENTRY SessionProcessLinks
;
1181 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1184 PVOID ExceptionPortData
;
1185 ULONG ExceptionPortValue
;
1186 UCHAR ExceptionPortState
:3;
1189 PVOID ExceptionPort
;
1191 PHANDLE_TABLE ObjectTable
;
1193 ULONG WorkingSetPage
;
1194 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1195 EX_PUSH_LOCK AddressCreationLock
;
1196 PETHREAD RotateInProgress
;
1198 FAST_MUTEX AddressCreationLock
; // FIXME: FAST_MUTEX for XP, KGUARDED_MUTEX for 2K3
1199 KSPIN_LOCK HyperSpaceLock
;
1201 PETHREAD ForkInProgress
;
1202 ULONG HardwareTrigger
;
1203 MM_AVL_TABLE PhysicalVadroot
;
1205 ULONG NumberOfPrivatePages
;
1206 ULONG NumberOfLockedPages
;
1207 PVOID
*Win32Process
;
1209 PVOID SectionObject
;
1210 PVOID SectionBaseAddress
;
1211 PEPROCESS_QUOTA_BLOCK QuotaBlock
;
1212 PPAGEFAULT_HISTORY WorkingSetWatch
;
1213 PVOID Win32WindowStation
;
1214 HANDLE InheritedFromUniqueProcessId
;
1215 PVOID LdtInformation
;
1219 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1220 ULONG AlpcPagedPoolQuotaCache
;
1221 PVOID EtwDataSource
;
1228 HARDWARE_PTE PagedirectoryPte
;
1232 CHAR ImageFileName
[16];
1233 LIST_ENTRY JobLinks
;
1234 PVOID LockedPagesList
;
1235 LIST_ENTRY ThreadListHead
;
1238 ULONG ActiveThreads
;
1239 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1240 ULONG ImagePathHash
;
1242 ACCESS_MASK GrantedAccess
;
1244 ULONG DefaultHardErrorProcessing
;
1245 NTSTATUS LastThreadExitStatus
;
1247 EX_FAST_REF PrefetchTrace
;
1248 LARGE_INTEGER ReadOperationCount
;
1249 LARGE_INTEGER WriteOperationCount
;
1250 LARGE_INTEGER OtherOperationCount
;
1251 LARGE_INTEGER ReadTransferCount
;
1252 LARGE_INTEGER WriteTransferCount
;
1253 LARGE_INTEGER OtherTransferCount
;
1254 ULONG CommitChargeLimit
;
1255 ULONG CommitChargePeak
;
1257 SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo
;
1259 LIST_ENTRY MmProcessLinks
;
1260 ULONG ModifiedPageCount
;
1261 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1266 ULONG JobNotReallyActive
:1;
1267 ULONG AccountingFolded
:1;
1268 ULONG NewProcessReported
:1;
1269 ULONG ExitProcessReported
:1;
1270 ULONG ReportCommitChanges
:1;
1271 ULONG LastReportMemory
:1;
1272 ULONG ReportPhysicalPageChanges
:1;
1273 ULONG HandleTableRundown
:1;
1274 ULONG NeedsHandleRundown
:1;
1275 ULONG RefTraceEnabled
:1;
1277 ULONG ProtectedProcess
:1;
1278 ULONG DefaultPagePriority
:3;
1279 ULONG ProcessDeleteSelf
:1;
1280 ULONG ProcessVerifierTarget
:1;
1291 ULONG CreateReported
:1;
1292 ULONG NoDebugInherit
:1;
1293 ULONG ProcessExiting
:1;
1294 ULONG ProcessDelete
:1;
1295 ULONG Wow64SplitPages
:1;
1297 ULONG OutswapEnabled
:1;
1300 ULONG Wow64VaSpace4Gb
:1;
1301 ULONG AddressSpaceInitialized
:2;
1302 ULONG SetTimerResolution
:1;
1303 ULONG BreakOnTermination
:1;
1304 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1305 ULONG DeprioritizeViews
:1;
1307 ULONG SessionCreationUnderway
:1;
1310 ULONG ProcessInSession
:1;
1311 ULONG OverrideAddressSpace
:1;
1312 ULONG HasAddressSpace
:1;
1313 ULONG LaunchPrefetched
:1;
1314 ULONG InjectInpageErrors
:1;
1316 ULONG ImageNotifyDone
:1;
1317 ULONG PdeUpdateNeeded
:1;
1319 ULONG SmapAllowed
:1;
1320 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1321 ULONG ProcessInserted
:1;
1323 ULONG CreateFailed
:1;
1325 ULONG DefaultIoPriority
:3;
1326 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1327 ULONG SparePsFlags1
:2;
1335 NTSTATUS ExitStatus
;
1336 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1339 USHORT NextPageColor
;
1345 UCHAR SubSystemMinorVersion
;
1346 UCHAR SubSystemMajorVersion
;
1348 USHORT SubSystemVersion
;
1350 UCHAR PriorityClass
;
1351 MM_AVL_TABLE VadRoot
;
1354 #include <poppack.h>
1357 // Job Token Filter Data
1359 #include <pshpack1.h>
1360 typedef struct _PS_JOB_TOKEN_FILTER
1362 ULONG CapturedSidCount
;
1363 PSID_AND_ATTRIBUTES CapturedSids
;
1364 ULONG CapturedSidsLength
;
1365 ULONG CapturedGroupCount
;
1366 PSID_AND_ATTRIBUTES CapturedGroups
;
1367 ULONG CapturedGroupsLength
;
1368 ULONG CapturedPrivilegeCount
;
1369 PLUID_AND_ATTRIBUTES CapturedPrivileges
;
1370 ULONG CapturedPrivilegesLength
;
1371 } PS_JOB_TOKEN_FILTER
, *PPS_JOB_TOKEN_FILTER
;
1374 // Executive Job (EJOB)
1376 typedef struct _EJOB
1379 LIST_ENTRY JobLinks
;
1380 LIST_ENTRY ProcessListHead
;
1382 LARGE_INTEGER TotalUserTime
;
1383 LARGE_INTEGER TotalKernelTime
;
1384 LARGE_INTEGER ThisPeriodTotalUserTime
;
1385 LARGE_INTEGER ThisPeriodTotalKernelTime
;
1386 ULONG TotalPageFaultCount
;
1387 ULONG TotalProcesses
;
1388 ULONG ActiveProcesses
;
1389 ULONG TotalTerminatedProcesses
;
1390 LARGE_INTEGER PerProcessUserTimeLimit
;
1391 LARGE_INTEGER PerJobUserTimeLimit
;
1393 ULONG MinimumWorkingSetSize
;
1394 ULONG MaximumWorkingSetSize
;
1395 ULONG ActiveProcessLimit
;
1397 UCHAR PriorityClass
;
1398 ULONG UIRestrictionsClass
;
1399 ULONG SecurityLimitFlags
;
1401 PPS_JOB_TOKEN_FILTER Filter
;
1402 ULONG EndOfJobTimeAction
;
1403 PVOID CompletionPort
;
1404 PVOID CompletionKey
;
1406 ULONG SchedulingClass
;
1407 ULONGLONG ReadOperationCount
;
1408 ULONGLONG WriteOperationCount
;
1409 ULONGLONG OtherOperationCount
;
1410 ULONGLONG ReadTransferCount
;
1411 ULONGLONG WriteTransferCount
;
1412 ULONGLONG OtherTransferCount
;
1414 ULONG ProcessMemoryLimit
;
1415 ULONG JobMemoryLimit
;
1416 ULONG PeakProcessMemoryUsed
;
1417 ULONG PeakJobMemoryUsed
;
1418 ULONG CurrentJobMemoryUsed
;
1419 #if (NTDDI_VERSION == NTDDI_WINXP)
1420 FAST_MUTEX MemoryLimitsLock
;
1421 #elif (NTDDI_VERSION == NTDDI_WS03)
1422 KGUARDED_MUTEX MemoryLimitsLock
;
1423 #elif (NTDDI_VERSION >= NTDDI_LONGHORN)
1424 EX_PUSH_LOCK MemoryLimitsLock
;
1426 LIST_ENTRY JobSetLinks
;
1430 #include <poppack.h>
1433 // Win32K Callback Registration Data
1435 typedef struct _WIN32_POWEREVENT_PARAMETERS
1437 PSPOWEREVENTTYPE EventNumber
;
1439 } WIN32_POWEREVENT_PARAMETERS
, *PWIN32_POWEREVENT_PARAMETERS
;
1441 typedef struct _WIN32_POWERSTATE_PARAMETERS
1444 POWER_ACTION SystemAction
;
1445 SYSTEM_POWER_STATE MinSystemState
;
1447 POWERSTATETASK PowerStateTask
;
1448 } WIN32_POWERSTATE_PARAMETERS
, *PWIN32_POWERSTATE_PARAMETERS
;
1450 typedef struct _WIN32_JOBCALLOUT_PARAMETERS
1453 PSW32JOBCALLOUTTYPE CalloutType
;
1455 } WIN32_JOBCALLOUT_PARAMETERS
, *PWIN32_JOBCALLOUT_PARAMETERS
;
1457 typedef struct _WIN32_OPENMETHOD_PARAMETERS
1459 OB_OPEN_REASON OpenReason
;
1462 ULONG GrantedAccess
;
1464 } WIN32_OPENMETHOD_PARAMETERS
, *PWIN32_OPENMETHOD_PARAMETERS
;
1466 typedef struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS
1471 KPROCESSOR_MODE PreviousMode
;
1472 } WIN32_OKAYTOCLOSEMETHOD_PARAMETERS
, *PWIN32_OKAYTOCLOSEMETHOD_PARAMETERS
;
1474 typedef struct _WIN32_CLOSEMETHOD_PARAMETERS
1478 ACCESS_MASK AccessMask
;
1479 ULONG ProcessHandleCount
;
1480 ULONG SystemHandleCount
;
1481 } WIN32_CLOSEMETHOD_PARAMETERS
, *PWIN32_CLOSEMETHOD_PARAMETERS
;
1483 typedef struct _WIN32_DELETEMETHOD_PARAMETERS
1486 } WIN32_DELETEMETHOD_PARAMETERS
, *PWIN32_DELETEMETHOD_PARAMETERS
;
1488 typedef struct _WIN32_PARSEMETHOD_PARAMETERS
1492 PACCESS_STATE AccessState
;
1493 KPROCESSOR_MODE AccessMode
;
1495 OUT PUNICODE_STRING CompleteName
;
1496 PUNICODE_STRING RemainingName
;
1498 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
1500 } WIN32_PARSEMETHOD_PARAMETERS
, *PWIN32_PARSEMETHOD_PARAMETERS
;
1502 typedef struct _WIN32_CALLOUTS_FPNS
1504 PKWIN32_PROCESS_CALLOUT ProcessCallout
;
1505 PKWIN32_THREAD_CALLOUT ThreadCallout
;
1506 PKWIN32_GLOBALATOMTABLE_CALLOUT GlobalAtomTableCallout
;
1507 PKWIN32_POWEREVENT_CALLOUT PowerEventCallout
;
1508 PKWIN32_POWERSTATE_CALLOUT PowerStateCallout
;
1509 PKWIN32_JOB_CALLOUT JobCallout
;
1510 PGDI_BATCHFLUSH_ROUTINE BatchFlushRoutine
;
1511 PKWIN32_OPENMETHOD_CALLOUT DesktopOpenProcedure
;
1512 PKWIN32_OKTOCLOSEMETHOD_CALLOUT DesktopOkToCloseProcedure
;
1513 PKWIN32_CLOSEMETHOD_CALLOUT DesktopCloseProcedure
;
1514 PKWIN32_DELETEMETHOD_CALLOUT DesktopDeleteProcedure
;
1515 PKWIN32_OKTOCLOSEMETHOD_CALLOUT WindowStationOkToCloseProcedure
;
1516 PKWIN32_CLOSEMETHOD_CALLOUT WindowStationCloseProcedure
;
1517 PKWIN32_DELETEMETHOD_CALLOUT WindowStationDeleteProcedure
;
1518 PKWIN32_PARSEMETHOD_CALLOUT WindowStationParseProcedure
;
1519 PKWIN32_OPENMETHOD_CALLOUT WindowStationOpenProcedure
;
1520 PKWIN32_WIN32DATACOLLECTION_CALLOUT Win32DataCollectionProcedure
;
1521 } WIN32_CALLOUTS_FPNS
, *PWIN32_CALLOUTS_FPNS
;
1523 #endif // !NTOS_MODE_USER
1525 #endif // _PSTYPES_H