[SDK][NDK][PSTYPES] Align the PROCESS_PRIORITY_CLASS structure during compile time...
[reactos.git] / sdk / include / ndk / pstypes.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 pstypes.h
8
9 Abstract:
10
11 Type definitions for the Process Manager
12
13 Author:
14
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16
17 --*/
18
19 #ifndef _PSTYPES_H
20 #define _PSTYPES_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26 #include <ldrtypes.h>
27 #include <mmtypes.h>
28 #include <obtypes.h>
29 #include <rtltypes.h>
30 #ifndef NTOS_MODE_USER
31 #include <extypes.h>
32 #include <setypes.h>
33 #endif
34
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38
39 #ifndef NTOS_MODE_USER
40
41 //
42 // Kernel Exported Object Types
43 //
44 extern POBJECT_TYPE NTSYSAPI PsJobType;
45
46 #endif // !NTOS_MODE_USER
47
48 //
49 // KUSER_SHARED_DATA location in User Mode
50 //
51 #define USER_SHARED_DATA (0x7FFE0000)
52
53 //
54 // Global Flags
55 //
56 #define FLG_STOP_ON_EXCEPTION 0x00000001
57 #define FLG_SHOW_LDR_SNAPS 0x00000002
58 #define FLG_DEBUG_INITIAL_COMMAND 0x00000004
59 #define FLG_STOP_ON_HUNG_GUI 0x00000008
60 #define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
61 #define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
62 #define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
63 #define FLG_HEAP_VALIDATE_ALL 0x00000080
64 #define FLG_APPLICATION_VERIFIER 0x00000100
65 #define FLG_POOL_ENABLE_TAGGING 0x00000400
66 #define FLG_HEAP_ENABLE_TAGGING 0x00000800
67 #define FLG_USER_STACK_TRACE_DB 0x00001000
68 #define FLG_KERNEL_STACK_TRACE_DB 0x00002000
69 #define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
70 #define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
71 #define FLG_DISABLE_STACK_EXTENSION 0x00010000
72 #define FLG_ENABLE_CSRDEBUG 0x00020000
73 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
74 #define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
75 #if (NTDDI_VERSION < NTDDI_WINXP)
76 #define FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
77 #else
78 #define FLG_ENABLE_SYSTEM_CRIT_BREAKS 0x00100000
79 #endif
80 #define FLG_HEAP_DISABLE_COALESCING 0x00200000
81 #define FLG_ENABLE_CLOSE_EXCEPTIONS 0x00400000
82 #define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
83 #define FLG_ENABLE_HANDLE_TYPE_TAGGING 0x01000000
84 #define FLG_HEAP_PAGE_ALLOCS 0x02000000
85 #define FLG_DEBUG_INITIAL_COMMAND_EX 0x04000000
86 #define FLG_VALID_BITS 0x07FFFFFF
87
88 //
89 // Flags for NtCreateProcessEx
90 //
91 #define PROCESS_CREATE_FLAGS_BREAKAWAY 0x00000001
92 #define PROCESS_CREATE_FLAGS_NO_DEBUG_INHERIT 0x00000002
93 #define PROCESS_CREATE_FLAGS_INHERIT_HANDLES 0x00000004
94 #define PROCESS_CREATE_FLAGS_OVERRIDE_ADDRESS_SPACE 0x00000008
95 #define PROCESS_CREATE_FLAGS_LARGE_PAGES 0x00000010
96 #define PROCESS_CREATE_FLAGS_ALL_LARGE_PAGE_FLAGS PROCESS_CREATE_FLAGS_LARGE_PAGES
97 #define PROCESS_CREATE_FLAGS_LEGAL_MASK (PROCESS_CREATE_FLAGS_BREAKAWAY | \
98 PROCESS_CREATE_FLAGS_NO_DEBUG_INHERIT | \
99 PROCESS_CREATE_FLAGS_INHERIT_HANDLES | \
100 PROCESS_CREATE_FLAGS_OVERRIDE_ADDRESS_SPACE | \
101 PROCESS_CREATE_FLAGS_ALL_LARGE_PAGE_FLAGS)
102
103 //
104 // Process priority classes
105 //
106 #define PROCESS_PRIORITY_CLASS_INVALID 0
107 #define PROCESS_PRIORITY_CLASS_IDLE 1
108 #define PROCESS_PRIORITY_CLASS_NORMAL 2
109 #define PROCESS_PRIORITY_CLASS_HIGH 3
110 #define PROCESS_PRIORITY_CLASS_REALTIME 4
111 #define PROCESS_PRIORITY_CLASS_BELOW_NORMAL 5
112 #define PROCESS_PRIORITY_CLASS_ABOVE_NORMAL 6
113
114 //
115 // Process base priorities
116 //
117 #define PROCESS_PRIORITY_IDLE 3
118 #define PROCESS_PRIORITY_NORMAL 8
119 #define PROCESS_PRIORITY_NORMAL_FOREGROUND 9
120
121 //
122 // Process memory priorities
123 //
124 #define MEMORY_PRIORITY_BACKGROUND 0
125 #define MEMORY_PRIORITY_UNKNOWN 1
126 #define MEMORY_PRIORITY_FOREGROUND 2
127
128 //
129 // Process Priority Separation Values (OR)
130 //
131 #define PSP_DEFAULT_QUANTUMS 0x00
132 #define PSP_VARIABLE_QUANTUMS 0x04
133 #define PSP_FIXED_QUANTUMS 0x08
134 #define PSP_LONG_QUANTUMS 0x10
135 #define PSP_SHORT_QUANTUMS 0x20
136
137 #ifndef NTOS_MODE_USER
138 //
139 // Thread Access Types
140 //
141 #define THREAD_QUERY_INFORMATION 0x0040
142 #define THREAD_SET_THREAD_TOKEN 0x0080
143 #define THREAD_IMPERSONATE 0x0100
144 #define THREAD_DIRECT_IMPERSONATION 0x0200
145
146 //
147 // Process Access Types
148 //
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 | \
163 SYNCHRONIZE | \
164 0xFFFF)
165 #else
166 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
167 SYNCHRONIZE | \
168 0xFFF)
169 #endif
170
171 //
172 // Thread Base Priorities
173 //
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
178
179 //
180 // TLS Slots
181 //
182 #define TLS_MINIMUM_AVAILABLE 64
183
184 //
185 // TEB Active Frame Flags
186 //
187 #define TEB_ACTIVE_FRAME_CONTEXT_FLAG_EXTENDED 0x1
188
189 //
190 // Job Access Types
191 //
192 #define JOB_OBJECT_ASSIGN_PROCESS 0x1
193 #define JOB_OBJECT_SET_ATTRIBUTES 0x2
194 #define JOB_OBJECT_QUERY 0x4
195 #define JOB_OBJECT_TERMINATE 0x8
196 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x10
197 #define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
198 SYNCHRONIZE | \
199 31)
200
201 //
202 // Job Limit Flags
203 //
204 #define JOB_OBJECT_LIMIT_WORKINGSET 0x1
205 #define JOB_OBJECT_LIMIT_PROCESS_TIME 0x2
206 #define JOB_OBJECT_LIMIT_JOB_TIME 0x4
207 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x8
208 #define JOB_OBJECT_LIMIT_AFFINITY 0x10
209 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x20
210 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x40
211 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x80
212 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x100
213 #define JOB_OBJECT_LIMIT_JOB_MEMORY 0x200
214 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x400
215 #define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x800
216 #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x1000
217 #define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x2000
218
219 //
220 // Cross Thread Flags
221 //
222 #define CT_TERMINATED_BIT 0x1
223 #define CT_DEAD_THREAD_BIT 0x2
224 #define CT_HIDE_FROM_DEBUGGER_BIT 0x4
225 #define CT_ACTIVE_IMPERSONATION_INFO_BIT 0x8
226 #define CT_SYSTEM_THREAD_BIT 0x10
227 #define CT_HARD_ERRORS_ARE_DISABLED_BIT 0x20
228 #define CT_BREAK_ON_TERMINATION_BIT 0x40
229 #define CT_SKIP_CREATION_MSG_BIT 0x80
230 #define CT_SKIP_TERMINATION_MSG_BIT 0x100
231
232 //
233 // Same Thread Passive Flags
234 //
235 #define STP_ACTIVE_EX_WORKER_BIT 0x1
236 #define STP_EX_WORKER_CAN_WAIT_USER_BIT 0x2
237 #define STP_MEMORY_MAKER_BIT 0x4
238 #define STP_KEYED_EVENT_IN_USE_BIT 0x8
239
240 //
241 // Same Thread APC Flags
242 //
243 #define STA_LPC_RECEIVED_MSG_ID_VALID_BIT 0x1
244 #define STA_LPC_EXIT_THREAD_CALLED_BIT 0x2
245 #define STA_ADDRESS_SPACE_OWNER_BIT 0x4
246 #define STA_OWNS_WORKING_SET_BITS 0x1F8
247
248 //
249 // Kernel Process flags (maybe in ketypes.h?)
250 //
251 #define KPSF_AUTO_ALIGNMENT_BIT 0
252 #define KPSF_DISABLE_BOOST_BIT 1
253
254 //
255 // Process Flags
256 //
257 #define PSF_CREATE_REPORTED_BIT 0x1
258 #define PSF_NO_DEBUG_INHERIT_BIT 0x2
259 #define PSF_PROCESS_EXITING_BIT 0x4
260 #define PSF_PROCESS_DELETE_BIT 0x8
261 #define PSF_WOW64_SPLIT_PAGES_BIT 0x10
262 #define PSF_VM_DELETED_BIT 0x20
263 #define PSF_OUTSWAP_ENABLED_BIT 0x40
264 #define PSF_OUTSWAPPED_BIT 0x80
265 #define PSF_FORK_FAILED_BIT 0x100
266 #define PSF_WOW64_VA_SPACE_4GB_BIT 0x200
267 #define PSF_ADDRESS_SPACE_INITIALIZED_BIT 0x400
268 #define PSF_SET_TIMER_RESOLUTION_BIT 0x1000
269 #define PSF_BREAK_ON_TERMINATION_BIT 0x2000
270 #define PSF_SESSION_CREATION_UNDERWAY_BIT 0x4000
271 #define PSF_WRITE_WATCH_BIT 0x8000
272 #define PSF_PROCESS_IN_SESSION_BIT 0x10000
273 #define PSF_OVERRIDE_ADDRESS_SPACE_BIT 0x20000
274 #define PSF_HAS_ADDRESS_SPACE_BIT 0x40000
275 #define PSF_LAUNCH_PREFETCHED_BIT 0x80000
276 #define PSF_INJECT_INPAGE_ERRORS_BIT 0x100000
277 #define PSF_VM_TOP_DOWN_BIT 0x200000
278 #define PSF_IMAGE_NOTIFY_DONE_BIT 0x400000
279 #define PSF_PDE_UPDATE_NEEDED_BIT 0x800000
280 #define PSF_VDM_ALLOWED_BIT 0x1000000
281 #define PSF_SWAP_ALLOWED_BIT 0x2000000
282 #define PSF_CREATE_FAILED_BIT 0x4000000
283 #define PSF_DEFAULT_IO_PRIORITY_BIT 0x8000000
284
285 //
286 // Vista Process Flags
287 //
288 #define PSF2_PROTECTED_BIT 0x800
289 #endif
290
291 //
292 // TLS/FLS Defines
293 //
294 #define TLS_EXPANSION_SLOTS 1024
295
296 #ifdef NTOS_MODE_USER
297 //
298 // Thread Native Base Priorities
299 //
300 #define LOW_PRIORITY 0
301 #define LOW_REALTIME_PRIORITY 16
302 #define HIGH_PRIORITY 31
303 #define MAXIMUM_PRIORITY 32
304
305 //
306 // Current Process/Thread built-in 'special' handles
307 //
308 #define NtCurrentProcess() ((HANDLE)(LONG_PTR)-1)
309 #define ZwCurrentProcess() NtCurrentProcess()
310 #define NtCurrentThread() ((HANDLE)(LONG_PTR)-2)
311 #define ZwCurrentThread() NtCurrentThread()
312
313 //
314 // Process/Thread/Job Information Classes for NtQueryInformationProcess/Thread/Job
315 //
316 typedef enum _PROCESSINFOCLASS
317 {
318 ProcessBasicInformation,
319 ProcessQuotaLimits,
320 ProcessIoCounters,
321 ProcessVmCounters,
322 ProcessTimes,
323 ProcessBasePriority,
324 ProcessRaisePriority,
325 ProcessDebugPort,
326 ProcessExceptionPort,
327 ProcessAccessToken,
328 ProcessLdtInformation,
329 ProcessLdtSize,
330 ProcessDefaultHardErrorMode,
331 ProcessIoPortHandlers,
332 ProcessPooledUsageAndLimits,
333 ProcessWorkingSetWatch,
334 ProcessUserModeIOPL,
335 ProcessEnableAlignmentFaultFixup,
336 ProcessPriorityClass,
337 ProcessWx86Information,
338 ProcessHandleCount,
339 ProcessAffinityMask,
340 ProcessPriorityBoost,
341 ProcessDeviceMap,
342 ProcessSessionInformation,
343 ProcessForegroundInformation,
344 ProcessWow64Information,
345 ProcessImageFileName,
346 ProcessLUIDDeviceMapsEnabled,
347 ProcessBreakOnTermination,
348 ProcessDebugObjectHandle,
349 ProcessDebugFlags,
350 ProcessHandleTracing,
351 ProcessIoPriority,
352 ProcessExecuteFlags,
353 ProcessTlsInformation,
354 ProcessCookie,
355 ProcessImageInformation,
356 ProcessCycleTime,
357 ProcessPagePriority,
358 ProcessInstrumentationCallback,
359 ProcessThreadStackAllocation,
360 ProcessWorkingSetWatchEx,
361 ProcessImageFileNameWin32,
362 ProcessImageFileMapping,
363 ProcessAffinityUpdateMode,
364 ProcessMemoryAllocationMode,
365 MaxProcessInfoClass
366 } PROCESSINFOCLASS;
367
368 typedef enum _THREADINFOCLASS
369 {
370 ThreadBasicInformation,
371 ThreadTimes,
372 ThreadPriority,
373 ThreadBasePriority,
374 ThreadAffinityMask,
375 ThreadImpersonationToken,
376 ThreadDescriptorTableEntry,
377 ThreadEnableAlignmentFaultFixup,
378 ThreadEventPair_Reusable,
379 ThreadQuerySetWin32StartAddress,
380 ThreadZeroTlsCell,
381 ThreadPerformanceCount,
382 ThreadAmILastThread,
383 ThreadIdealProcessor,
384 ThreadPriorityBoost,
385 ThreadSetTlsArrayAddress,
386 ThreadIsIoPending,
387 ThreadHideFromDebugger,
388 ThreadBreakOnTermination,
389 ThreadSwitchLegacyState,
390 ThreadIsTerminated,
391 ThreadLastSystemCall,
392 ThreadIoPriority,
393 ThreadCycleTime,
394 ThreadPagePriority,
395 ThreadActualBasePriority,
396 ThreadTebInformation,
397 ThreadCSwitchMon,
398 MaxThreadInfoClass
399 } THREADINFOCLASS;
400
401 #else
402
403 typedef enum _PSPROCESSPRIORITYMODE
404 {
405 PsProcessPriorityForeground,
406 PsProcessPriorityBackground,
407 PsProcessPrioritySpinning
408 } PSPROCESSPRIORITYMODE;
409
410 typedef enum _JOBOBJECTINFOCLASS
411 {
412 JobObjectBasicAccountingInformation = 1,
413 JobObjectBasicLimitInformation,
414 JobObjectBasicProcessIdList,
415 JobObjectBasicUIRestrictions,
416 JobObjectSecurityLimitInformation,
417 JobObjectEndOfJobTimeInformation,
418 JobObjectAssociateCompletionPortInformation,
419 JobObjectBasicAndIoAccountingInformation,
420 JobObjectExtendedLimitInformation,
421 JobObjectJobSetInformation,
422 MaxJobObjectInfoClass
423 } JOBOBJECTINFOCLASS;
424
425 //
426 // Power Event Events for Win32K Power Event Callback
427 //
428 typedef enum _PSPOWEREVENTTYPE
429 {
430 PsW32FullWake = 0,
431 PsW32EventCode = 1,
432 PsW32PowerPolicyChanged = 2,
433 PsW32SystemPowerState = 3,
434 PsW32SystemTime = 4,
435 PsW32DisplayState = 5,
436 PsW32CapabilitiesChanged = 6,
437 PsW32SetStateFailed = 7,
438 PsW32GdiOff = 8,
439 PsW32GdiOn = 9,
440 PsW32GdiPrepareResumeUI = 10,
441 PsW32GdiOffRequest = 11,
442 PsW32MonitorOff = 12,
443 } PSPOWEREVENTTYPE;
444
445 //
446 // Power State Tasks for Win32K Power State Callback
447 //
448 typedef enum _POWERSTATETASK
449 {
450 PowerState_BlockSessionSwitch = 0,
451 PowerState_Init = 1,
452 PowerState_QueryApps = 2,
453 PowerState_QueryServices = 3,
454 PowerState_QueryAppsFailed = 4,
455 PowerState_QueryServicesFailed = 5,
456 PowerState_SuspendApps = 6,
457 PowerState_SuspendServices = 7,
458 PowerState_ShowUI = 8,
459 PowerState_NotifyWL = 9,
460 PowerState_ResumeApps = 10,
461 PowerState_ResumeServices = 11,
462 PowerState_UnBlockSessionSwitch = 12,
463 PowerState_End = 13,
464 PowerState_BlockInput = 14,
465 PowerState_UnblockInput = 15,
466 } POWERSTATETASK;
467
468 //
469 // Win32K Job Callback Types
470 //
471 typedef enum _PSW32JOBCALLOUTTYPE
472 {
473 PsW32JobCalloutSetInformation = 0,
474 PsW32JobCalloutAddProcess = 1,
475 PsW32JobCalloutTerminate = 2,
476 } PSW32JOBCALLOUTTYPE;
477
478 //
479 // Win32K Thread Callback Types
480 //
481 typedef enum _PSW32THREADCALLOUTTYPE
482 {
483 PsW32ThreadCalloutInitialize,
484 PsW32ThreadCalloutExit,
485 } PSW32THREADCALLOUTTYPE;
486
487 //
488 // Declare empty structure definitions so that they may be referenced by
489 // routines before they are defined
490 //
491 struct _W32THREAD;
492 struct _W32PROCESS;
493 //struct _ETHREAD;
494 struct _WIN32_POWEREVENT_PARAMETERS;
495 struct _WIN32_POWERSTATE_PARAMETERS;
496 struct _WIN32_JOBCALLOUT_PARAMETERS;
497 struct _WIN32_OPENMETHOD_PARAMETERS;
498 struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS;
499 struct _WIN32_CLOSEMETHOD_PARAMETERS;
500 struct _WIN32_DELETEMETHOD_PARAMETERS;
501 struct _WIN32_PARSEMETHOD_PARAMETERS;
502
503 //
504 // Win32K Process and Thread Callbacks
505 //
506 typedef
507 NTSTATUS
508 (NTAPI *PKWIN32_PROCESS_CALLOUT)(
509 _In_ struct _EPROCESS *Process,
510 _In_ BOOLEAN Create
511 );
512
513 typedef
514 NTSTATUS
515 (NTAPI *PKWIN32_THREAD_CALLOUT)(
516 _In_ struct _ETHREAD *Thread,
517 _In_ PSW32THREADCALLOUTTYPE Type
518 );
519
520 typedef
521 NTSTATUS
522 (NTAPI *PKWIN32_GLOBALATOMTABLE_CALLOUT)(
523 VOID
524 );
525
526 typedef
527 NTSTATUS
528 (NTAPI *PKWIN32_POWEREVENT_CALLOUT)(
529 _In_ struct _WIN32_POWEREVENT_PARAMETERS *Parameters
530 );
531
532 typedef
533 NTSTATUS
534 (NTAPI *PKWIN32_POWERSTATE_CALLOUT)(
535 _In_ struct _WIN32_POWERSTATE_PARAMETERS *Parameters
536 );
537
538 typedef
539 NTSTATUS
540 (NTAPI *PKWIN32_JOB_CALLOUT)(
541 _In_ struct _WIN32_JOBCALLOUT_PARAMETERS *Parameters
542 );
543
544 typedef
545 NTSTATUS
546 (NTAPI *PGDI_BATCHFLUSH_ROUTINE)(
547 VOID
548 );
549
550 typedef
551 NTSTATUS
552 (NTAPI *PKWIN32_OPENMETHOD_CALLOUT)(
553 _In_ struct _WIN32_OPENMETHOD_PARAMETERS *Parameters
554 );
555
556 typedef
557 NTSTATUS
558 (NTAPI *PKWIN32_OKTOCLOSEMETHOD_CALLOUT)(
559 _In_ struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS *Parameters
560 );
561
562 typedef
563 NTSTATUS
564 (NTAPI *PKWIN32_CLOSEMETHOD_CALLOUT)(
565 _In_ struct _WIN32_CLOSEMETHOD_PARAMETERS *Parameters
566 );
567
568 typedef
569 NTSTATUS
570 (NTAPI *PKWIN32_DELETEMETHOD_CALLOUT)(
571 _In_ struct _WIN32_DELETEMETHOD_PARAMETERS *Parameters
572 );
573
574 typedef
575 NTSTATUS
576 (NTAPI *PKWIN32_PARSEMETHOD_CALLOUT)(
577 _In_ struct _WIN32_PARSEMETHOD_PARAMETERS *Parameters
578 );
579
580 typedef
581 NTSTATUS
582 (NTAPI *PKWIN32_SESSION_CALLOUT)(
583 _In_ PVOID Parameter
584 );
585
586 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
587 typedef
588 NTSTATUS
589 (NTAPI *PKWIN32_WIN32DATACOLLECTION_CALLOUT)(
590 _In_ struct _EPROCESS *Process,
591 _In_ PVOID Callback,
592 _In_ PVOID Context
593 );
594 #endif
595
596 //
597 // Lego Callback
598 //
599 typedef
600 VOID
601 (NTAPI *PLEGO_NOTIFY_ROUTINE)(
602 _In_ PKTHREAD Thread
603 );
604
605 #endif
606
607 typedef NTSTATUS
608 (NTAPI *PPOST_PROCESS_INIT_ROUTINE)(
609 VOID
610 );
611
612 //
613 // Descriptor Table Entry Definition
614 //
615 #if (_M_IX86)
616 #define _DESCRIPTOR_TABLE_ENTRY_DEFINED
617 typedef struct _DESCRIPTOR_TABLE_ENTRY
618 {
619 ULONG Selector;
620 LDT_ENTRY Descriptor;
621 } DESCRIPTOR_TABLE_ENTRY, *PDESCRIPTOR_TABLE_ENTRY;
622 #endif
623
624 //
625 // PEB Lock Routine
626 //
627 typedef VOID
628 (NTAPI *PPEBLOCKROUTINE)(
629 PVOID PebLock
630 );
631
632 //
633 // PEB Free Block Descriptor
634 //
635 typedef struct _PEB_FREE_BLOCK
636 {
637 struct _PEB_FREE_BLOCK* Next;
638 ULONG Size;
639 } PEB_FREE_BLOCK, *PPEB_FREE_BLOCK;
640
641 //
642 // Initial PEB
643 //
644 typedef struct _INITIAL_PEB
645 {
646 BOOLEAN InheritedAddressSpace;
647 BOOLEAN ReadImageFileExecOptions;
648 BOOLEAN BeingDebugged;
649 union
650 {
651 BOOLEAN BitField;
652 #if (NTDDI_VERSION >= NTDDI_WS03)
653 struct
654 {
655 BOOLEAN ImageUsesLargePages:1;
656 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
657 BOOLEAN IsProtectedProcess:1;
658 BOOLEAN IsLegacyProcess:1;
659 BOOLEAN SpareBits:5;
660 #else
661 BOOLEAN SpareBits:7;
662 #endif
663 };
664 #else
665 BOOLEAN SpareBool;
666 #endif
667 };
668 HANDLE Mutant;
669 } INITIAL_PEB, *PINITIAL_PEB;
670
671 //
672 // Initial TEB
673 //
674 typedef struct _INITIAL_TEB
675 {
676 PVOID PreviousStackBase;
677 PVOID PreviousStackLimit;
678 PVOID StackBase;
679 PVOID StackLimit;
680 PVOID AllocatedStackBase;
681 } INITIAL_TEB, *PINITIAL_TEB;
682
683 //
684 // TEB Active Frame Structures
685 //
686 typedef struct _TEB_ACTIVE_FRAME_CONTEXT
687 {
688 ULONG Flags;
689 LPSTR FrameName;
690 } TEB_ACTIVE_FRAME_CONTEXT, *PTEB_ACTIVE_FRAME_CONTEXT;
691 typedef const struct _TEB_ACTIVE_FRAME_CONTEXT *PCTEB_ACTIVE_FRAME_CONTEXT;
692
693 typedef struct _TEB_ACTIVE_FRAME_CONTEXT_EX
694 {
695 TEB_ACTIVE_FRAME_CONTEXT BasicContext;
696 PCSTR SourceLocation;
697 } TEB_ACTIVE_FRAME_CONTEXT_EX, *PTEB_ACTIVE_FRAME_CONTEXT_EX;
698 typedef const struct _TEB_ACTIVE_FRAME_CONTEXT_EX *PCTEB_ACTIVE_FRAME_CONTEXT_EX;
699
700 typedef struct _TEB_ACTIVE_FRAME
701 {
702 ULONG Flags;
703 struct _TEB_ACTIVE_FRAME *Previous;
704 PCTEB_ACTIVE_FRAME_CONTEXT Context;
705 } TEB_ACTIVE_FRAME, *PTEB_ACTIVE_FRAME;
706 typedef const struct _TEB_ACTIVE_FRAME *PCTEB_ACTIVE_FRAME;
707
708 typedef struct _TEB_ACTIVE_FRAME_EX
709 {
710 TEB_ACTIVE_FRAME BasicFrame;
711 PVOID ExtensionIdentifier;
712 } TEB_ACTIVE_FRAME_EX, *PTEB_ACTIVE_FRAME_EX;
713 typedef const struct _TEB_ACTIVE_FRAME_EX *PCTEB_ACTIVE_FRAME_EX;
714
715 typedef struct _CLIENT_ID32
716 {
717 ULONG UniqueProcess;
718 ULONG UniqueThread;
719 } CLIENT_ID32, *PCLIENT_ID32;
720
721 typedef struct _CLIENT_ID64
722 {
723 ULONG64 UniqueProcess;
724 ULONG64 UniqueThread;
725 } CLIENT_ID64, *PCLIENT_ID64;
726
727 #if (NTDDI_VERSION < NTDDI_WS03)
728 typedef struct _Wx86ThreadState
729 {
730 PULONG CallBx86Eip;
731 PVOID DeallocationCpu;
732 BOOLEAN UseKnownWx86Dll;
733 CHAR OleStubInvoked;
734 } Wx86ThreadState, *PWx86ThreadState;
735 #endif
736
737 //
738 // PEB.AppCompatFlags
739 // Tag FLAG_MASK_KERNEL
740 //
741 typedef enum _APPCOMPAT_FLAGS
742 {
743 GetShortPathNameNT4 = 0x1,
744 GetDiskFreeSpace2GB = 0x8,
745 FTMFromCurrentAPI = 0x20,
746 DisallowCOMBindingNotifications = 0x40,
747 Ole32ValidatePointers = 0x80,
748 DisableCicero = 0x100,
749 Ole32EnableAsyncDocFile = 0x200,
750 EnableLegacyExceptionHandlinginOLE = 0x400,
751 DisableAdvanceRPCClientHardening = 0x800,
752 DisableMaybeNULLSizeisConsistencycheck = 0x1000,
753 DisableAdvancedRPCrangeCheck = 0x4000,
754 EnableLegacyExceptionHandlingInRPC = 0x8000,
755 EnableLegacyNTFSFlagsForDocfileOpens = 0x10000,
756 DisableNDRIIDConsistencyCheck = 0x20000,
757 UserDisableForwarderPatch = 0x40000,
758 DisableNewWMPAINTDispatchInOLE = 0x100000,
759 DoNotAddToCache = 0x80000000,
760 } APPCOMPAT_FLAGS;
761
762
763 //
764 // PEB.AppCompatFlagsUser.LowPart
765 // Tag FLAG_MASK_USER
766 //
767 typedef enum _APPCOMPAT_USERFLAGS
768 {
769 DisableAnimation = 0x1,
770 DisableKeyboardCues = 0x2,
771 No50StylebitsInSetWindowLong = 0x4,
772 DisableDrawPatternRect = 0x8,
773 MSShellDialog = 0x10,
774 NoDDETerminateDuringDestroy = 0x20,
775 GiveupForeground = 0x40,
776 AlwaysActiveMenus = 0x80,
777 NoMouseHideInEdit = 0x100,
778 NoGdiBatching = 0x200,
779 FontSubstitution = 0x400,
780 No50StylebitsInCreateWindow = 0x800,
781 NoCustomPaperSizes = 0x1000,
782 AllTheDdeHacks = 0x2000,
783 UseDefaultCharset = 0x4000,
784 NoCharDeadKey = 0x8000,
785 NoTryExceptForWindowProc = 0x10000,
786 NoInitInsertReplaceFlags = 0x20000,
787 NoDdeSync = 0x40000,
788 NoGhost = 0x80000,
789 NoDdeAsyncReg = 0x100000,
790 StrictLLHook = 0x200000,
791 NoShadow = 0x400000,
792 NoTimerCallbackProtection = 0x1000000,
793 HighDpiAware = 0x2000000,
794 OpenGLEmfAware = 0x4000000,
795 EnableTransparantBltMirror = 0x8000000,
796 NoPaddedBorder = 0x10000000,
797 ForceLegacyResizeCM = 0x20000000,
798 HardwareAudioMixer = 0x40000000,
799 DisableSWCursorOnMoveSize = 0x80000000,
800 #if 0
801 DisableWindowArrangement = 0x100000000,
802 ReorderWaveForCommunications = 0x200000000,
803 NoGdiHwAcceleration = 0x400000000,
804 #endif
805 } APPCOMPAT_USERFLAGS;
806
807 //
808 // PEB.AppCompatFlagsUser.HighPart
809 // Tag FLAG_MASK_USER
810 //
811 typedef enum _APPCOMPAT_USERFLAGS_HIGHPART
812 {
813 DisableWindowArrangement = 0x1,
814 ReorderWaveForCommunications = 0x2,
815 NoGdiHwAcceleration = 0x4,
816 } APPCOMPAT_USERFLAGS_HIGHPART;
817
818 //
819 // Process Environment Block (PEB)
820 // Thread Environment Block (TEB)
821 //
822 #include "peb_teb.h"
823
824 #ifdef _WIN64
825 //
826 // Explicit 32 bit PEB/TEB
827 //
828 #define EXPLICIT_32BIT
829 #include "peb_teb.h"
830 #undef EXPLICIT_32BIT
831
832 //
833 // Explicit 64 bit PEB/TEB
834 //
835 #define EXPLICIT_64BIT
836 #include "peb_teb.h"
837 #undef EXPLICIT_64BIT
838 #endif
839
840 #ifdef NTOS_MODE_USER
841
842 //
843 // Process Information Structures for NtQueryProcessInformation
844 //
845 typedef struct _PROCESS_BASIC_INFORMATION
846 {
847 NTSTATUS ExitStatus;
848 PPEB PebBaseAddress;
849 ULONG_PTR AffinityMask;
850 KPRIORITY BasePriority;
851 ULONG_PTR UniqueProcessId;
852 ULONG_PTR InheritedFromUniqueProcessId;
853 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
854
855 typedef struct _PROCESS_ACCESS_TOKEN
856 {
857 HANDLE Token;
858 HANDLE Thread;
859 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
860
861 typedef struct _PROCESS_DEVICEMAP_INFORMATION
862 {
863 union
864 {
865 struct
866 {
867 HANDLE DirectoryHandle;
868 } Set;
869 struct
870 {
871 ULONG DriveMap;
872 UCHAR DriveType[32];
873 } Query;
874 };
875 } PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
876
877 typedef struct _KERNEL_USER_TIMES
878 {
879 LARGE_INTEGER CreateTime;
880 LARGE_INTEGER ExitTime;
881 LARGE_INTEGER KernelTime;
882 LARGE_INTEGER UserTime;
883 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
884
885 typedef struct _POOLED_USAGE_AND_LIMITS
886 {
887 SIZE_T PeakPagedPoolUsage;
888 SIZE_T PagedPoolUsage;
889 SIZE_T PagedPoolLimit;
890 SIZE_T PeakNonPagedPoolUsage;
891 SIZE_T NonPagedPoolUsage;
892 SIZE_T NonPagedPoolLimit;
893 SIZE_T PeakPagefileUsage;
894 SIZE_T PagefileUsage;
895 SIZE_T PagefileLimit;
896 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
897
898 typedef struct _PROCESS_SESSION_INFORMATION
899 {
900 ULONG SessionId;
901 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
902
903 #endif
904
905 typedef struct DECLSPEC_ALIGN(4) _PROCESS_PRIORITY_CLASS
906 {
907 BOOLEAN Foreground;
908 UCHAR PriorityClass;
909 } PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;
910
911 typedef struct _PROCESS_FOREGROUND_BACKGROUND
912 {
913 BOOLEAN Foreground;
914 } PROCESS_FOREGROUND_BACKGROUND, *PPROCESS_FOREGROUND_BACKGROUND;
915
916 //
917 // Apphelp SHIM Cache
918 //
919 typedef enum _APPHELPCACHESERVICECLASS
920 {
921 ApphelpCacheServiceLookup = 0,
922 ApphelpCacheServiceRemove = 1,
923 ApphelpCacheServiceUpdate = 2,
924 ApphelpCacheServiceFlush = 3,
925 ApphelpCacheServiceDump = 4,
926
927 ApphelpDBGReadRegistry = 0x100,
928 ApphelpDBGWriteRegistry = 0x101,
929 } APPHELPCACHESERVICECLASS;
930
931
932 typedef struct _APPHELP_CACHE_SERVICE_LOOKUP
933 {
934 UNICODE_STRING ImageName;
935 HANDLE ImageHandle;
936 } APPHELP_CACHE_SERVICE_LOOKUP, *PAPPHELP_CACHE_SERVICE_LOOKUP;
937
938
939 //
940 // Thread Information Structures for NtQueryProcessInformation
941 //
942 typedef struct _THREAD_BASIC_INFORMATION
943 {
944 NTSTATUS ExitStatus;
945 PVOID TebBaseAddress;
946 CLIENT_ID ClientId;
947 KAFFINITY AffinityMask;
948 KPRIORITY Priority;
949 KPRIORITY BasePriority;
950 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
951
952 #ifndef NTOS_MODE_USER
953
954 //
955 // Job Set Array
956 //
957 typedef struct _JOB_SET_ARRAY
958 {
959 HANDLE JobHandle;
960 ULONG MemberLevel;
961 ULONG Flags;
962 } JOB_SET_ARRAY, *PJOB_SET_ARRAY;
963
964 //
965 // EPROCESS Quota Structures
966 //
967 typedef struct _EPROCESS_QUOTA_ENTRY
968 {
969 SIZE_T Usage;
970 SIZE_T Limit;
971 SIZE_T Peak;
972 SIZE_T Return;
973 } EPROCESS_QUOTA_ENTRY, *PEPROCESS_QUOTA_ENTRY;
974
975 typedef struct _EPROCESS_QUOTA_BLOCK
976 {
977 EPROCESS_QUOTA_ENTRY QuotaEntry[3];
978 LIST_ENTRY QuotaList;
979 ULONG ReferenceCount;
980 ULONG ProcessCount;
981 } EPROCESS_QUOTA_BLOCK, *PEPROCESS_QUOTA_BLOCK;
982
983 //
984 // Process Pagefault History
985 //
986 typedef struct _PAGEFAULT_HISTORY
987 {
988 ULONG CurrentIndex;
989 ULONG MapIndex;
990 KSPIN_LOCK SpinLock;
991 PVOID Reserved;
992 PROCESS_WS_WATCH_INFORMATION WatchInfo[1];
993 } PAGEFAULT_HISTORY, *PPAGEFAULT_HISTORY;
994
995 //
996 // Process Impersonation Information
997 //
998 typedef struct _PS_IMPERSONATION_INFORMATION
999 {
1000 PACCESS_TOKEN Token;
1001 BOOLEAN CopyOnOpen;
1002 BOOLEAN EffectiveOnly;
1003 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
1004 } PS_IMPERSONATION_INFORMATION, *PPS_IMPERSONATION_INFORMATION;
1005
1006 //
1007 // Process Termination Port
1008 //
1009 typedef struct _TERMINATION_PORT
1010 {
1011 struct _TERMINATION_PORT *Next;
1012 PVOID Port;
1013 } TERMINATION_PORT, *PTERMINATION_PORT;
1014
1015 //
1016 // Per-Process APC Rate Limiting
1017 //
1018 typedef struct _PSP_RATE_APC
1019 {
1020 union
1021 {
1022 SINGLE_LIST_ENTRY NextApc;
1023 ULONGLONG ExcessCycles;
1024 };
1025 ULONGLONG TargetGEneration;
1026 KAPC RateApc;
1027 } PSP_RATE_APC, *PPSP_RATE_APC;
1028
1029 //
1030 // Executive Thread (ETHREAD)
1031 //
1032 typedef struct _ETHREAD
1033 {
1034 KTHREAD Tcb;
1035 LARGE_INTEGER CreateTime;
1036 union
1037 {
1038 LARGE_INTEGER ExitTime;
1039 LIST_ENTRY LpcReplyChain;
1040 LIST_ENTRY KeyedWaitChain;
1041 };
1042 union
1043 {
1044 NTSTATUS ExitStatus;
1045 PVOID OfsChain;
1046 };
1047 LIST_ENTRY PostBlockList;
1048 union
1049 {
1050 struct _TERMINATION_PORT *TerminationPort;
1051 struct _ETHREAD *ReaperLink;
1052 PVOID KeyedWaitValue;
1053 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1054 PVOID Win32StartParameter;
1055 #endif
1056 };
1057 KSPIN_LOCK ActiveTimerListLock;
1058 LIST_ENTRY ActiveTimerListHead;
1059 CLIENT_ID Cid;
1060 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1061 KSEMAPHORE KeyedWaitSemaphore;
1062 #else
1063 union
1064 {
1065 KSEMAPHORE LpcReplySemaphore;
1066 KSEMAPHORE KeyedWaitSemaphore;
1067 };
1068 union
1069 {
1070 PVOID LpcReplyMessage;
1071 PVOID LpcWaitingOnPort;
1072 };
1073 #endif
1074 PPS_IMPERSONATION_INFORMATION ImpersonationInfo;
1075 LIST_ENTRY IrpList;
1076 ULONG_PTR TopLevelIrp;
1077 PDEVICE_OBJECT DeviceToVerify;
1078 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1079 PPSP_RATE_APC RateControlApc;
1080 #else
1081 struct _EPROCESS *ThreadsProcess;
1082 #endif
1083 PVOID Win32StartAddress;
1084 union
1085 {
1086 PKSTART_ROUTINE StartAddress;
1087 ULONG LpcReceivedMessageId;
1088 };
1089 LIST_ENTRY ThreadListEntry;
1090 EX_RUNDOWN_REF RundownProtect;
1091 EX_PUSH_LOCK ThreadLock;
1092 #if (NTDDI_VERSION < NTDDI_LONGHORN)
1093 ULONG LpcReplyMessageId;
1094 #endif
1095 ULONG ReadClusterSize;
1096 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1097 ULONG SpareUlong0;
1098 #else
1099 ACCESS_MASK GrantedAccess;
1100 #endif
1101 union
1102 {
1103 struct
1104 {
1105 ULONG Terminated:1;
1106 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1107 ULONG ThreadInserted:1;
1108 #else
1109 ULONG DeadThread:1;
1110 #endif
1111 ULONG HideFromDebugger:1;
1112 ULONG ActiveImpersonationInfo:1;
1113 ULONG SystemThread:1;
1114 ULONG HardErrorsAreDisabled:1;
1115 ULONG BreakOnTermination:1;
1116 ULONG SkipCreationMsg:1;
1117 ULONG SkipTerminationMsg:1;
1118 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1119 ULONG CreateMsgSent:1;
1120 ULONG ThreadIoPriority:3;
1121 ULONG ThreadPagePriority:3;
1122 ULONG PendingRatecontrol:1;
1123 #endif
1124 };
1125 ULONG CrossThreadFlags;
1126 };
1127 union
1128 {
1129 struct
1130 {
1131 ULONG ActiveExWorker:1;
1132 ULONG ExWorkerCanWaitUser:1;
1133 ULONG MemoryMaker:1;
1134 ULONG KeyedEventInUse:1;
1135 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1136 ULONG RateApcState:2;
1137 #endif
1138 };
1139 ULONG SameThreadPassiveFlags;
1140 };
1141 union
1142 {
1143 struct
1144 {
1145 ULONG LpcReceivedMsgIdValid:1;
1146 ULONG LpcExitThreadCalled:1;
1147 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1148 ULONG Spare:1;
1149 #else
1150 ULONG AddressSpaceOwner:1;
1151 #endif
1152 ULONG OwnsProcessWorkingSetExclusive:1;
1153 ULONG OwnsProcessWorkingSetShared:1;
1154 ULONG OwnsSystemWorkingSetExclusive:1;
1155 ULONG OwnsSystemWorkingSetShared:1;
1156 ULONG OwnsSessionWorkingSetExclusive:1;
1157 ULONG OwnsSessionWorkingSetShared:1;
1158 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1159 ULONG SuppressSymbolLoad:1;
1160 ULONG Spare1:3;
1161 ULONG PriorityRegionActive:4;
1162 #else
1163 ULONG ApcNeeded:1;
1164 #endif
1165 };
1166 ULONG SameThreadApcFlags;
1167 };
1168 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1169 UCHAR CacheManagerActive;
1170 #else
1171 UCHAR ForwardClusterOnly;
1172 #endif
1173 UCHAR DisablePageFaultClustering;
1174 UCHAR ActiveFaultCount;
1175 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1176 ULONG AlpcMessageId;
1177 union
1178 {
1179 PVOID AlpcMessage;
1180 ULONG AlpcReceiveAttributeSet;
1181 };
1182 LIST_ENTRY AlpcWaitListEntry;
1183 KSEMAPHORE AlpcWaitSemaphore;
1184 ULONG CacheManagerCount;
1185 #endif
1186 } ETHREAD;
1187
1188 //
1189 // Executive Process (EPROCESS)
1190 //
1191 typedef struct _EPROCESS
1192 {
1193 KPROCESS Pcb;
1194 EX_PUSH_LOCK ProcessLock;
1195 LARGE_INTEGER CreateTime;
1196 LARGE_INTEGER ExitTime;
1197 EX_RUNDOWN_REF RundownProtect;
1198 HANDLE UniqueProcessId;
1199 LIST_ENTRY ActiveProcessLinks;
1200 SIZE_T QuotaUsage[3]; /* 0=PagedPool, 1=NonPagedPool, 2=Pagefile */
1201 SIZE_T QuotaPeak[3]; /* ditto */
1202 SIZE_T CommitCharge;
1203 SIZE_T PeakVirtualSize;
1204 SIZE_T VirtualSize;
1205 LIST_ENTRY SessionProcessLinks;
1206 PVOID DebugPort;
1207 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1208 union
1209 {
1210 PVOID ExceptionPortData;
1211 ULONG ExceptionPortValue;
1212 UCHAR ExceptionPortState:3;
1213 };
1214 #else
1215 PVOID ExceptionPort;
1216 #endif
1217 PHANDLE_TABLE ObjectTable;
1218 EX_FAST_REF Token;
1219 PFN_NUMBER WorkingSetPage;
1220 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1221 EX_PUSH_LOCK AddressCreationLock;
1222 PETHREAD RotateInProgress;
1223 #else
1224 KGUARDED_MUTEX AddressCreationLock;
1225 KSPIN_LOCK HyperSpaceLock;
1226 #endif
1227 PETHREAD ForkInProgress;
1228 ULONG_PTR HardwareTrigger;
1229 PMM_AVL_TABLE PhysicalVadRoot;
1230 PVOID CloneRoot;
1231 PFN_NUMBER NumberOfPrivatePages;
1232 PFN_NUMBER NumberOfLockedPages;
1233 PVOID *Win32Process;
1234 struct _EJOB *Job;
1235 PVOID SectionObject;
1236 PVOID SectionBaseAddress;
1237 PEPROCESS_QUOTA_BLOCK QuotaBlock;
1238 PPAGEFAULT_HISTORY WorkingSetWatch;
1239 PVOID Win32WindowStation;
1240 HANDLE InheritedFromUniqueProcessId;
1241 PVOID LdtInformation;
1242 PVOID VadFreeHint;
1243 PVOID VdmObjects;
1244 PVOID DeviceMap;
1245 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1246 PVOID EtwDataSource;
1247 PVOID FreeTebHint;
1248 #else
1249 PVOID Spare0[3];
1250 #endif
1251 union
1252 {
1253 HARDWARE_PTE PageDirectoryPte;
1254 ULONGLONG Filler;
1255 };
1256 PVOID Session;
1257 CHAR ImageFileName[16];
1258 LIST_ENTRY JobLinks;
1259 PVOID LockedPagesList;
1260 LIST_ENTRY ThreadListHead;
1261 PVOID SecurityPort;
1262 #ifdef _M_AMD64
1263 struct _WOW64_PROCESS *Wow64Process;
1264 #else
1265 PVOID PaeTop;
1266 #endif
1267 ULONG ActiveThreads;
1268 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1269 ULONG ImagePathHash;
1270 #else
1271 ACCESS_MASK GrantedAccess;
1272 #endif
1273 ULONG DefaultHardErrorProcessing;
1274 NTSTATUS LastThreadExitStatus;
1275 struct _PEB* Peb;
1276 EX_FAST_REF PrefetchTrace;
1277 LARGE_INTEGER ReadOperationCount;
1278 LARGE_INTEGER WriteOperationCount;
1279 LARGE_INTEGER OtherOperationCount;
1280 LARGE_INTEGER ReadTransferCount;
1281 LARGE_INTEGER WriteTransferCount;
1282 LARGE_INTEGER OtherTransferCount;
1283 SIZE_T CommitChargeLimit;
1284 SIZE_T CommitChargePeak;
1285 PVOID AweInfo;
1286 SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo;
1287 MMSUPPORT Vm;
1288 #ifdef _M_AMD64
1289 ULONG Spares[2];
1290 #else
1291 LIST_ENTRY MmProcessLinks;
1292 #endif
1293 ULONG ModifiedPageCount;
1294 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1295 union
1296 {
1297 struct
1298 {
1299 ULONG JobNotReallyActive:1;
1300 ULONG AccountingFolded:1;
1301 ULONG NewProcessReported:1;
1302 ULONG ExitProcessReported:1;
1303 ULONG ReportCommitChanges:1;
1304 ULONG LastReportMemory:1;
1305 ULONG ReportPhysicalPageChanges:1;
1306 ULONG HandleTableRundown:1;
1307 ULONG NeedsHandleRundown:1;
1308 ULONG RefTraceEnabled:1;
1309 ULONG NumaAware:1;
1310 ULONG ProtectedProcess:1;
1311 ULONG DefaultPagePriority:3;
1312 ULONG ProcessDeleteSelf:1;
1313 ULONG ProcessVerifierTarget:1;
1314 };
1315 ULONG Flags2;
1316 };
1317 #else
1318 ULONG JobStatus;
1319 #endif
1320 union
1321 {
1322 struct
1323 {
1324 ULONG CreateReported:1;
1325 ULONG NoDebugInherit:1;
1326 ULONG ProcessExiting:1;
1327 ULONG ProcessDelete:1;
1328 ULONG Wow64SplitPages:1;
1329 ULONG VmDeleted:1;
1330 ULONG OutswapEnabled:1;
1331 ULONG Outswapped:1;
1332 ULONG ForkFailed:1;
1333 ULONG Wow64VaSpace4Gb:1;
1334 ULONG AddressSpaceInitialized:2;
1335 ULONG SetTimerResolution:1;
1336 ULONG BreakOnTermination:1;
1337 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1338 ULONG DeprioritizeViews:1;
1339 #else
1340 ULONG SessionCreationUnderway:1;
1341 #endif
1342 ULONG WriteWatch:1;
1343 ULONG ProcessInSession:1;
1344 ULONG OverrideAddressSpace:1;
1345 ULONG HasAddressSpace:1;
1346 ULONG LaunchPrefetched:1;
1347 ULONG InjectInpageErrors:1;
1348 ULONG VmTopDown:1;
1349 ULONG ImageNotifyDone:1;
1350 ULONG PdeUpdateNeeded:1;
1351 ULONG VdmAllowed:1;
1352 ULONG SmapAllowed:1;
1353 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1354 ULONG ProcessInserted:1;
1355 #else
1356 ULONG CreateFailed:1;
1357 #endif
1358 ULONG DefaultIoPriority:3;
1359 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1360 ULONG SparePsFlags1:2;
1361 #else
1362 ULONG Spare1:1;
1363 ULONG Spare2:1;
1364 #endif
1365 };
1366 ULONG Flags;
1367 };
1368 NTSTATUS ExitStatus;
1369 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1370 USHORT Spare7;
1371 #else
1372 USHORT NextPageColor;
1373 #endif
1374 union
1375 {
1376 struct
1377 {
1378 UCHAR SubSystemMinorVersion;
1379 UCHAR SubSystemMajorVersion;
1380 };
1381 USHORT SubSystemVersion;
1382 };
1383 UCHAR PriorityClass;
1384 MM_AVL_TABLE VadRoot;
1385 ULONG Cookie;
1386 } EPROCESS;
1387
1388 //
1389 // Job Token Filter Data
1390 //
1391 #include <pshpack1.h>
1392 typedef struct _PS_JOB_TOKEN_FILTER
1393 {
1394 ULONG CapturedSidCount;
1395 PSID_AND_ATTRIBUTES CapturedSids;
1396 ULONG CapturedSidsLength;
1397 ULONG CapturedGroupCount;
1398 PSID_AND_ATTRIBUTES CapturedGroups;
1399 ULONG CapturedGroupsLength;
1400 ULONG CapturedPrivilegeCount;
1401 PLUID_AND_ATTRIBUTES CapturedPrivileges;
1402 ULONG CapturedPrivilegesLength;
1403 } PS_JOB_TOKEN_FILTER, *PPS_JOB_TOKEN_FILTER;
1404
1405 //
1406 // Executive Job (EJOB)
1407 //
1408 typedef struct _EJOB
1409 {
1410 KEVENT Event;
1411 LIST_ENTRY JobLinks;
1412 LIST_ENTRY ProcessListHead;
1413 ERESOURCE JobLock;
1414 LARGE_INTEGER TotalUserTime;
1415 LARGE_INTEGER TotalKernelTime;
1416 LARGE_INTEGER ThisPeriodTotalUserTime;
1417 LARGE_INTEGER ThisPeriodTotalKernelTime;
1418 ULONG TotalPageFaultCount;
1419 ULONG TotalProcesses;
1420 ULONG ActiveProcesses;
1421 ULONG TotalTerminatedProcesses;
1422 LARGE_INTEGER PerProcessUserTimeLimit;
1423 LARGE_INTEGER PerJobUserTimeLimit;
1424 ULONG LimitFlags;
1425 ULONG MinimumWorkingSetSize;
1426 ULONG MaximumWorkingSetSize;
1427 ULONG ActiveProcessLimit;
1428 ULONG Affinity;
1429 UCHAR PriorityClass;
1430 ULONG UIRestrictionsClass;
1431 ULONG SecurityLimitFlags;
1432 PVOID Token;
1433 PPS_JOB_TOKEN_FILTER Filter;
1434 ULONG EndOfJobTimeAction;
1435 PVOID CompletionPort;
1436 PVOID CompletionKey;
1437 ULONG SessionId;
1438 ULONG SchedulingClass;
1439 ULONGLONG ReadOperationCount;
1440 ULONGLONG WriteOperationCount;
1441 ULONGLONG OtherOperationCount;
1442 ULONGLONG ReadTransferCount;
1443 ULONGLONG WriteTransferCount;
1444 ULONGLONG OtherTransferCount;
1445 IO_COUNTERS IoInfo;
1446 ULONG ProcessMemoryLimit;
1447 ULONG JobMemoryLimit;
1448 ULONG PeakProcessMemoryUsed;
1449 ULONG PeakJobMemoryUsed;
1450 ULONG CurrentJobMemoryUsed;
1451 #if (NTDDI_VERSION >= NTDDI_WINXP) && (NTDDI_VERSION < NTDDI_WS03)
1452 FAST_MUTEX MemoryLimitsLock;
1453 #elif (NTDDI_VERSION >= NTDDI_WS03) && (NTDDI_VERSION < NTDDI_LONGHORN)
1454 KGUARDED_MUTEX MemoryLimitsLock;
1455 #elif (NTDDI_VERSION >= NTDDI_LONGHORN)
1456 EX_PUSH_LOCK MemoryLimitsLock;
1457 #endif
1458 LIST_ENTRY JobSetLinks;
1459 ULONG MemberLevel;
1460 ULONG JobFlags;
1461 } EJOB, *PEJOB;
1462 #include <poppack.h>
1463
1464 //
1465 // Job Information Structures for NtQueryInformationJobObject
1466 //
1467
1468 typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
1469 {
1470 LARGE_INTEGER TotalUserTime;
1471 LARGE_INTEGER TotalKernelTime;
1472 LARGE_INTEGER ThisPeriodTotalUserTime;
1473 LARGE_INTEGER ThisPeriodTotalKernelTime;
1474 ULONG TotalPageFaultCount;
1475 ULONG TotalProcesses;
1476 ULONG ActiveProcesses;
1477 ULONG TotalTerminatedProcesses;
1478 } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION, *PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
1479
1480 typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION
1481 {
1482 LARGE_INTEGER PerProcessUserTimeLimit;
1483 LARGE_INTEGER PerJobUserTimeLimit;
1484 ULONG LimitFlags;
1485 SIZE_T MinimumWorkingSetSize;
1486 SIZE_T MaximumWorkingSetSize;
1487 ULONG ActiveProcessLimit;
1488 ULONG_PTR Affinity;
1489 ULONG PriorityClass;
1490 ULONG SchedulingClass;
1491 } JOBOBJECT_BASIC_LIMIT_INFORMATION, *PJOBOBJECT_BASIC_LIMIT_INFORMATION;
1492
1493 typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST
1494 {
1495 ULONG NumberOfAssignedProcesses;
1496 ULONG NumberOfProcessIdsInList;
1497 ULONG_PTR ProcessIdList[1];
1498 } JOBOBJECT_BASIC_PROCESS_ID_LIST, *PJOBOBJECT_BASIC_PROCESS_ID_LIST;
1499
1500 typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS
1501 {
1502 ULONG UIRestrictionsClass;
1503 } JOBOBJECT_BASIC_UI_RESTRICTIONS, *PJOBOBJECT_BASIC_UI_RESTRICTIONS;
1504
1505 typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION
1506 {
1507 ULONG SecurityLimitFlags;
1508 HANDLE JobToken;
1509 PTOKEN_GROUPS SidsToDisable;
1510 PTOKEN_PRIVILEGES PrivilegesToDelete;
1511 PTOKEN_GROUPS RestrictedSids;
1512 } JOBOBJECT_SECURITY_LIMIT_INFORMATION, *PJOBOBJECT_SECURITY_LIMIT_INFORMATION;
1513
1514 typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION
1515 {
1516 ULONG EndOfJobTimeAction;
1517 } JOBOBJECT_END_OF_JOB_TIME_INFORMATION, PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;
1518
1519 typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT
1520 {
1521 PVOID CompletionKey;
1522 HANDLE CompletionPort;
1523 } JOBOBJECT_ASSOCIATE_COMPLETION_PORT, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
1524
1525 typedef struct JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
1526 {
1527 JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo;
1528 IO_COUNTERS IoInfo;
1529 } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION, *PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
1530
1531 typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION
1532 {
1533 JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation;
1534 IO_COUNTERS IoInfo;
1535 SIZE_T ProcessMemoryLimit;
1536 SIZE_T JobMemoryLimit;
1537 SIZE_T PeakProcessMemoryUsed;
1538 SIZE_T PeakJobMemoryUsed;
1539 } JOBOBJECT_EXTENDED_LIMIT_INFORMATION, *PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;
1540
1541
1542 //
1543 // Win32K Callback Registration Data
1544 //
1545 typedef struct _WIN32_POWEREVENT_PARAMETERS
1546 {
1547 PSPOWEREVENTTYPE EventNumber;
1548 ULONG Code;
1549 } WIN32_POWEREVENT_PARAMETERS, *PWIN32_POWEREVENT_PARAMETERS;
1550
1551 typedef struct _WIN32_POWERSTATE_PARAMETERS
1552 {
1553 UCHAR Promotion;
1554 POWER_ACTION SystemAction;
1555 SYSTEM_POWER_STATE MinSystemState;
1556 ULONG Flags;
1557 POWERSTATETASK PowerStateTask;
1558 } WIN32_POWERSTATE_PARAMETERS, *PWIN32_POWERSTATE_PARAMETERS;
1559
1560 typedef struct _WIN32_JOBCALLOUT_PARAMETERS
1561 {
1562 PVOID Job;
1563 PSW32JOBCALLOUTTYPE CalloutType;
1564 PVOID Data;
1565 } WIN32_JOBCALLOUT_PARAMETERS, *PWIN32_JOBCALLOUT_PARAMETERS;
1566
1567 typedef struct _WIN32_OPENMETHOD_PARAMETERS
1568 {
1569 OB_OPEN_REASON OpenReason;
1570 PEPROCESS Process;
1571 PVOID Object;
1572 ULONG GrantedAccess;
1573 ULONG HandleCount;
1574 } WIN32_OPENMETHOD_PARAMETERS, *PWIN32_OPENMETHOD_PARAMETERS;
1575
1576 typedef struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS
1577 {
1578 PEPROCESS Process;
1579 PVOID Object;
1580 HANDLE Handle;
1581 KPROCESSOR_MODE PreviousMode;
1582 } WIN32_OKAYTOCLOSEMETHOD_PARAMETERS, *PWIN32_OKAYTOCLOSEMETHOD_PARAMETERS;
1583
1584 typedef struct _WIN32_CLOSEMETHOD_PARAMETERS
1585 {
1586 PEPROCESS Process;
1587 PVOID Object;
1588 ACCESS_MASK AccessMask;
1589 ULONG ProcessHandleCount;
1590 ULONG SystemHandleCount;
1591 } WIN32_CLOSEMETHOD_PARAMETERS, *PWIN32_CLOSEMETHOD_PARAMETERS;
1592
1593 typedef struct _WIN32_DELETEMETHOD_PARAMETERS
1594 {
1595 PVOID Object;
1596 } WIN32_DELETEMETHOD_PARAMETERS, *PWIN32_DELETEMETHOD_PARAMETERS;
1597
1598 typedef struct _WIN32_PARSEMETHOD_PARAMETERS
1599 {
1600 PVOID ParseObject;
1601 PVOID ObjectType;
1602 PACCESS_STATE AccessState;
1603 KPROCESSOR_MODE AccessMode;
1604 ULONG Attributes;
1605 _Out_ PUNICODE_STRING CompleteName;
1606 PUNICODE_STRING RemainingName;
1607 PVOID Context;
1608 PSECURITY_QUALITY_OF_SERVICE SecurityQos;
1609 PVOID *Object;
1610 } WIN32_PARSEMETHOD_PARAMETERS, *PWIN32_PARSEMETHOD_PARAMETERS;
1611
1612 typedef struct _WIN32_CALLOUTS_FPNS
1613 {
1614 PKWIN32_PROCESS_CALLOUT ProcessCallout;
1615 PKWIN32_THREAD_CALLOUT ThreadCallout;
1616 PKWIN32_GLOBALATOMTABLE_CALLOUT GlobalAtomTableCallout;
1617 PKWIN32_POWEREVENT_CALLOUT PowerEventCallout;
1618 PKWIN32_POWERSTATE_CALLOUT PowerStateCallout;
1619 PKWIN32_JOB_CALLOUT JobCallout;
1620 PGDI_BATCHFLUSH_ROUTINE BatchFlushRoutine;
1621 PKWIN32_SESSION_CALLOUT DesktopOpenProcedure;
1622 PKWIN32_SESSION_CALLOUT DesktopOkToCloseProcedure;
1623 PKWIN32_SESSION_CALLOUT DesktopCloseProcedure;
1624 PKWIN32_SESSION_CALLOUT DesktopDeleteProcedure;
1625 PKWIN32_SESSION_CALLOUT WindowStationOkToCloseProcedure;
1626 PKWIN32_SESSION_CALLOUT WindowStationCloseProcedure;
1627 PKWIN32_SESSION_CALLOUT WindowStationDeleteProcedure;
1628 PKWIN32_SESSION_CALLOUT WindowStationParseProcedure;
1629 PKWIN32_SESSION_CALLOUT WindowStationOpenProcedure;
1630 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1631 PKWIN32_WIN32DATACOLLECTION_CALLOUT Win32DataCollectionProcedure;
1632 #endif
1633 } WIN32_CALLOUTS_FPNS, *PWIN32_CALLOUTS_FPNS;
1634
1635 #endif // !NTOS_MODE_USER
1636
1637 #ifdef __cplusplus
1638 }; // extern "C"
1639 #endif
1640
1641 #endif // _PSTYPES_H