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
30 #ifndef NTOS_MODE_USER
35 #ifndef NTOS_MODE_USER
38 // Kernel Exported Object Types
40 extern POBJECT_TYPE NTSYSAPI PsJobType
;
42 #endif // !NTOS_MODE_USER
45 // KUSER_SHARED_DATA location in User Mode
47 #define USER_SHARED_DATA (0x7FFE0000)
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 #if (NTDDI_VERSION < NTDDI_WINXP)
73 #define FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
75 #define FLG_ENABLE_SYSTEM_CRIT_BREAKS 0x00100000
77 #define FLG_HEAP_DISABLE_COALESCING 0x00200000
78 #define FLG_ENABLE_CLOSE_EXCEPTIONS 0x00400000
79 #define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
80 #define FLG_ENABLE_HANDLE_TYPE_TAGGING 0x01000000
81 #define FLG_HEAP_PAGE_ALLOCS 0x02000000
82 #define FLG_DEBUG_INITIAL_COMMAND_EX 0x04000000
83 #define FLG_VALID_BITS 0x07FFFFFF
86 // Flags for NtCreateProcessEx
88 #define PROCESS_CREATE_FLAGS_BREAKAWAY 0x00000001
89 #define PROCESS_CREATE_FLAGS_NO_DEBUG_INHERIT 0x00000002
90 #define PROCESS_CREATE_FLAGS_INHERIT_HANDLES 0x00000004
91 #define PROCESS_CREATE_FLAGS_OVERRIDE_ADDRESS_SPACE 0x00000008
92 #define PROCESS_CREATE_FLAGS_LARGE_PAGES 0x00000010
95 // Process priority classes
97 #define PROCESS_PRIORITY_CLASS_INVALID 0
98 #define PROCESS_PRIORITY_CLASS_IDLE 1
99 #define PROCESS_PRIORITY_CLASS_NORMAL 2
100 #define PROCESS_PRIORITY_CLASS_HIGH 3
101 #define PROCESS_PRIORITY_CLASS_REALTIME 4
102 #define PROCESS_PRIORITY_CLASS_BELOW_NORMAL 5
103 #define PROCESS_PRIORITY_CLASS_ABOVE_NORMAL 6
106 // NtCreateProcessEx flags
108 #define PS_REQUEST_BREAKAWAY 1
109 #define PS_NO_DEBUG_INHERIT 2
110 #define PS_INHERIT_HANDLES 4
111 #define PS_LARGE_PAGES 8
112 #define PS_ALL_FLAGS (PS_REQUEST_BREAKAWAY | \
113 PS_NO_DEBUG_INHERIT | \
114 PS_INHERIT_HANDLES | \
118 // Process base priorities
120 #define PROCESS_PRIORITY_IDLE 3
121 #define PROCESS_PRIORITY_NORMAL 8
122 #define PROCESS_PRIORITY_NORMAL_FOREGROUND 9
125 // Process memory priorities
127 #define MEMORY_PRIORITY_BACKGROUND 0
128 #define MEMORY_PRIORITY_UNKNOWN 1
129 #define MEMORY_PRIORITY_FOREGROUND 2
132 // Process Priority Separation Values (OR)
134 #define PSP_VARIABLE_QUANTUMS 4
135 #define PSP_LONG_QUANTUMS 16
137 #ifndef NTOS_MODE_USER
139 // Thread Access Types
141 #define THREAD_QUERY_INFORMATION 0x0040
142 #define THREAD_SET_THREAD_TOKEN 0x0080
143 #define THREAD_IMPERSONATE 0x0100
144 #define THREAD_DIRECT_IMPERSONATION 0x0200
147 // Process Access Types
149 #define PROCESS_TERMINATE 0x0001
150 #define PROCESS_CREATE_THREAD 0x0002
151 #define PROCESS_SET_SESSIONID 0x0004
152 #define PROCESS_VM_OPERATION 0x0008
153 #define PROCESS_VM_READ 0x0010
154 #define PROCESS_VM_WRITE 0x0020
155 #define PROCESS_CREATE_PROCESS 0x0080
156 #define PROCESS_SET_QUOTA 0x0100
157 #define PROCESS_SET_INFORMATION 0x0200
158 #define PROCESS_QUERY_INFORMATION 0x0400
159 #define PROCESS_SUSPEND_RESUME 0x0800
160 #define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
161 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
162 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
166 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
172 // Thread Base Priorities
174 #define THREAD_BASE_PRIORITY_LOWRT 15
175 #define THREAD_BASE_PRIORITY_MAX 2
176 #define THREAD_BASE_PRIORITY_MIN -2
177 #define THREAD_BASE_PRIORITY_IDLE -15
182 #define TLS_MINIMUM_AVAILABLE 64
187 #define JOB_OBJECT_ASSIGN_PROCESS 0x1
188 #define JOB_OBJECT_SET_ATTRIBUTES 0x2
189 #define JOB_OBJECT_QUERY 0x4
190 #define JOB_OBJECT_TERMINATE 0x8
191 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x10
192 #define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
199 #define JOB_OBJECT_LIMIT_WORKINGSET 0x1
200 #define JOB_OBJECT_LIMIT_PROCESS_TIME 0x2
201 #define JOB_OBJECT_LIMIT_JOB_TIME 0x4
202 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x8
203 #define JOB_OBJECT_LIMIT_AFFINITY 0x10
204 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x20
205 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x40
206 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x80
207 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x100
208 #define JOB_OBJECT_LIMIT_JOB_MEMORY 0x200
209 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x400
210 #define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x800
211 #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x1000
212 #define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x2000
215 // Cross Thread Flags
217 #define CT_TERMINATED_BIT 0x1
218 #define CT_DEAD_THREAD_BIT 0x2
219 #define CT_HIDE_FROM_DEBUGGER_BIT 0x4
220 #define CT_ACTIVE_IMPERSONATION_INFO_BIT 0x8
221 #define CT_SYSTEM_THREAD_BIT 0x10
222 #define CT_HARD_ERRORS_ARE_DISABLED_BIT 0x20
223 #define CT_BREAK_ON_TERMINATION_BIT 0x40
224 #define CT_SKIP_CREATION_MSG_BIT 0x80
225 #define CT_SKIP_TERMINATION_MSG_BIT 0x100
228 // Same Thread Passive Flags
230 #define STP_ACTIVE_EX_WORKER_BIT 0x1
231 #define STP_EX_WORKER_CAN_WAIT_USER_BIT 0x2
232 #define STP_MEMORY_MAKER_BIT 0x4
233 #define STP_KEYED_EVENT_IN_USE_BIT 0x8
236 // Same Thread APC Flags
238 #define STA_LPC_RECEIVED_MSG_ID_VALID_BIT 0x1
239 #define STA_LPC_EXIT_THREAD_CALLED_BIT 0x2
240 #define STA_ADDRESS_SPACE_OWNER_BIT 0x4
241 #define STA_OWNS_WORKING_SET_BITS 0x1F8
244 // Kernel Process flags (maybe in ketypes.h?)
246 #define KPSF_AUTO_ALIGNMENT_BIT 0
247 #define KPSF_DISABLE_BOOST_BIT 1
252 #define PSF_CREATE_REPORTED_BIT 0x1
253 #define PSF_NO_DEBUG_INHERIT_BIT 0x2
254 #define PSF_PROCESS_EXITING_BIT 0x4
255 #define PSF_PROCESS_DELETE_BIT 0x8
256 #define PSF_WOW64_SPLIT_PAGES_BIT 0x10
257 #define PSF_VM_DELETED_BIT 0x20
258 #define PSF_OUTSWAP_ENABLED_BIT 0x40
259 #define PSF_OUTSWAPPED_BIT 0x80
260 #define PSF_FORK_FAILED_BIT 0x100
261 #define PSF_WOW64_VA_SPACE_4GB_BIT 0x200
262 #define PSF_ADDRESS_SPACE_INITIALIZED_BIT 0x400
263 #define PSF_SET_TIMER_RESOLUTION_BIT 0x1000
264 #define PSF_BREAK_ON_TERMINATION_BIT 0x2000
265 #define PSF_SESSION_CREATION_UNDERWAY_BIT 0x4000
266 #define PSF_WRITE_WATCH_BIT 0x8000
267 #define PSF_PROCESS_IN_SESSION_BIT 0x10000
268 #define PSF_OVERRIDE_ADDRESS_SPACE_BIT 0x20000
269 #define PSF_HAS_ADDRESS_SPACE_BIT 0x40000
270 #define PSF_LAUNCH_PREFETCHED_BIT 0x80000
271 #define PSF_INJECT_INPAGE_ERRORS_BIT 0x100000
272 #define PSF_VM_TOP_DOWN_BIT 0x200000
273 #define PSF_IMAGE_NOTIFY_DONE_BIT 0x400000
274 #define PSF_PDE_UPDATE_NEEDED_BIT 0x800000
275 #define PSF_VDM_ALLOWED_BIT 0x1000000
276 #define PSF_SWAP_ALLOWED_BIT 0x2000000
277 #define PSF_CREATE_FAILED_BIT 0x4000000
278 #define PSF_DEFAULT_IO_PRIORITY_BIT 0x8000000
281 // Vista Process Flags
283 #define PSF2_PROTECTED_BIT 0x800
289 #define TLS_EXPANSION_SLOTS 1024
291 #ifdef NTOS_MODE_USER
293 // Thread Native Base Priorities
295 #define LOW_PRIORITY 0
296 #define LOW_REALTIME_PRIORITY 16
297 #define HIGH_PRIORITY 31
298 #define MAXIMUM_PRIORITY 32
301 // Current Process/Thread built-in 'special' handles
303 #define NtCurrentProcess() ((HANDLE)(LONG_PTR)-1)
304 #define ZwCurrentProcess() NtCurrentProcess()
305 #define NtCurrentThread() ((HANDLE)(LONG_PTR)-2)
306 #define ZwCurrentThread() NtCurrentThread()
309 // Process/Thread/Job Information Classes for NtQueryInformationProcess/Thread/Job
311 typedef enum _PROCESSINFOCLASS
313 ProcessBasicInformation
,
319 ProcessRaisePriority
,
321 ProcessExceptionPort
,
323 ProcessLdtInformation
,
325 ProcessDefaultHardErrorMode
,
326 ProcessIoPortHandlers
,
327 ProcessPooledUsageAndLimits
,
328 ProcessWorkingSetWatch
,
330 ProcessEnableAlignmentFaultFixup
,
331 ProcessPriorityClass
,
332 ProcessWx86Information
,
335 ProcessPriorityBoost
,
337 ProcessSessionInformation
,
338 ProcessForegroundInformation
,
339 ProcessWow64Information
,
340 ProcessImageFileName
,
341 ProcessLUIDDeviceMapsEnabled
,
342 ProcessBreakOnTermination
,
343 ProcessDebugObjectHandle
,
345 ProcessHandleTracing
,
348 ProcessTlsInformation
,
350 ProcessImageInformation
,
353 ProcessInstrumentationCallback
,
354 ProcessThreadStackAllocation
,
355 ProcessWorkingSetWatchEx
,
356 ProcessImageFileNameWin32
,
357 ProcessImageFileMapping
,
358 ProcessAffinityUpdateMode
,
359 ProcessMemoryAllocationMode
,
363 typedef enum _THREADINFOCLASS
365 ThreadBasicInformation
,
370 ThreadImpersonationToken
,
371 ThreadDescriptorTableEntry
,
372 ThreadEnableAlignmentFaultFixup
,
373 ThreadEventPair_Reusable
,
374 ThreadQuerySetWin32StartAddress
,
376 ThreadPerformanceCount
,
378 ThreadIdealProcessor
,
380 ThreadSetTlsArrayAddress
,
382 ThreadHideFromDebugger
,
383 ThreadBreakOnTermination
,
384 ThreadSwitchLegacyState
,
386 ThreadLastSystemCall
,
390 ThreadActualBasePriority
,
391 ThreadTebInformation
,
398 typedef enum _PSPROCESSPRIORITYMODE
400 PsProcessPriorityForeground
,
401 PsProcessPriorityBackground
,
402 PsProcessPrioritySpinning
403 } PSPROCESSPRIORITYMODE
;
405 typedef enum _JOBOBJECTINFOCLASS
407 JobObjectBasicAccountingInformation
= 1,
408 JobObjectBasicLimitInformation
,
409 JobObjectBasicProcessIdList
,
410 JobObjectBasicUIRestrictions
,
411 JobObjectSecurityLimitInformation
,
412 JobObjectEndOfJobTimeInformation
,
413 JobObjectAssociateCompletionPortInformation
,
414 JobObjectBasicAndIoAccountingInformation
,
415 JobObjectExtendedLimitInformation
,
416 JobObjectJobSetInformation
,
417 MaxJobObjectInfoClass
418 } JOBOBJECTINFOCLASS
;
421 // Power Event Events for Win32K Power Event Callback
423 typedef enum _PSPOWEREVENTTYPE
427 PsW32PowerPolicyChanged
= 2,
428 PsW32SystemPowerState
= 3,
430 PsW32DisplayState
= 5,
431 PsW32CapabilitiesChanged
= 6,
432 PsW32SetStateFailed
= 7,
435 PsW32GdiPrepareResumeUI
= 10,
436 PsW32GdiOffRequest
= 11,
437 PsW32MonitorOff
= 12,
441 // Power State Tasks for Win32K Power State Callback
443 typedef enum _POWERSTATETASK
445 PowerState_BlockSessionSwitch
= 0,
447 PowerState_QueryApps
= 2,
448 PowerState_QueryServices
= 3,
449 PowerState_QueryAppsFailed
= 4,
450 PowerState_QueryServicesFailed
= 5,
451 PowerState_SuspendApps
= 6,
452 PowerState_SuspendServices
= 7,
453 PowerState_ShowUI
= 8,
454 PowerState_NotifyWL
= 9,
455 PowerState_ResumeApps
= 10,
456 PowerState_ResumeServices
= 11,
457 PowerState_UnBlockSessionSwitch
= 12,
459 PowerState_BlockInput
= 14,
460 PowerState_UnblockInput
= 15,
464 // Win32K Job Callback Types
466 typedef enum _PSW32JOBCALLOUTTYPE
468 PsW32JobCalloutSetInformation
= 0,
469 PsW32JobCalloutAddProcess
= 1,
470 PsW32JobCalloutTerminate
= 2,
471 } PSW32JOBCALLOUTTYPE
;
474 // Win32K Thread Callback Types
476 typedef enum _PSW32THREADCALLOUTTYPE
478 PsW32ThreadCalloutInitialize
,
479 PsW32ThreadCalloutExit
,
480 } PSW32THREADCALLOUTTYPE
;
483 // Declare empty structure definitions so that they may be referenced by
484 // routines before they are defined
489 struct _WIN32_POWEREVENT_PARAMETERS
;
490 struct _WIN32_POWERSTATE_PARAMETERS
;
491 struct _WIN32_JOBCALLOUT_PARAMETERS
;
492 struct _WIN32_OPENMETHOD_PARAMETERS
;
493 struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS
;
494 struct _WIN32_CLOSEMETHOD_PARAMETERS
;
495 struct _WIN32_DELETEMETHOD_PARAMETERS
;
496 struct _WIN32_PARSEMETHOD_PARAMETERS
;
499 // Win32K Process and Thread Callbacks
503 (NTAPI
*PKWIN32_PROCESS_CALLOUT
)(
504 _In_
struct _EPROCESS
*Process
,
510 (NTAPI
*PKWIN32_THREAD_CALLOUT
)(
511 _In_
struct _ETHREAD
*Thread
,
512 _In_ PSW32THREADCALLOUTTYPE Type
517 (NTAPI
*PKWIN32_GLOBALATOMTABLE_CALLOUT
)(
523 (NTAPI
*PKWIN32_POWEREVENT_CALLOUT
)(
524 _In_
struct _WIN32_POWEREVENT_PARAMETERS
*Parameters
529 (NTAPI
*PKWIN32_POWERSTATE_CALLOUT
)(
530 _In_
struct _WIN32_POWERSTATE_PARAMETERS
*Parameters
535 (NTAPI
*PKWIN32_JOB_CALLOUT
)(
536 _In_
struct _WIN32_JOBCALLOUT_PARAMETERS
*Parameters
541 (NTAPI
*PGDI_BATCHFLUSH_ROUTINE
)(
547 (NTAPI
*PKWIN32_OPENMETHOD_CALLOUT
)(
548 _In_
struct _WIN32_OPENMETHOD_PARAMETERS
*Parameters
553 (NTAPI
*PKWIN32_OKTOCLOSEMETHOD_CALLOUT
)(
554 _In_
struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS
*Parameters
559 (NTAPI
*PKWIN32_CLOSEMETHOD_CALLOUT
)(
560 _In_
struct _WIN32_CLOSEMETHOD_PARAMETERS
*Parameters
565 (NTAPI
*PKWIN32_DELETEMETHOD_CALLOUT
)(
566 _In_
struct _WIN32_DELETEMETHOD_PARAMETERS
*Parameters
571 (NTAPI
*PKWIN32_PARSEMETHOD_CALLOUT
)(
572 _In_
struct _WIN32_PARSEMETHOD_PARAMETERS
*Parameters
577 (NTAPI
*PKWIN32_WIN32DATACOLLECTION_CALLOUT
)(
578 _In_
struct _EPROCESS
*Process
,
588 (NTAPI
*PLEGO_NOTIFY_ROUTINE
)(
595 (NTAPI
*PPOST_PROCESS_INIT_ROUTINE
)(
600 // Descriptor Table Entry Definition
603 #define _DESCRIPTOR_TABLE_ENTRY_DEFINED
604 typedef struct _DESCRIPTOR_TABLE_ENTRY
607 LDT_ENTRY Descriptor
;
608 } DESCRIPTOR_TABLE_ENTRY
, *PDESCRIPTOR_TABLE_ENTRY
;
615 (NTAPI
*PPEBLOCKROUTINE
)(
620 // PEB Free Block Descriptor
622 typedef struct _PEB_FREE_BLOCK
624 struct _PEB_FREE_BLOCK
* Next
;
626 } PEB_FREE_BLOCK
, *PPEB_FREE_BLOCK
;
631 typedef struct _INITIAL_PEB
633 BOOLEAN InheritedAddressSpace
;
634 BOOLEAN ReadImageFileExecOptions
;
635 BOOLEAN BeingDebugged
;
639 #if (NTDDI_VERSION >= NTDDI_WS03)
642 BOOLEAN ImageUsesLargePages
:1;
643 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
644 BOOLEAN IsProtectedProcess
:1;
645 BOOLEAN IsLegacyProcess
:1;
656 } INITIAL_PEB
, *PINITIAL_PEB
;
661 typedef struct _INITIAL_TEB
663 PVOID PreviousStackBase
;
664 PVOID PreviousStackLimit
;
667 PVOID AllocatedStackBase
;
668 } INITIAL_TEB
, *PINITIAL_TEB
;
671 // TEB Active Frame Structures
673 typedef struct _TEB_ACTIVE_FRAME_CONTEXT
677 } TEB_ACTIVE_FRAME_CONTEXT
, *PTEB_ACTIVE_FRAME_CONTEXT
;
679 typedef struct _TEB_ACTIVE_FRAME
682 struct _TEB_ACTIVE_FRAME
*Previous
;
683 PTEB_ACTIVE_FRAME_CONTEXT Context
;
684 } TEB_ACTIVE_FRAME
, *PTEB_ACTIVE_FRAME
;
686 typedef struct _CLIENT_ID32
690 } CLIENT_ID32
, *PCLIENT_ID32
;
692 typedef struct _CLIENT_ID64
694 ULONG64 UniqueProcess
;
695 ULONG64 UniqueThread
;
696 } CLIENT_ID64
, *PCLIENT_ID64
;
698 #if (NTDDI_VERSION < NTDDI_WS03)
699 typedef struct _Wx86ThreadState
702 PVOID DeallocationCpu
;
703 BOOLEAN UseKnownWx86Dll
;
705 } Wx86ThreadState
, *PWx86ThreadState
;
710 // Process Environment Block (PEB)
711 // Thread Environment Block (TEB)
717 // Explicit 32 bit PEB/TEB
719 #define EXPLICIT_32BIT
721 #undef EXPLICIT_32BIT
724 // Explicit 64 bit PEB/TEB
726 #define EXPLICIT_64BIT
728 #undef EXPLICIT_64BIT
731 #ifdef NTOS_MODE_USER
734 // Process Information Structures for NtQueryProcessInformation
736 typedef struct _PROCESS_BASIC_INFORMATION
740 ULONG_PTR AffinityMask
;
741 KPRIORITY BasePriority
;
742 ULONG_PTR UniqueProcessId
;
743 ULONG_PTR InheritedFromUniqueProcessId
;
744 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
746 typedef struct _PROCESS_ACCESS_TOKEN
750 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
752 typedef struct _PROCESS_DEVICEMAP_INFORMATION
758 HANDLE DirectoryHandle
;
766 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
768 typedef struct _KERNEL_USER_TIMES
770 LARGE_INTEGER CreateTime
;
771 LARGE_INTEGER ExitTime
;
772 LARGE_INTEGER KernelTime
;
773 LARGE_INTEGER UserTime
;
774 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
776 typedef struct _POOLED_USAGE_AND_LIMITS
778 SIZE_T PeakPagedPoolUsage
;
779 SIZE_T PagedPoolUsage
;
780 SIZE_T PagedPoolLimit
;
781 SIZE_T PeakNonPagedPoolUsage
;
782 SIZE_T NonPagedPoolUsage
;
783 SIZE_T NonPagedPoolLimit
;
784 SIZE_T PeakPagefileUsage
;
785 SIZE_T PagefileUsage
;
786 SIZE_T PagefileLimit
;
787 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
789 typedef struct _PROCESS_SESSION_INFORMATION
792 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
796 typedef struct _PROCESS_PRIORITY_CLASS
800 } PROCESS_PRIORITY_CLASS
, *PPROCESS_PRIORITY_CLASS
;
802 typedef struct _PROCESS_FOREGROUND_BACKGROUND
805 } PROCESS_FOREGROUND_BACKGROUND
, *PPROCESS_FOREGROUND_BACKGROUND
;
808 // Thread Information Structures for NtQueryProcessInformation
810 typedef struct _THREAD_BASIC_INFORMATION
813 PVOID TebBaseAddress
;
815 KAFFINITY AffinityMask
;
817 KPRIORITY BasePriority
;
818 } THREAD_BASIC_INFORMATION
, *PTHREAD_BASIC_INFORMATION
;
820 #ifndef NTOS_MODE_USER
825 typedef struct _JOB_SET_ARRAY
830 } JOB_SET_ARRAY
, *PJOB_SET_ARRAY
;
833 // EPROCESS Quota Structures
835 typedef struct _EPROCESS_QUOTA_ENTRY
841 } EPROCESS_QUOTA_ENTRY
, *PEPROCESS_QUOTA_ENTRY
;
843 typedef struct _EPROCESS_QUOTA_BLOCK
845 EPROCESS_QUOTA_ENTRY QuotaEntry
[3];
846 LIST_ENTRY QuotaList
;
847 ULONG ReferenceCount
;
849 } EPROCESS_QUOTA_BLOCK
, *PEPROCESS_QUOTA_BLOCK
;
852 // Process Pagefault History
854 typedef struct _PAGEFAULT_HISTORY
860 PROCESS_WS_WATCH_INFORMATION WatchInfo
[1];
861 } PAGEFAULT_HISTORY
, *PPAGEFAULT_HISTORY
;
864 // Process Impersonation Information
866 typedef struct _PS_IMPERSONATION_INFORMATION
870 BOOLEAN EffectiveOnly
;
871 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
872 } PS_IMPERSONATION_INFORMATION
, *PPS_IMPERSONATION_INFORMATION
;
875 // Process Termination Port
877 typedef struct _TERMINATION_PORT
879 struct _TERMINATION_PORT
*Next
;
881 } TERMINATION_PORT
, *PTERMINATION_PORT
;
884 // Per-Process APC Rate Limiting
886 typedef struct _PSP_RATE_APC
890 SINGLE_LIST_ENTRY NextApc
;
891 ULONGLONG ExcessCycles
;
893 ULONGLONG TargetGEneration
;
895 } PSP_RATE_APC
, *PPSP_RATE_APC
;
898 // Executive Thread (ETHREAD)
900 typedef struct _ETHREAD
903 LARGE_INTEGER CreateTime
;
906 LARGE_INTEGER ExitTime
;
907 LIST_ENTRY LpcReplyChain
;
908 LIST_ENTRY KeyedWaitChain
;
915 LIST_ENTRY PostBlockList
;
918 struct _TERMINATION_PORT
*TerminationPort
;
919 struct _ETHREAD
*ReaperLink
;
920 PVOID KeyedWaitValue
;
921 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
922 PVOID Win32StartParameter
;
925 KSPIN_LOCK ActiveTimerListLock
;
926 LIST_ENTRY ActiveTimerListHead
;
928 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
929 KSEMAPHORE KeyedWaitSemaphore
;
933 KSEMAPHORE LpcReplySemaphore
;
934 KSEMAPHORE KeyedWaitSemaphore
;
938 PVOID LpcReplyMessage
;
939 PVOID LpcWaitingOnPort
;
942 PPS_IMPERSONATION_INFORMATION ImpersonationInfo
;
944 ULONG_PTR TopLevelIrp
;
945 PDEVICE_OBJECT DeviceToVerify
;
946 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
947 PPSP_RATE_APC RateControlApc
;
949 struct _EPROCESS
*ThreadsProcess
;
951 PVOID Win32StartAddress
;
954 PKSTART_ROUTINE StartAddress
;
955 ULONG LpcReceivedMessageId
;
957 LIST_ENTRY ThreadListEntry
;
958 EX_RUNDOWN_REF RundownProtect
;
959 EX_PUSH_LOCK ThreadLock
;
960 #if (NTDDI_VERSION < NTDDI_LONGHORN)
961 ULONG LpcReplyMessageId
;
963 ULONG ReadClusterSize
;
964 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
967 ACCESS_MASK GrantedAccess
;
974 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
975 ULONG ThreadInserted
:1;
979 ULONG HideFromDebugger
:1;
980 ULONG ActiveImpersonationInfo
:1;
981 ULONG SystemThread
:1;
982 ULONG HardErrorsAreDisabled
:1;
983 ULONG BreakOnTermination
:1;
984 ULONG SkipCreationMsg
:1;
985 ULONG SkipTerminationMsg
:1;
986 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
987 ULONG CreateMsgSent
:1;
988 ULONG ThreadIoPriority
:3;
989 ULONG ThreadPagePriority
:3;
990 ULONG PendingRatecontrol
:1;
993 ULONG CrossThreadFlags
;
999 ULONG ActiveExWorker
:1;
1000 ULONG ExWorkerCanWaitUser
:1;
1001 ULONG MemoryMaker
:1;
1002 ULONG KeyedEventInUse
:1;
1003 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1004 ULONG RateApcState
:2;
1007 ULONG SameThreadPassiveFlags
;
1013 ULONG LpcReceivedMsgIdValid
:1;
1014 ULONG LpcExitThreadCalled
:1;
1015 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1018 ULONG AddressSpaceOwner
:1;
1020 ULONG OwnsProcessWorkingSetExclusive
:1;
1021 ULONG OwnsProcessWorkingSetShared
:1;
1022 ULONG OwnsSystemWorkingSetExclusive
:1;
1023 ULONG OwnsSystemWorkingSetShared
:1;
1024 ULONG OwnsSessionWorkingSetExclusive
:1;
1025 ULONG OwnsSessionWorkingSetShared
:1;
1026 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1027 ULONG SupressSymbolLoad
:1;
1029 ULONG PriorityRegionActive
:4;
1034 ULONG SameThreadApcFlags
;
1036 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1037 UCHAR CacheManagerActive
;
1039 UCHAR ForwardClusterOnly
;
1041 UCHAR DisablePageFaultClustering
;
1042 UCHAR ActiveFaultCount
;
1043 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1044 ULONG AlpcMessageId
;
1048 ULONG AlpcReceiveAttributeSet
;
1050 LIST_ENTRY AlpcWaitListEntry
;
1051 KSEMAPHORE AlpcWaitSemaphore
;
1052 ULONG CacheManagerCount
;
1057 // Executive Process (EPROCESS)
1059 typedef struct _EPROCESS
1062 EX_PUSH_LOCK ProcessLock
;
1063 LARGE_INTEGER CreateTime
;
1064 LARGE_INTEGER ExitTime
;
1065 EX_RUNDOWN_REF RundownProtect
;
1066 HANDLE UniqueProcessId
;
1067 LIST_ENTRY ActiveProcessLinks
;
1068 SIZE_T QuotaUsage
[3]; /* 0=PagedPool, 1=NonPagedPool, 2=Pagefile */
1069 SIZE_T QuotaPeak
[3]; /* ditto */
1070 SIZE_T CommitCharge
;
1071 SIZE_T PeakVirtualSize
;
1073 LIST_ENTRY SessionProcessLinks
;
1075 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1078 PVOID ExceptionPortData
;
1079 ULONG ExceptionPortValue
;
1080 UCHAR ExceptionPortState
:3;
1083 PVOID ExceptionPort
;
1085 PHANDLE_TABLE ObjectTable
;
1087 PFN_NUMBER WorkingSetPage
;
1088 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1089 EX_PUSH_LOCK AddressCreationLock
;
1090 PETHREAD RotateInProgress
;
1092 KGUARDED_MUTEX AddressCreationLock
;
1093 KSPIN_LOCK HyperSpaceLock
;
1095 PETHREAD ForkInProgress
;
1096 ULONG_PTR HardwareTrigger
;
1097 PMM_AVL_TABLE PhysicalVadRoot
;
1099 PFN_NUMBER NumberOfPrivatePages
;
1100 PFN_NUMBER NumberOfLockedPages
;
1101 PVOID
*Win32Process
;
1103 PVOID SectionObject
;
1104 PVOID SectionBaseAddress
;
1105 PEPROCESS_QUOTA_BLOCK QuotaBlock
;
1106 PPAGEFAULT_HISTORY WorkingSetWatch
;
1107 PVOID Win32WindowStation
;
1108 HANDLE InheritedFromUniqueProcessId
;
1109 PVOID LdtInformation
;
1113 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1114 PVOID EtwDataSource
;
1121 HARDWARE_PTE PageDirectoryPte
;
1125 CHAR ImageFileName
[16];
1126 LIST_ENTRY JobLinks
;
1127 PVOID LockedPagesList
;
1128 LIST_ENTRY ThreadListHead
;
1131 struct _WOW64_PROCESS
*Wow64Process
;
1135 ULONG ActiveThreads
;
1136 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1137 ULONG ImagePathHash
;
1139 ACCESS_MASK GrantedAccess
;
1141 ULONG DefaultHardErrorProcessing
;
1142 NTSTATUS LastThreadExitStatus
;
1144 EX_FAST_REF PrefetchTrace
;
1145 LARGE_INTEGER ReadOperationCount
;
1146 LARGE_INTEGER WriteOperationCount
;
1147 LARGE_INTEGER OtherOperationCount
;
1148 LARGE_INTEGER ReadTransferCount
;
1149 LARGE_INTEGER WriteTransferCount
;
1150 LARGE_INTEGER OtherTransferCount
;
1151 SIZE_T CommitChargeLimit
;
1152 SIZE_T CommitChargePeak
;
1154 SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo
;
1159 LIST_ENTRY MmProcessLinks
;
1161 ULONG ModifiedPageCount
;
1162 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1167 ULONG JobNotReallyActive
:1;
1168 ULONG AccountingFolded
:1;
1169 ULONG NewProcessReported
:1;
1170 ULONG ExitProcessReported
:1;
1171 ULONG ReportCommitChanges
:1;
1172 ULONG LastReportMemory
:1;
1173 ULONG ReportPhysicalPageChanges
:1;
1174 ULONG HandleTableRundown
:1;
1175 ULONG NeedsHandleRundown
:1;
1176 ULONG RefTraceEnabled
:1;
1178 ULONG ProtectedProcess
:1;
1179 ULONG DefaultPagePriority
:3;
1180 ULONG ProcessDeleteSelf
:1;
1181 ULONG ProcessVerifierTarget
:1;
1192 ULONG CreateReported
:1;
1193 ULONG NoDebugInherit
:1;
1194 ULONG ProcessExiting
:1;
1195 ULONG ProcessDelete
:1;
1196 ULONG Wow64SplitPages
:1;
1198 ULONG OutswapEnabled
:1;
1201 ULONG Wow64VaSpace4Gb
:1;
1202 ULONG AddressSpaceInitialized
:2;
1203 ULONG SetTimerResolution
:1;
1204 ULONG BreakOnTermination
:1;
1205 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1206 ULONG DeprioritizeViews
:1;
1208 ULONG SessionCreationUnderway
:1;
1211 ULONG ProcessInSession
:1;
1212 ULONG OverrideAddressSpace
:1;
1213 ULONG HasAddressSpace
:1;
1214 ULONG LaunchPrefetched
:1;
1215 ULONG InjectInpageErrors
:1;
1217 ULONG ImageNotifyDone
:1;
1218 ULONG PdeUpdateNeeded
:1;
1220 ULONG SmapAllowed
:1;
1221 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1222 ULONG ProcessInserted
:1;
1224 ULONG CreateFailed
:1;
1226 ULONG DefaultIoPriority
:3;
1227 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1228 ULONG SparePsFlags1
:2;
1236 NTSTATUS ExitStatus
;
1237 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1240 USHORT NextPageColor
;
1246 UCHAR SubSystemMinorVersion
;
1247 UCHAR SubSystemMajorVersion
;
1249 USHORT SubSystemVersion
;
1251 UCHAR PriorityClass
;
1252 MM_AVL_TABLE VadRoot
;
1257 // Job Token Filter Data
1259 #include <pshpack1.h>
1260 typedef struct _PS_JOB_TOKEN_FILTER
1262 ULONG CapturedSidCount
;
1263 PSID_AND_ATTRIBUTES CapturedSids
;
1264 ULONG CapturedSidsLength
;
1265 ULONG CapturedGroupCount
;
1266 PSID_AND_ATTRIBUTES CapturedGroups
;
1267 ULONG CapturedGroupsLength
;
1268 ULONG CapturedPrivilegeCount
;
1269 PLUID_AND_ATTRIBUTES CapturedPrivileges
;
1270 ULONG CapturedPrivilegesLength
;
1271 } PS_JOB_TOKEN_FILTER
, *PPS_JOB_TOKEN_FILTER
;
1274 // Executive Job (EJOB)
1276 typedef struct _EJOB
1279 LIST_ENTRY JobLinks
;
1280 LIST_ENTRY ProcessListHead
;
1282 LARGE_INTEGER TotalUserTime
;
1283 LARGE_INTEGER TotalKernelTime
;
1284 LARGE_INTEGER ThisPeriodTotalUserTime
;
1285 LARGE_INTEGER ThisPeriodTotalKernelTime
;
1286 ULONG TotalPageFaultCount
;
1287 ULONG TotalProcesses
;
1288 ULONG ActiveProcesses
;
1289 ULONG TotalTerminatedProcesses
;
1290 LARGE_INTEGER PerProcessUserTimeLimit
;
1291 LARGE_INTEGER PerJobUserTimeLimit
;
1293 ULONG MinimumWorkingSetSize
;
1294 ULONG MaximumWorkingSetSize
;
1295 ULONG ActiveProcessLimit
;
1297 UCHAR PriorityClass
;
1298 ULONG UIRestrictionsClass
;
1299 ULONG SecurityLimitFlags
;
1301 PPS_JOB_TOKEN_FILTER Filter
;
1302 ULONG EndOfJobTimeAction
;
1303 PVOID CompletionPort
;
1304 PVOID CompletionKey
;
1306 ULONG SchedulingClass
;
1307 ULONGLONG ReadOperationCount
;
1308 ULONGLONG WriteOperationCount
;
1309 ULONGLONG OtherOperationCount
;
1310 ULONGLONG ReadTransferCount
;
1311 ULONGLONG WriteTransferCount
;
1312 ULONGLONG OtherTransferCount
;
1314 ULONG ProcessMemoryLimit
;
1315 ULONG JobMemoryLimit
;
1316 ULONG PeakProcessMemoryUsed
;
1317 ULONG PeakJobMemoryUsed
;
1318 ULONG CurrentJobMemoryUsed
;
1319 #if (NTDDI_VERSION >= NTDDI_WINXP) && (NTDDI_VERSION < NTDDI_WS03)
1320 FAST_MUTEX MemoryLimitsLock
;
1321 #elif (NTDDI_VERSION >= NTDDI_WS03) && (NTDDI_VERSION < NTDDI_LONGHORN)
1322 KGUARDED_MUTEX MemoryLimitsLock
;
1323 #elif (NTDDI_VERSION >= NTDDI_LONGHORN)
1324 EX_PUSH_LOCK MemoryLimitsLock
;
1326 LIST_ENTRY JobSetLinks
;
1330 #include <poppack.h>
1333 // Win32K Callback Registration Data
1335 typedef struct _WIN32_POWEREVENT_PARAMETERS
1337 PSPOWEREVENTTYPE EventNumber
;
1339 } WIN32_POWEREVENT_PARAMETERS
, *PWIN32_POWEREVENT_PARAMETERS
;
1341 typedef struct _WIN32_POWERSTATE_PARAMETERS
1344 POWER_ACTION SystemAction
;
1345 SYSTEM_POWER_STATE MinSystemState
;
1347 POWERSTATETASK PowerStateTask
;
1348 } WIN32_POWERSTATE_PARAMETERS
, *PWIN32_POWERSTATE_PARAMETERS
;
1350 typedef struct _WIN32_JOBCALLOUT_PARAMETERS
1353 PSW32JOBCALLOUTTYPE CalloutType
;
1355 } WIN32_JOBCALLOUT_PARAMETERS
, *PWIN32_JOBCALLOUT_PARAMETERS
;
1357 typedef struct _WIN32_OPENMETHOD_PARAMETERS
1359 OB_OPEN_REASON OpenReason
;
1362 ULONG GrantedAccess
;
1364 } WIN32_OPENMETHOD_PARAMETERS
, *PWIN32_OPENMETHOD_PARAMETERS
;
1366 typedef struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS
1371 KPROCESSOR_MODE PreviousMode
;
1372 } WIN32_OKAYTOCLOSEMETHOD_PARAMETERS
, *PWIN32_OKAYTOCLOSEMETHOD_PARAMETERS
;
1374 typedef struct _WIN32_CLOSEMETHOD_PARAMETERS
1378 ACCESS_MASK AccessMask
;
1379 ULONG ProcessHandleCount
;
1380 ULONG SystemHandleCount
;
1381 } WIN32_CLOSEMETHOD_PARAMETERS
, *PWIN32_CLOSEMETHOD_PARAMETERS
;
1383 typedef struct _WIN32_DELETEMETHOD_PARAMETERS
1386 } WIN32_DELETEMETHOD_PARAMETERS
, *PWIN32_DELETEMETHOD_PARAMETERS
;
1388 typedef struct _WIN32_PARSEMETHOD_PARAMETERS
1392 PACCESS_STATE AccessState
;
1393 KPROCESSOR_MODE AccessMode
;
1395 _Out_ PUNICODE_STRING CompleteName
;
1396 PUNICODE_STRING RemainingName
;
1398 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
1400 } WIN32_PARSEMETHOD_PARAMETERS
, *PWIN32_PARSEMETHOD_PARAMETERS
;
1402 typedef struct _WIN32_CALLOUTS_FPNS
1404 PKWIN32_PROCESS_CALLOUT ProcessCallout
;
1405 PKWIN32_THREAD_CALLOUT ThreadCallout
;
1406 PKWIN32_GLOBALATOMTABLE_CALLOUT GlobalAtomTableCallout
;
1407 PKWIN32_POWEREVENT_CALLOUT PowerEventCallout
;
1408 PKWIN32_POWERSTATE_CALLOUT PowerStateCallout
;
1409 PKWIN32_JOB_CALLOUT JobCallout
;
1410 PGDI_BATCHFLUSH_ROUTINE BatchFlushRoutine
;
1411 PKWIN32_OPENMETHOD_CALLOUT DesktopOpenProcedure
;
1412 PKWIN32_OKTOCLOSEMETHOD_CALLOUT DesktopOkToCloseProcedure
;
1413 PKWIN32_CLOSEMETHOD_CALLOUT DesktopCloseProcedure
;
1414 PKWIN32_DELETEMETHOD_CALLOUT DesktopDeleteProcedure
;
1415 PKWIN32_OKTOCLOSEMETHOD_CALLOUT WindowStationOkToCloseProcedure
;
1416 PKWIN32_CLOSEMETHOD_CALLOUT WindowStationCloseProcedure
;
1417 PKWIN32_DELETEMETHOD_CALLOUT WindowStationDeleteProcedure
;
1418 PKWIN32_PARSEMETHOD_CALLOUT WindowStationParseProcedure
;
1419 PKWIN32_OPENMETHOD_CALLOUT WindowStationOpenProcedure
;
1420 PKWIN32_WIN32DATACOLLECTION_CALLOUT Win32DataCollectionProcedure
;
1421 } WIN32_CALLOUTS_FPNS
, *PWIN32_CALLOUTS_FPNS
;
1423 #endif // !NTOS_MODE_USER
1425 #endif // _PSTYPES_H