1 /******************************************************************************
2 * Process Manager Types *
3 ******************************************************************************/
6 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
7 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
8 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
9 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
10 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
12 /* Thread Access Rights */
13 #define THREAD_TERMINATE 0x0001
14 #define THREAD_SUSPEND_RESUME 0x0002
15 #define THREAD_ALERT 0x0004
16 #define THREAD_GET_CONTEXT 0x0008
17 #define THREAD_SET_CONTEXT 0x0010
18 #define THREAD_SET_INFORMATION 0x0020
19 #define THREAD_SET_LIMITED_INFORMATION 0x0400
20 #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
22 #define PROCESS_DUP_HANDLE (0x0040)
24 #if (NTDDI_VERSION >= NTDDI_VISTA)
25 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
27 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
30 #if (NTDDI_VERSION >= NTDDI_VISTA)
31 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
33 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
36 #define LOW_PRIORITY 0
37 #define LOW_REALTIME_PRIORITY 16
38 #define HIGH_PRIORITY 31
39 #define MAXIMUM_PRIORITY 32
44 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
45 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
46 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
47 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
48 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
50 typedef struct _QUOTA_LIMITS
{
51 SIZE_T PagedPoolLimit
;
52 SIZE_T NonPagedPoolLimit
;
53 SIZE_T MinimumWorkingSetSize
;
54 SIZE_T MaximumWorkingSetSize
;
56 LARGE_INTEGER TimeLimit
;
57 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
59 typedef union _RATE_QUOTA_LIMIT
{
61 _ANONYMOUS_STRUCT
struct {
65 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
67 typedef struct _QUOTA_LIMITS_EX
{
68 SIZE_T PagedPoolLimit
;
69 SIZE_T NonPagedPoolLimit
;
70 SIZE_T MinimumWorkingSetSize
;
71 SIZE_T MaximumWorkingSetSize
;
73 LARGE_INTEGER TimeLimit
;
74 SIZE_T WorkingSetLimit
;
79 RATE_QUOTA_LIMIT CpuRateLimit
;
80 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
82 typedef struct _IO_COUNTERS
{
83 ULONGLONG ReadOperationCount
;
84 ULONGLONG WriteOperationCount
;
85 ULONGLONG OtherOperationCount
;
86 ULONGLONG ReadTransferCount
;
87 ULONGLONG WriteTransferCount
;
88 ULONGLONG OtherTransferCount
;
89 } IO_COUNTERS
, *PIO_COUNTERS
;
91 typedef struct _VM_COUNTERS
{
92 SIZE_T PeakVirtualSize
;
95 SIZE_T PeakWorkingSetSize
;
96 SIZE_T WorkingSetSize
;
97 SIZE_T QuotaPeakPagedPoolUsage
;
98 SIZE_T QuotaPagedPoolUsage
;
99 SIZE_T QuotaPeakNonPagedPoolUsage
;
100 SIZE_T QuotaNonPagedPoolUsage
;
101 SIZE_T PagefileUsage
;
102 SIZE_T PeakPagefileUsage
;
103 } VM_COUNTERS
, *PVM_COUNTERS
;
105 typedef struct _VM_COUNTERS_EX
{
106 SIZE_T PeakVirtualSize
;
108 ULONG PageFaultCount
;
109 SIZE_T PeakWorkingSetSize
;
110 SIZE_T WorkingSetSize
;
111 SIZE_T QuotaPeakPagedPoolUsage
;
112 SIZE_T QuotaPagedPoolUsage
;
113 SIZE_T QuotaPeakNonPagedPoolUsage
;
114 SIZE_T QuotaNonPagedPoolUsage
;
115 SIZE_T PagefileUsage
;
116 SIZE_T PeakPagefileUsage
;
118 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
120 #define MAX_HW_COUNTERS 16
121 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
123 typedef enum _HARDWARE_COUNTER_TYPE
{
125 MaxHardwareCounterType
126 } HARDWARE_COUNTER_TYPE
, *PHARDWARE_COUNTER_TYPE
;
128 typedef struct _HARDWARE_COUNTER
{
129 HARDWARE_COUNTER_TYPE Type
;
132 } HARDWARE_COUNTER
, *PHARDWARE_COUNTER
;
134 typedef struct _POOLED_USAGE_AND_LIMITS
{
135 SIZE_T PeakPagedPoolUsage
;
136 SIZE_T PagedPoolUsage
;
137 SIZE_T PagedPoolLimit
;
138 SIZE_T PeakNonPagedPoolUsage
;
139 SIZE_T NonPagedPoolUsage
;
140 SIZE_T NonPagedPoolLimit
;
141 SIZE_T PeakPagefileUsage
;
142 SIZE_T PagefileUsage
;
143 SIZE_T PagefileLimit
;
144 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
146 typedef struct _PROCESS_ACCESS_TOKEN
{
149 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
151 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
152 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
154 typedef struct _PROCESS_EXCEPTION_PORT
{
155 IN HANDLE ExceptionPortHandle
;
156 IN OUT ULONG StateFlags
;
157 } PROCESS_EXCEPTION_PORT
, *PPROCESS_EXCEPTION_PORT
;
160 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
165 typedef struct _PS_CREATE_NOTIFY_INFO
{
167 _ANONYMOUS_UNION
union {
169 _ANONYMOUS_STRUCT
struct {
170 IN ULONG FileOpenNameAvailable
:1;
171 IN ULONG Reserved
:31;
174 IN HANDLE ParentProcessId
;
175 IN CLIENT_ID CreatingThreadId
;
176 IN OUT
struct _FILE_OBJECT
*FileObject
;
177 IN PCUNICODE_STRING ImageFileName
;
178 IN PCUNICODE_STRING CommandLine OPTIONAL
;
179 IN OUT NTSTATUS CreationStatus
;
180 } PS_CREATE_NOTIFY_INFO
, *PPS_CREATE_NOTIFY_INFO
;
183 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE_EX
)(
184 IN OUT PEPROCESS Process
,
186 IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL
);
189 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
194 #define IMAGE_ADDRESSING_MODE_32BIT 3
196 typedef struct _IMAGE_INFO
{
197 _ANONYMOUS_UNION
union {
199 _ANONYMOUS_STRUCT
struct {
200 ULONG ImageAddressingMode
:8;
201 ULONG SystemModeImage
:1;
202 ULONG ImageMappedToAllPids
:1;
203 ULONG ExtendedInfoPresent
:1;
210 ULONG ImageSectionNumber
;
211 } IMAGE_INFO
, *PIMAGE_INFO
;
213 typedef struct _IMAGE_INFO_EX
{
215 IMAGE_INFO ImageInfo
;
216 struct _FILE_OBJECT
*FileObject
;
217 } IMAGE_INFO_EX
, *PIMAGE_INFO_EX
;
220 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
221 IN PUNICODE_STRING FullImageName
,
223 IN PIMAGE_INFO ImageInfo
);
225 #define THREAD_CSWITCH_PMU_DISABLE FALSE
226 #define THREAD_CSWITCH_PMU_ENABLE TRUE
228 #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
230 #define PROCESS_HANDLE_TRACING_MAX_STACKS 16
232 typedef struct _NT_TIB
{
233 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
237 _ANONYMOUS_UNION
union {
241 PVOID ArbitraryUserPointer
;
242 struct _NT_TIB
*Self
;
245 typedef struct _NT_TIB32
{
250 _ANONYMOUS_UNION
union {
254 ULONG ArbitraryUserPointer
;
256 } NT_TIB32
,*PNT_TIB32
;
258 typedef struct _NT_TIB64
{
259 ULONG64 ExceptionList
;
262 ULONG64 SubSystemTib
;
263 _ANONYMOUS_UNION
union {
267 ULONG64 ArbitraryUserPointer
;
269 } NT_TIB64
,*PNT_TIB64
;
271 typedef enum _PROCESSINFOCLASS
{
272 ProcessBasicInformation
,
278 ProcessRaisePriority
,
280 ProcessExceptionPort
,
282 ProcessLdtInformation
,
284 ProcessDefaultHardErrorMode
,
285 ProcessIoPortHandlers
,
286 ProcessPooledUsageAndLimits
,
287 ProcessWorkingSetWatch
,
289 ProcessEnableAlignmentFaultFixup
,
290 ProcessPriorityClass
,
291 ProcessWx86Information
,
294 ProcessPriorityBoost
,
296 ProcessSessionInformation
,
297 ProcessForegroundInformation
,
298 ProcessWow64Information
,
299 ProcessImageFileName
,
300 ProcessLUIDDeviceMapsEnabled
,
301 ProcessBreakOnTermination
,
302 ProcessDebugObjectHandle
,
304 ProcessHandleTracing
,
307 ProcessTlsInformation
,
309 ProcessImageInformation
,
312 ProcessInstrumentationCallback
,
313 ProcessThreadStackAllocation
,
314 ProcessWorkingSetWatchEx
,
315 ProcessImageFileNameWin32
,
316 ProcessImageFileMapping
,
317 ProcessAffinityUpdateMode
,
318 ProcessMemoryAllocationMode
,
319 ProcessGroupInformation
,
320 ProcessTokenVirtualizationEnabled
,
321 ProcessConsoleHostProcess
,
322 ProcessWindowInformation
,
326 typedef enum _THREADINFOCLASS
{
327 ThreadBasicInformation
,
332 ThreadImpersonationToken
,
333 ThreadDescriptorTableEntry
,
334 ThreadEnableAlignmentFaultFixup
,
335 ThreadEventPair_Reusable
,
336 ThreadQuerySetWin32StartAddress
,
338 ThreadPerformanceCount
,
340 ThreadIdealProcessor
,
342 ThreadSetTlsArrayAddress
,
344 ThreadHideFromDebugger
,
345 ThreadBreakOnTermination
,
346 ThreadSwitchLegacyState
,
348 ThreadLastSystemCall
,
352 ThreadActualBasePriority
,
353 ThreadTebInformation
,
357 ThreadGroupInformation
,
358 ThreadUmsInformation
,
359 ThreadCounterProfiling
,
360 ThreadIdealProcessorEx
,
364 typedef struct _PAGE_PRIORITY_INFORMATION
{
366 } PAGE_PRIORITY_INFORMATION
, *PPAGE_PRIORITY_INFORMATION
;
368 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
371 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
373 typedef struct _PROCESS_BASIC_INFORMATION
{
375 struct _PEB
*PebBaseAddress
;
376 ULONG_PTR AffinityMask
;
377 KPRIORITY BasePriority
;
378 ULONG_PTR UniqueProcessId
;
379 ULONG_PTR InheritedFromUniqueProcessId
;
380 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
382 typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION
{
384 PROCESS_BASIC_INFORMATION BasicInfo
;
385 _ANONYMOUS_UNION
union {
387 _ANONYMOUS_STRUCT
struct {
388 ULONG IsProtectedProcess
:1;
389 ULONG IsWow64Process
:1;
390 ULONG IsProcessDeleting
:1;
391 ULONG IsCrossSessionCreate
:1;
395 } PROCESS_EXTENDED_BASIC_INFORMATION
, *PPROCESS_EXTENDED_BASIC_INFORMATION
;
397 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
398 _ANONYMOUS_UNION
union {
400 HANDLE DirectoryHandle
;
407 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
409 typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX
{
410 _ANONYMOUS_UNION
union {
412 HANDLE DirectoryHandle
;
420 } PROCESS_DEVICEMAP_INFORMATION_EX
, *PPROCESS_DEVICEMAP_INFORMATION_EX
;
422 typedef struct _PROCESS_SESSION_INFORMATION
{
424 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
426 typedef struct _PROCESS_HANDLE_TRACING_ENABLE
{
428 } PROCESS_HANDLE_TRACING_ENABLE
, *PPROCESS_HANDLE_TRACING_ENABLE
;
430 typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX
{
433 } PROCESS_HANDLE_TRACING_ENABLE_EX
, *PPROCESS_HANDLE_TRACING_ENABLE_EX
;
435 typedef struct _PROCESS_HANDLE_TRACING_ENTRY
{
439 PVOID Stacks
[PROCESS_HANDLE_TRACING_MAX_STACKS
];
440 } PROCESS_HANDLE_TRACING_ENTRY
, *PPROCESS_HANDLE_TRACING_ENTRY
;
442 typedef struct _PROCESS_HANDLE_TRACING_QUERY
{
445 PROCESS_HANDLE_TRACING_ENTRY HandleTrace
[1];
446 } PROCESS_HANDLE_TRACING_QUERY
, *PPROCESS_HANDLE_TRACING_QUERY
;
448 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;