ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

pstypes.h
Go to the documentation of this file.
00001 /*++ NDK Version: 0098
00002 
00003 Copyright (c) Alex Ionescu.  All rights reserved.
00004 
00005 Header Name:
00006 
00007     pstypes.h
00008 
00009 Abstract:
00010 
00011     Type definitions for the Process Manager
00012 
00013 Author:
00014 
00015     Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
00016 
00017 --*/
00018 
00019 #ifndef _PSTYPES_H
00020 #define _PSTYPES_H
00021 
00022 //
00023 // Dependencies
00024 //
00025 #include <umtypes.h>
00026 #include <ldrtypes.h>
00027 #include <mmtypes.h>
00028 #include <obtypes.h>
00029 #include <rtltypes.h>
00030 #ifndef NTOS_MODE_USER
00031 #include <extypes.h>
00032 #include <setypes.h>
00033 #endif
00034 
00035 #ifndef NTOS_MODE_USER
00036 
00037 //
00038 // Kernel Exported Object Types
00039 //
00040 extern POBJECT_TYPE NTSYSAPI PsJobType;
00041 
00042 #endif // !NTOS_MODE_USER
00043 
00044 //
00045 // KUSER_SHARED_DATA location in User Mode
00046 //
00047 #define USER_SHARED_DATA                        (0x7FFE0000)
00048 
00049 //
00050 // Global Flags
00051 //
00052 #define FLG_STOP_ON_EXCEPTION                   0x00000001
00053 #define FLG_SHOW_LDR_SNAPS                      0x00000002
00054 #define FLG_DEBUG_INITIAL_COMMAND               0x00000004
00055 #define FLG_STOP_ON_HUNG_GUI                    0x00000008
00056 #define FLG_HEAP_ENABLE_TAIL_CHECK              0x00000010
00057 #define FLG_HEAP_ENABLE_FREE_CHECK              0x00000020
00058 #define FLG_HEAP_VALIDATE_PARAMETERS            0x00000040
00059 #define FLG_HEAP_VALIDATE_ALL                   0x00000080
00060 #define FLG_POOL_ENABLE_TAIL_CHECK              0x00000100
00061 #define FLG_POOL_ENABLE_FREE_CHECK              0x00000200
00062 #define FLG_POOL_ENABLE_TAGGING                 0x00000400
00063 #define FLG_HEAP_ENABLE_TAGGING                 0x00000800
00064 #define FLG_USER_STACK_TRACE_DB                 0x00001000
00065 #define FLG_KERNEL_STACK_TRACE_DB               0x00002000
00066 #define FLG_MAINTAIN_OBJECT_TYPELIST            0x00004000
00067 #define FLG_HEAP_ENABLE_TAG_BY_DLL              0x00008000
00068 #define FLG_IGNORE_DEBUG_PRIV                   0x00010000
00069 #define FLG_ENABLE_CSRDEBUG                     0x00020000
00070 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD           0x00040000
00071 #define FLG_DISABLE_PAGE_KERNEL_STACKS          0x00080000
00072 #if (NTDDI_VERSION < NTDDI_WINXP)
00073 #define FLG_HEAP_ENABLE_CALL_TRACING            0x00100000
00074 #else
00075 #define FLG_ENABLE_SYSTEM_CRIT_BREAKS           0x00100000
00076 #endif
00077 #define FLG_HEAP_DISABLE_COALESCING             0x00200000
00078 #define FLG_ENABLE_CLOSE_EXCEPTIONS             0x00400000
00079 #define FLG_ENABLE_EXCEPTION_LOGGING            0x00800000
00080 #define FLG_ENABLE_HANDLE_TYPE_TAGGING          0x01000000
00081 #define FLG_HEAP_PAGE_ALLOCS                    0x02000000
00082 #define FLG_DEBUG_INITIAL_COMMAND_EX            0x04000000
00083 #define FLG_VALID_BITS                          0x07FFFFFF
00084 
00085 //
00086 // Flags for NtCreateProcessEx
00087 //
00088 #define PROCESS_CREATE_FLAGS_BREAKAWAY          0x00000001
00089 #define PROCESS_CREATE_FLAGS_NO_DEBUG_INHERIT   0x00000002
00090 #define PROCESS_CREATE_FLAGS_INHERIT_HANDLES    0x00000004
00091 #define PROCESS_CREATE_FLAGS_OVERRIDE_ADDRESS_SPACE 0x00000008
00092 #define PROCESS_CREATE_FLAGS_LARGE_PAGES        0x00000010
00093 
00094 //
00095 // Process priority classes
00096 //
00097 #define PROCESS_PRIORITY_CLASS_INVALID          0
00098 #define PROCESS_PRIORITY_CLASS_IDLE             1
00099 #define PROCESS_PRIORITY_CLASS_NORMAL           2
00100 #define PROCESS_PRIORITY_CLASS_HIGH             3
00101 #define PROCESS_PRIORITY_CLASS_REALTIME         4
00102 #define PROCESS_PRIORITY_CLASS_BELOW_NORMAL     5
00103 #define PROCESS_PRIORITY_CLASS_ABOVE_NORMAL     6
00104 
00105 //
00106 // NtCreateProcessEx flags
00107 //
00108 #define PS_REQUEST_BREAKAWAY                    1
00109 #define PS_NO_DEBUG_INHERIT                     2
00110 #define PS_INHERIT_HANDLES                      4
00111 #define PS_LARGE_PAGES                          8
00112 #define PS_ALL_FLAGS                            (PS_REQUEST_BREAKAWAY | \
00113                                                  PS_NO_DEBUG_INHERIT  | \
00114                                                  PS_INHERIT_HANDLES   | \
00115                                                  PS_LARGE_PAGES)
00116 
00117 //
00118 // Process base priorities
00119 //
00120 #define PROCESS_PRIORITY_IDLE                   3
00121 #define PROCESS_PRIORITY_NORMAL                 8
00122 #define PROCESS_PRIORITY_NORMAL_FOREGROUND      9
00123 
00124 //
00125 // Process memory priorities
00126 //
00127 #define MEMORY_PRIORITY_BACKGROUND             0
00128 #define MEMORY_PRIORITY_UNKNOWN                1
00129 #define MEMORY_PRIORITY_FOREGROUND             2
00130 
00131 //
00132 // Process Priority Separation Values (OR)
00133 //
00134 #define PSP_VARIABLE_QUANTUMS                   4
00135 #define PSP_LONG_QUANTUMS                       16
00136 
00137 #ifndef NTOS_MODE_USER
00138 //
00139 // Thread Access Types
00140 //
00141 #define THREAD_QUERY_INFORMATION                0x0040
00142 #define THREAD_SET_THREAD_TOKEN                 0x0080
00143 #define THREAD_IMPERSONATE                      0x0100
00144 #define THREAD_DIRECT_IMPERSONATION             0x0200
00145 
00146 //
00147 // Process Access Types
00148 //
00149 #define PROCESS_TERMINATE                       0x0001
00150 #define PROCESS_CREATE_THREAD                   0x0002
00151 #define PROCESS_SET_SESSIONID                   0x0004
00152 #define PROCESS_VM_OPERATION                    0x0008
00153 #define PROCESS_VM_READ                         0x0010
00154 #define PROCESS_VM_WRITE                        0x0020
00155 #define PROCESS_CREATE_PROCESS                  0x0080
00156 #define PROCESS_SET_QUOTA                       0x0100
00157 #define PROCESS_SET_INFORMATION                 0x0200
00158 #define PROCESS_QUERY_INFORMATION               0x0400
00159 #define PROCESS_SUSPEND_RESUME                  0x0800
00160 #define PROCESS_QUERY_LIMITED_INFORMATION       0x1000
00161 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00162 #define PROCESS_ALL_ACCESS                      (STANDARD_RIGHTS_REQUIRED | \
00163                                                  SYNCHRONIZE | \
00164                                                  0xFFFF)
00165 #else
00166 #define PROCESS_ALL_ACCESS                      (STANDARD_RIGHTS_REQUIRED | \
00167                                                  SYNCHRONIZE | \
00168                                                  0xFFF)
00169 #endif
00170 
00171 //
00172 // Thread Base Priorities
00173 //
00174 #define THREAD_BASE_PRIORITY_LOWRT              15
00175 #define THREAD_BASE_PRIORITY_MAX                2
00176 #define THREAD_BASE_PRIORITY_MIN                -2
00177 #define THREAD_BASE_PRIORITY_IDLE               -15
00178 
00179 //
00180 // TLS Slots
00181 //
00182 #define TLS_MINIMUM_AVAILABLE                   64
00183 
00184 //
00185 // Job Access Types
00186 //
00187 #define JOB_OBJECT_ASSIGN_PROCESS               0x1
00188 #define JOB_OBJECT_SET_ATTRIBUTES               0x2
00189 #define JOB_OBJECT_QUERY                        0x4
00190 #define JOB_OBJECT_TERMINATE                    0x8
00191 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES      0x10
00192 #define JOB_OBJECT_ALL_ACCESS                   (STANDARD_RIGHTS_REQUIRED | \
00193                                                  SYNCHRONIZE | \
00194                                                  31)
00195 
00196 //
00197 // Job Limit Flags
00198 //
00199 #define JOB_OBJECT_LIMIT_WORKINGSET             0x1
00200 #define JOB_OBJECT_LIMIT_PROCESS_TIME           0x2
00201 #define JOB_OBJECT_LIMIT_JOB_TIME               0x4
00202 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS         0x8
00203 #define JOB_OBJECT_LIMIT_AFFINITY               0x10
00204 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS         0x20
00205 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME      0x40
00206 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS       0x80
00207 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY         0x100
00208 #define JOB_OBJECT_LIMIT_JOB_MEMORY             0x200
00209 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x400
00210 #define JOB_OBJECT_LIMIT_BREAKAWAY_OK           0x800
00211 #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK    0x1000
00212 #define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE      0x2000
00213 
00214 //
00215 // Cross Thread Flags
00216 //
00217 #define CT_TERMINATED_BIT                       0x1
00218 #define CT_DEAD_THREAD_BIT                      0x2
00219 #define CT_HIDE_FROM_DEBUGGER_BIT               0x4
00220 #define CT_ACTIVE_IMPERSONATION_INFO_BIT        0x8
00221 #define CT_SYSTEM_THREAD_BIT                    0x10
00222 #define CT_HARD_ERRORS_ARE_DISABLED_BIT         0x20
00223 #define CT_BREAK_ON_TERMINATION_BIT             0x40
00224 #define CT_SKIP_CREATION_MSG_BIT                0x80
00225 #define CT_SKIP_TERMINATION_MSG_BIT             0x100
00226 
00227 //
00228 // Same Thread Passive Flags
00229 //
00230 #define STP_ACTIVE_EX_WORKER_BIT                0x1
00231 #define STP_EX_WORKER_CAN_WAIT_USER_BIT         0x2
00232 #define STP_MEMORY_MAKER_BIT                    0x4
00233 #define STP_KEYED_EVENT_IN_USE_BIT              0x8
00234 
00235 //
00236 // Same Thread APC Flags
00237 //
00238 #define STA_LPC_RECEIVED_MSG_ID_VALID_BIT       0x1
00239 #define STA_LPC_EXIT_THREAD_CALLED_BIT          0x2
00240 #define STA_ADDRESS_SPACE_OWNER_BIT             0x4
00241 #define STA_OWNS_WORKING_SET_BITS               0x1F8
00242 
00243 //
00244 // Kernel Process flags (maybe in ketypes.h?)
00245 //
00246 #define KPSF_AUTO_ALIGNMENT_BIT                 0
00247 #define KPSF_DISABLE_BOOST_BIT                  1
00248 
00249 //
00250 // Process Flags
00251 //
00252 #define PSF_CREATE_REPORTED_BIT                 0x1
00253 #define PSF_NO_DEBUG_INHERIT_BIT                0x2
00254 #define PSF_PROCESS_EXITING_BIT                 0x4
00255 #define PSF_PROCESS_DELETE_BIT                  0x8
00256 #define PSF_WOW64_SPLIT_PAGES_BIT               0x10
00257 #define PSF_VM_DELETED_BIT                      0x20
00258 #define PSF_OUTSWAP_ENABLED_BIT                 0x40
00259 #define PSF_OUTSWAPPED_BIT                      0x80
00260 #define PSF_FORK_FAILED_BIT                     0x100
00261 #define PSF_WOW64_VA_SPACE_4GB_BIT              0x200
00262 #define PSF_ADDRESS_SPACE_INITIALIZED_BIT       0x400
00263 #define PSF_SET_TIMER_RESOLUTION_BIT            0x1000
00264 #define PSF_BREAK_ON_TERMINATION_BIT            0x2000
00265 #define PSF_SESSION_CREATION_UNDERWAY_BIT       0x4000
00266 #define PSF_WRITE_WATCH_BIT                     0x8000
00267 #define PSF_PROCESS_IN_SESSION_BIT              0x10000
00268 #define PSF_OVERRIDE_ADDRESS_SPACE_BIT          0x20000
00269 #define PSF_HAS_ADDRESS_SPACE_BIT               0x40000
00270 #define PSF_LAUNCH_PREFETCHED_BIT               0x80000
00271 #define PSF_INJECT_INPAGE_ERRORS_BIT            0x100000
00272 #define PSF_VM_TOP_DOWN_BIT                     0x200000
00273 #define PSF_IMAGE_NOTIFY_DONE_BIT               0x400000
00274 #define PSF_PDE_UPDATE_NEEDED_BIT               0x800000
00275 #define PSF_VDM_ALLOWED_BIT                     0x1000000
00276 #define PSF_SWAP_ALLOWED_BIT                    0x2000000
00277 #define PSF_CREATE_FAILED_BIT                   0x4000000
00278 #define PSF_DEFAULT_IO_PRIORITY_BIT             0x8000000
00279 
00280 //
00281 // Vista Process Flags
00282 //
00283 #define PSF2_PROTECTED_BIT                      0x800
00284 #endif
00285 
00286 //
00287 // TLS/FLS Defines
00288 //
00289 #define TLS_EXPANSION_SLOTS                     1024
00290 
00291 #ifdef NTOS_MODE_USER
00292 //
00293 // Thread Native Base Priorities
00294 //
00295 #define LOW_PRIORITY                            0
00296 #define LOW_REALTIME_PRIORITY                   16
00297 #define HIGH_PRIORITY                           31
00298 #define MAXIMUM_PRIORITY                        32
00299 
00300 //
00301 // Current Process/Thread built-in 'special' handles
00302 //
00303 #define NtCurrentProcess()                      ((HANDLE)(LONG_PTR)-1)
00304 #define ZwCurrentProcess()                      NtCurrentProcess()
00305 #define NtCurrentThread()                       ((HANDLE)(LONG_PTR)-2)
00306 #define ZwCurrentThread()                       NtCurrentThread()
00307 
00308 //
00309 // Process/Thread/Job Information Classes for NtQueryInformationProcess/Thread/Job
00310 //
00311 typedef enum _PROCESSINFOCLASS
00312 {
00313     ProcessBasicInformation,
00314     ProcessQuotaLimits,
00315     ProcessIoCounters,
00316     ProcessVmCounters,
00317     ProcessTimes,
00318     ProcessBasePriority,
00319     ProcessRaisePriority,
00320     ProcessDebugPort,
00321     ProcessExceptionPort,
00322     ProcessAccessToken,
00323     ProcessLdtInformation,
00324     ProcessLdtSize,
00325     ProcessDefaultHardErrorMode,
00326     ProcessIoPortHandlers,
00327     ProcessPooledUsageAndLimits,
00328     ProcessWorkingSetWatch,
00329     ProcessUserModeIOPL,
00330     ProcessEnableAlignmentFaultFixup,
00331     ProcessPriorityClass,
00332     ProcessWx86Information,
00333     ProcessHandleCount,
00334     ProcessAffinityMask,
00335     ProcessPriorityBoost,
00336     ProcessDeviceMap,
00337     ProcessSessionInformation,
00338     ProcessForegroundInformation,
00339     ProcessWow64Information,
00340     ProcessImageFileName,
00341     ProcessLUIDDeviceMapsEnabled,
00342     ProcessBreakOnTermination,
00343     ProcessDebugObjectHandle,
00344     ProcessDebugFlags,
00345     ProcessHandleTracing,
00346     ProcessIoPriority,
00347     ProcessExecuteFlags,
00348     ProcessTlsInformation,
00349     ProcessCookie,
00350     ProcessImageInformation,
00351     ProcessCycleTime,
00352     ProcessPagePriority,
00353     ProcessInstrumentationCallback,
00354     ProcessThreadStackAllocation,
00355     ProcessWorkingSetWatchEx,
00356     ProcessImageFileNameWin32,
00357     ProcessImageFileMapping,
00358     ProcessAffinityUpdateMode,
00359     ProcessMemoryAllocationMode,
00360     MaxProcessInfoClass
00361 } PROCESSINFOCLASS;
00362 
00363 typedef enum _THREADINFOCLASS
00364 {
00365     ThreadBasicInformation,
00366     ThreadTimes,
00367     ThreadPriority,
00368     ThreadBasePriority,
00369     ThreadAffinityMask,
00370     ThreadImpersonationToken,
00371     ThreadDescriptorTableEntry,
00372     ThreadEnableAlignmentFaultFixup,
00373     ThreadEventPair_Reusable,
00374     ThreadQuerySetWin32StartAddress,
00375     ThreadZeroTlsCell,
00376     ThreadPerformanceCount,
00377     ThreadAmILastThread,
00378     ThreadIdealProcessor,
00379     ThreadPriorityBoost,
00380     ThreadSetTlsArrayAddress,
00381     ThreadIsIoPending,
00382     ThreadHideFromDebugger,
00383     ThreadBreakOnTermination,
00384     ThreadSwitchLegacyState,
00385     ThreadIsTerminated,
00386     ThreadLastSystemCall,
00387     ThreadIoPriority,
00388     ThreadCycleTime,
00389     ThreadPagePriority,
00390     ThreadActualBasePriority,
00391     ThreadTebInformation,
00392     ThreadCSwitchMon,
00393     MaxThreadInfoClass
00394 } THREADINFOCLASS;
00395 
00396 #else
00397 
00398 typedef enum _PSPROCESSPRIORITYMODE
00399 {
00400     PsProcessPriorityForeground,
00401     PsProcessPriorityBackground,
00402     PsProcessPrioritySpinning
00403 } PSPROCESSPRIORITYMODE;
00404 
00405 typedef enum _JOBOBJECTINFOCLASS
00406 {
00407     JobObjectBasicAccountingInformation = 1,
00408     JobObjectBasicLimitInformation,
00409     JobObjectBasicProcessIdList,
00410     JobObjectBasicUIRestrictions,
00411     JobObjectSecurityLimitInformation,
00412     JobObjectEndOfJobTimeInformation,
00413     JobObjectAssociateCompletionPortInformation,
00414     JobObjectBasicAndIoAccountingInformation,
00415     JobObjectExtendedLimitInformation,
00416     JobObjectJobSetInformation,
00417     MaxJobObjectInfoClass
00418 } JOBOBJECTINFOCLASS;
00419 
00420 //
00421 // Power Event Events for Win32K Power Event Callback
00422 //
00423 typedef enum _PSPOWEREVENTTYPE
00424 {
00425     PsW32FullWake = 0,
00426     PsW32EventCode = 1,
00427     PsW32PowerPolicyChanged = 2,
00428     PsW32SystemPowerState = 3,
00429     PsW32SystemTime = 4,
00430     PsW32DisplayState = 5,
00431     PsW32CapabilitiesChanged = 6,
00432     PsW32SetStateFailed = 7,
00433     PsW32GdiOff = 8,
00434     PsW32GdiOn = 9,
00435     PsW32GdiPrepareResumeUI = 10,
00436     PsW32GdiOffRequest = 11,
00437     PsW32MonitorOff = 12,
00438 } PSPOWEREVENTTYPE;
00439 
00440 //
00441 // Power State Tasks for Win32K Power State Callback
00442 //
00443 typedef enum _POWERSTATETASK
00444 {
00445     PowerState_BlockSessionSwitch = 0,
00446     PowerState_Init = 1,
00447     PowerState_QueryApps = 2,
00448     PowerState_QueryServices = 3,
00449     PowerState_QueryAppsFailed = 4,
00450     PowerState_QueryServicesFailed = 5,
00451     PowerState_SuspendApps = 6,
00452     PowerState_SuspendServices = 7,
00453     PowerState_ShowUI = 8,
00454     PowerState_NotifyWL = 9,
00455     PowerState_ResumeApps = 10,
00456     PowerState_ResumeServices = 11,
00457     PowerState_UnBlockSessionSwitch = 12,
00458     PowerState_End = 13,
00459     PowerState_BlockInput = 14,
00460     PowerState_UnblockInput = 15,
00461 } POWERSTATETASK;
00462 
00463 //
00464 // Win32K Job Callback Types
00465 //
00466 typedef enum _PSW32JOBCALLOUTTYPE
00467 {
00468    PsW32JobCalloutSetInformation = 0,
00469    PsW32JobCalloutAddProcess = 1,
00470    PsW32JobCalloutTerminate = 2,
00471 } PSW32JOBCALLOUTTYPE;
00472 
00473 //
00474 // Win32K Thread Callback Types
00475 //
00476 typedef enum _PSW32THREADCALLOUTTYPE
00477 {
00478     PsW32ThreadCalloutInitialize,
00479     PsW32ThreadCalloutExit,
00480 } PSW32THREADCALLOUTTYPE;
00481 
00482 //
00483 // Declare empty structure definitions so that they may be referenced by
00484 // routines before they are defined
00485 //
00486 struct _W32THREAD;
00487 struct _W32PROCESS;
00488 //struct _ETHREAD;
00489 struct _WIN32_POWEREVENT_PARAMETERS;
00490 struct _WIN32_POWERSTATE_PARAMETERS;
00491 struct _WIN32_JOBCALLOUT_PARAMETERS;
00492 struct _WIN32_OPENMETHOD_PARAMETERS;
00493 struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS;
00494 struct _WIN32_CLOSEMETHOD_PARAMETERS;
00495 struct _WIN32_DELETEMETHOD_PARAMETERS;
00496 struct _WIN32_PARSEMETHOD_PARAMETERS;
00497 
00498 //
00499 // Win32K Process and Thread Callbacks
00500 //
00501 typedef
00502 NTSTATUS
00503 (NTAPI *PKWIN32_PROCESS_CALLOUT)(
00504     struct _EPROCESS *Process,
00505     BOOLEAN Create
00506 );
00507 
00508 typedef
00509 NTSTATUS
00510 (NTAPI *PKWIN32_THREAD_CALLOUT)(
00511     struct _ETHREAD *Thread,
00512     PSW32THREADCALLOUTTYPE Type
00513 );
00514 
00515 typedef
00516 NTSTATUS
00517 (NTAPI *PKWIN32_GLOBALATOMTABLE_CALLOUT)(
00518     VOID
00519 );
00520 
00521 typedef
00522 NTSTATUS
00523 (NTAPI *PKWIN32_POWEREVENT_CALLOUT)(
00524     struct _WIN32_POWEREVENT_PARAMETERS *Parameters
00525 );
00526 
00527 typedef
00528 NTSTATUS
00529 (NTAPI *PKWIN32_POWERSTATE_CALLOUT)(
00530     struct _WIN32_POWERSTATE_PARAMETERS *Parameters
00531 );
00532 
00533 typedef
00534 NTSTATUS
00535 (NTAPI *PKWIN32_JOB_CALLOUT)(
00536     struct _WIN32_JOBCALLOUT_PARAMETERS *Parameters
00537 );
00538 
00539 typedef
00540 NTSTATUS
00541 (NTAPI *PGDI_BATCHFLUSH_ROUTINE)(
00542     VOID
00543 );
00544 
00545 typedef
00546 NTSTATUS
00547 (NTAPI *PKWIN32_OPENMETHOD_CALLOUT)(
00548     struct _WIN32_OPENMETHOD_PARAMETERS *Parameters
00549 );
00550 
00551 typedef
00552 NTSTATUS
00553 (NTAPI *PKWIN32_OKTOCLOSEMETHOD_CALLOUT)(
00554     struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS *Parameters
00555 );
00556 
00557 typedef
00558 NTSTATUS
00559 (NTAPI *PKWIN32_CLOSEMETHOD_CALLOUT)(
00560     struct _WIN32_CLOSEMETHOD_PARAMETERS *Parameters
00561 );
00562 
00563 typedef
00564 VOID
00565 (NTAPI *PKWIN32_DELETEMETHOD_CALLOUT)(
00566     struct _WIN32_DELETEMETHOD_PARAMETERS *Parameters
00567 );
00568 
00569 typedef
00570 NTSTATUS
00571 (NTAPI *PKWIN32_PARSEMETHOD_CALLOUT)(
00572     struct _WIN32_PARSEMETHOD_PARAMETERS *Parameters
00573 );
00574 
00575 typedef
00576 NTSTATUS
00577 (NTAPI *PKWIN32_WIN32DATACOLLECTION_CALLOUT)(
00578     struct _EPROCESS *Process,
00579     PVOID Callback,
00580     PVOID Context
00581 );
00582 
00583 //
00584 // Lego Callback
00585 //
00586 typedef
00587 VOID
00588 (NTAPI *PLEGO_NOTIFY_ROUTINE)(
00589     IN PKTHREAD Thread
00590 );
00591 
00592 #endif
00593 
00594 typedef NTSTATUS
00595 (NTAPI *PPOST_PROCESS_INIT_ROUTINE)(
00596     VOID
00597 );
00598 
00599 //
00600 // Descriptor Table Entry Definition
00601 //
00602 #if (_M_IX86)
00603 #define _DESCRIPTOR_TABLE_ENTRY_DEFINED
00604 typedef struct _DESCRIPTOR_TABLE_ENTRY
00605 {
00606     ULONG Selector;
00607     LDT_ENTRY Descriptor;
00608 } DESCRIPTOR_TABLE_ENTRY, *PDESCRIPTOR_TABLE_ENTRY;
00609 #endif
00610 
00611 //
00612 // PEB Lock Routine
00613 //
00614 typedef VOID
00615 (NTAPI *PPEBLOCKROUTINE)(
00616     PVOID PebLock
00617 );
00618 
00619 //
00620 // PEB Free Block Descriptor
00621 //
00622 typedef struct _PEB_FREE_BLOCK
00623 {
00624     struct _PEB_FREE_BLOCK* Next;
00625     ULONG Size;
00626 } PEB_FREE_BLOCK, *PPEB_FREE_BLOCK;
00627 
00628 //
00629 // Initial PEB
00630 //
00631 typedef struct _INITIAL_PEB
00632 {
00633     BOOLEAN InheritedAddressSpace;
00634     BOOLEAN ReadImageFileExecOptions;
00635     BOOLEAN BeingDebugged;
00636     union
00637     {
00638         BOOLEAN BitField;
00639 #if (NTDDI_VERSION >= NTDDI_WS03)
00640         struct
00641         {
00642             BOOLEAN ImageUsesLargePages:1;
00643 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00644             BOOLEAN IsProtectedProcess:1;
00645             BOOLEAN IsLegacyProcess:1;
00646             BOOLEAN SpareBits:5;
00647 #else
00648             BOOLEAN SpareBits:7;
00649 #endif
00650         };
00651 #else
00652         BOOLEAN SpareBool;
00653 #endif
00654     };
00655     HANDLE Mutant;
00656 } INITIAL_PEB, *PINITIAL_PEB;
00657 
00658 //
00659 // Initial TEB
00660 //
00661 typedef struct _INITIAL_TEB
00662 {
00663     PVOID PreviousStackBase;
00664     PVOID PreviousStackLimit;
00665     PVOID StackBase;
00666     PVOID StackLimit;
00667     PVOID AllocatedStackBase;
00668 } INITIAL_TEB, *PINITIAL_TEB;
00669 
00670 //
00671 // TEB Active Frame Structures
00672 //
00673 typedef struct _TEB_ACTIVE_FRAME_CONTEXT
00674 {
00675     ULONG Flags;
00676     LPSTR FrameName;
00677 } TEB_ACTIVE_FRAME_CONTEXT, *PTEB_ACTIVE_FRAME_CONTEXT;
00678 
00679 typedef struct _TEB_ACTIVE_FRAME
00680 {
00681     ULONG Flags;
00682     struct _TEB_ACTIVE_FRAME *Previous;
00683     PTEB_ACTIVE_FRAME_CONTEXT Context;
00684 } TEB_ACTIVE_FRAME, *PTEB_ACTIVE_FRAME;
00685 
00686 typedef struct _CLIENT_ID32
00687 {
00688     ULONG UniqueProcess;
00689     ULONG UniqueThread;
00690 } CLIENT_ID32, *PCLIENT_ID32;
00691 
00692 typedef struct _CLIENT_ID64
00693 {
00694     ULONG64 UniqueProcess;
00695     ULONG64 UniqueThread;
00696 } CLIENT_ID64, *PCLIENT_ID64;
00697 
00698 #if (NTDDI_VERSION < NTDDI_WS03)
00699 typedef struct _Wx86ThreadState
00700 {
00701     PULONG  CallBx86Eip;
00702     PVOID   DeallocationCpu;
00703     BOOLEAN UseKnownWx86Dll;
00704     CHAR    OleStubInvoked;
00705 } Wx86ThreadState, *PWx86ThreadState;
00706 #endif
00707 
00708 
00709 //
00710 // Process Environment Block (PEB)
00711 // Thread Environment Block (TEB)
00712 //
00713 #include "peb_teb.h"
00714 
00715 #ifdef _WIN64
00716 //
00717 // Explicit 32 bit PEB/TEB
00718 //
00719 #define EXPLICIT_32BIT
00720 #include "peb_teb.h"
00721 #undef EXPLICIT_32BIT
00722 
00723 //
00724 // Explicit 64 bit PEB/TEB
00725 //
00726 #define EXPLICIT_64BIT
00727 #include "peb_teb.h"
00728 #undef EXPLICIT_64BIT
00729 #endif
00730 
00731 #ifdef NTOS_MODE_USER
00732 
00733 //
00734 // Process Information Structures for NtQueryProcessInformation
00735 //
00736 typedef struct _PROCESS_BASIC_INFORMATION
00737 {
00738     NTSTATUS ExitStatus;
00739     PPEB PebBaseAddress;
00740     ULONG_PTR AffinityMask;
00741     KPRIORITY BasePriority;
00742     ULONG_PTR UniqueProcessId;
00743     ULONG_PTR InheritedFromUniqueProcessId;
00744 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
00745 
00746 typedef struct _PROCESS_ACCESS_TOKEN
00747 {
00748     HANDLE Token;
00749     HANDLE Thread;
00750 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
00751 
00752 typedef struct _PROCESS_DEVICEMAP_INFORMATION
00753 {
00754     union
00755     {
00756         struct
00757         {
00758             HANDLE DirectoryHandle;
00759         } Set;
00760         struct
00761         {
00762             ULONG DriveMap;
00763             UCHAR DriveType[32];
00764         } Query;
00765     };
00766 } PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
00767 
00768 typedef struct _KERNEL_USER_TIMES
00769 {
00770     LARGE_INTEGER CreateTime;
00771     LARGE_INTEGER ExitTime;
00772     LARGE_INTEGER KernelTime;
00773     LARGE_INTEGER UserTime;
00774 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
00775 
00776 typedef struct _POOLED_USAGE_AND_LIMITS
00777 {
00778     SIZE_T PeakPagedPoolUsage;
00779     SIZE_T PagedPoolUsage;
00780     SIZE_T PagedPoolLimit;
00781     SIZE_T PeakNonPagedPoolUsage;
00782     SIZE_T NonPagedPoolUsage;
00783     SIZE_T NonPagedPoolLimit;
00784     SIZE_T PeakPagefileUsage;
00785     SIZE_T PagefileUsage;
00786     SIZE_T PagefileLimit;
00787 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
00788 
00789 typedef struct _PROCESS_SESSION_INFORMATION
00790 {
00791     ULONG SessionId;
00792 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
00793 
00794 #endif
00795 
00796 typedef struct _PROCESS_PRIORITY_CLASS
00797 {
00798     BOOLEAN Foreground;
00799     UCHAR PriorityClass;
00800 } PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;
00801 
00802 typedef struct _PROCESS_FOREGROUND_BACKGROUND
00803 {
00804     BOOLEAN Foreground;
00805 } PROCESS_FOREGROUND_BACKGROUND, *PPROCESS_FOREGROUND_BACKGROUND;
00806 
00807 //
00808 // Thread Information Structures for NtQueryProcessInformation
00809 //
00810 typedef struct _THREAD_BASIC_INFORMATION
00811 {
00812     NTSTATUS ExitStatus;
00813     PVOID TebBaseAddress;
00814     CLIENT_ID ClientId;
00815     KAFFINITY AffinityMask;
00816     KPRIORITY Priority;
00817     KPRIORITY BasePriority;
00818 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
00819 
00820 #ifndef NTOS_MODE_USER
00821 
00822 //
00823 // Job Set Array
00824 //
00825 typedef struct _JOB_SET_ARRAY
00826 {
00827     HANDLE JobHandle;
00828     ULONG MemberLevel;
00829     ULONG Flags;
00830 } JOB_SET_ARRAY, *PJOB_SET_ARRAY;
00831 
00832 //
00833 // EPROCESS Quota Structures
00834 //
00835 typedef struct _EPROCESS_QUOTA_ENTRY
00836 {
00837     SIZE_T Usage;
00838     SIZE_T Limit;
00839     SIZE_T Peak;
00840     SIZE_T Return;
00841 } EPROCESS_QUOTA_ENTRY, *PEPROCESS_QUOTA_ENTRY;
00842 
00843 typedef struct _EPROCESS_QUOTA_BLOCK
00844 {
00845     EPROCESS_QUOTA_ENTRY QuotaEntry[3];
00846     LIST_ENTRY QuotaList;
00847     ULONG ReferenceCount;
00848     ULONG ProcessCount;
00849 } EPROCESS_QUOTA_BLOCK, *PEPROCESS_QUOTA_BLOCK;
00850 
00851 //
00852 // Process Pagefault History
00853 //
00854 typedef struct _PAGEFAULT_HISTORY
00855 {
00856     ULONG CurrentIndex;
00857     ULONG MapIndex;
00858     KSPIN_LOCK SpinLock;
00859     PVOID Reserved;
00860     PROCESS_WS_WATCH_INFORMATION WatchInfo[1];
00861 } PAGEFAULT_HISTORY, *PPAGEFAULT_HISTORY;
00862 
00863 //
00864 // Process Impersonation Information
00865 //
00866 typedef struct _PS_IMPERSONATION_INFORMATION
00867 {
00868     PACCESS_TOKEN Token;
00869     BOOLEAN CopyOnOpen;
00870     BOOLEAN EffectiveOnly;
00871     SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
00872 } PS_IMPERSONATION_INFORMATION, *PPS_IMPERSONATION_INFORMATION;
00873 
00874 //
00875 // Process Termination Port
00876 //
00877 typedef struct _TERMINATION_PORT
00878 {
00879     struct _TERMINATION_PORT *Next;
00880     PVOID Port;
00881 } TERMINATION_PORT, *PTERMINATION_PORT;
00882 
00883 //
00884 // Per-Process APC Rate Limiting
00885 //
00886 typedef struct _PSP_RATE_APC
00887 {
00888     union
00889     {
00890         SINGLE_LIST_ENTRY NextApc;
00891         ULONGLONG ExcessCycles;
00892     };
00893     ULONGLONG TargetGEneration;
00894     KAPC RateApc;
00895 } PSP_RATE_APC, *PPSP_RATE_APC;
00896 
00897 //
00898 // Executive Thread (ETHREAD)
00899 //
00900 typedef struct _ETHREAD
00901 {
00902     KTHREAD Tcb;
00903     LARGE_INTEGER CreateTime;
00904     union
00905     {
00906         LARGE_INTEGER ExitTime;
00907         LIST_ENTRY LpcReplyChain;
00908         LIST_ENTRY KeyedWaitChain;
00909     };
00910     union
00911     {
00912         NTSTATUS ExitStatus;
00913         PVOID OfsChain;
00914     };
00915     LIST_ENTRY PostBlockList;
00916     union
00917     {
00918         struct _TERMINATION_PORT *TerminationPort;
00919         struct _ETHREAD *ReaperLink;
00920         PVOID KeyedWaitValue;
00921 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00922         PVOID Win32StartParameter;
00923 #endif
00924     };
00925     KSPIN_LOCK ActiveTimerListLock;
00926     LIST_ENTRY ActiveTimerListHead;
00927     CLIENT_ID Cid;
00928 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00929     KSEMAPHORE KeyedWaitSemaphore;
00930 #else
00931     union
00932     {
00933         KSEMAPHORE LpcReplySemaphore;
00934         KSEMAPHORE KeyedWaitSemaphore;
00935     };
00936     union
00937     {
00938         PVOID LpcReplyMessage;
00939         PVOID LpcWaitingOnPort;
00940     };
00941 #endif
00942     PPS_IMPERSONATION_INFORMATION ImpersonationInfo;
00943     LIST_ENTRY IrpList;
00944     ULONG_PTR TopLevelIrp;
00945     PDEVICE_OBJECT DeviceToVerify;
00946 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00947     PPSP_RATE_APC RateControlApc;
00948 #else
00949     struct _EPROCESS *ThreadsProcess;
00950 #endif
00951     PVOID Win32StartAddress;
00952     union
00953     {
00954         PKSTART_ROUTINE StartAddress;
00955         ULONG LpcReceivedMessageId;
00956     };
00957     LIST_ENTRY ThreadListEntry;
00958     EX_RUNDOWN_REF RundownProtect;
00959     EX_PUSH_LOCK ThreadLock;
00960 #if (NTDDI_VERSION < NTDDI_LONGHORN)
00961     ULONG LpcReplyMessageId;
00962 #endif
00963     ULONG ReadClusterSize;
00964 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00965     ULONG SpareUlong0;
00966 #else
00967     ACCESS_MASK GrantedAccess;
00968 #endif
00969     union
00970     {
00971         struct
00972         {
00973            ULONG Terminated:1;
00974 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00975            ULONG ThreadInserted:1;
00976 #else
00977            ULONG DeadThread:1;
00978 #endif
00979            ULONG HideFromDebugger:1;
00980            ULONG ActiveImpersonationInfo:1;
00981            ULONG SystemThread:1;
00982            ULONG HardErrorsAreDisabled:1;
00983            ULONG BreakOnTermination:1;
00984            ULONG SkipCreationMsg:1;
00985            ULONG SkipTerminationMsg:1;
00986 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
00987            ULONG CreateMsgSent:1;
00988            ULONG ThreadIoPriority:3;
00989            ULONG ThreadPagePriority:3;
00990            ULONG PendingRatecontrol:1;
00991 #endif
00992         };
00993         ULONG CrossThreadFlags;
00994     };
00995     union
00996     {
00997         struct
00998         {
00999            ULONG ActiveExWorker:1;
01000            ULONG ExWorkerCanWaitUser:1;
01001            ULONG MemoryMaker:1;
01002            ULONG KeyedEventInUse:1;
01003 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01004            ULONG RateApcState:2;
01005 #endif
01006         };
01007         ULONG SameThreadPassiveFlags;
01008     };
01009     union
01010     {
01011         struct
01012         {
01013            ULONG LpcReceivedMsgIdValid:1;
01014            ULONG LpcExitThreadCalled:1;
01015 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01016            ULONG Spare:1;
01017 #else
01018            ULONG AddressSpaceOwner:1;
01019 #endif
01020            ULONG OwnsProcessWorkingSetExclusive:1;
01021            ULONG OwnsProcessWorkingSetShared:1;
01022            ULONG OwnsSystemWorkingSetExclusive:1;
01023            ULONG OwnsSystemWorkingSetShared:1;
01024            ULONG OwnsSessionWorkingSetExclusive:1;
01025            ULONG OwnsSessionWorkingSetShared:1;
01026 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01027            ULONG SupressSymbolLoad:1;
01028            ULONG Spare1:3;
01029            ULONG PriorityRegionActive:4;
01030 #else
01031            ULONG ApcNeeded:1;
01032 #endif
01033         };
01034         ULONG SameThreadApcFlags;
01035     };
01036 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01037     UCHAR CacheManagerActive;
01038 #else
01039     UCHAR ForwardClusterOnly;
01040 #endif
01041     UCHAR DisablePageFaultClustering;
01042     UCHAR ActiveFaultCount;
01043 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01044     ULONG AlpcMessageId;
01045     union
01046     {
01047         PVOID AlpcMessage;
01048         ULONG AlpcReceiveAttributeSet;
01049     };
01050     LIST_ENTRY AlpcWaitListEntry;
01051     KSEMAPHORE AlpcWaitSemaphore;
01052     ULONG CacheManagerCount;
01053 #endif
01054 } ETHREAD;
01055 
01056 //
01057 // Executive Process (EPROCESS)
01058 //
01059 typedef struct _EPROCESS
01060 {
01061     KPROCESS Pcb;
01062     EX_PUSH_LOCK ProcessLock;
01063     LARGE_INTEGER CreateTime;
01064     LARGE_INTEGER ExitTime;
01065     EX_RUNDOWN_REF RundownProtect;
01066     HANDLE UniqueProcessId;
01067     LIST_ENTRY ActiveProcessLinks;
01068     SIZE_T QuotaUsage[3]; /* 0=PagedPool, 1=NonPagedPool, 2=Pagefile */
01069     SIZE_T QuotaPeak[3];  /* ditto */
01070     SIZE_T CommitCharge;
01071     SIZE_T PeakVirtualSize;
01072     SIZE_T VirtualSize;
01073     LIST_ENTRY SessionProcessLinks;
01074     PVOID DebugPort;
01075 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01076     union
01077     {
01078         PVOID ExceptionPortData;
01079         ULONG ExceptionPortValue;
01080         UCHAR ExceptionPortState:3;
01081     };
01082 #else
01083     PVOID ExceptionPort;
01084 #endif
01085     PHANDLE_TABLE ObjectTable;
01086     EX_FAST_REF Token;
01087     PFN_NUMBER WorkingSetPage;
01088 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01089     EX_PUSH_LOCK AddressCreationLock;
01090     PETHREAD RotateInProgress;
01091 #else
01092     KGUARDED_MUTEX AddressCreationLock;
01093     KSPIN_LOCK HyperSpaceLock;
01094 #endif
01095     PETHREAD ForkInProgress;
01096     ULONG_PTR HardwareTrigger;
01097     PMM_AVL_TABLE PhysicalVadRoot;
01098     PVOID CloneRoot;
01099     PFN_NUMBER NumberOfPrivatePages;
01100     PFN_NUMBER NumberOfLockedPages;
01101     PVOID *Win32Process;
01102     struct _EJOB *Job;
01103     PVOID SectionObject;
01104     PVOID SectionBaseAddress;
01105     PEPROCESS_QUOTA_BLOCK QuotaBlock;
01106     PPAGEFAULT_HISTORY WorkingSetWatch;
01107     PVOID Win32WindowStation;
01108     HANDLE InheritedFromUniqueProcessId;
01109     PVOID LdtInformation;
01110     PVOID VadFreeHint;
01111     PVOID VdmObjects;
01112     PVOID DeviceMap;
01113 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01114     PVOID EtwDataSource;
01115     PVOID FreeTebHint;
01116 #else
01117     PVOID Spare0[3];
01118 #endif
01119     union
01120     {
01121         HARDWARE_PTE PageDirectoryPte;
01122         ULONGLONG Filler;
01123     };
01124     PVOID Session;
01125     CHAR ImageFileName[16];
01126     LIST_ENTRY JobLinks;
01127     PVOID LockedPagesList;
01128     LIST_ENTRY ThreadListHead;
01129     PVOID SecurityPort;
01130 #ifdef _M_AMD64
01131     struct _WOW64_PROCESS *Wow64Process;
01132 #else
01133     PVOID PaeTop;
01134 #endif
01135     ULONG ActiveThreads;
01136 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01137     ULONG ImagePathHash;
01138 #else
01139     ACCESS_MASK GrantedAccess;
01140 #endif
01141     ULONG DefaultHardErrorProcessing;
01142     NTSTATUS LastThreadExitStatus;
01143     struct _PEB* Peb;
01144     EX_FAST_REF PrefetchTrace;
01145     LARGE_INTEGER ReadOperationCount;
01146     LARGE_INTEGER WriteOperationCount;
01147     LARGE_INTEGER OtherOperationCount;
01148     LARGE_INTEGER ReadTransferCount;
01149     LARGE_INTEGER WriteTransferCount;
01150     LARGE_INTEGER OtherTransferCount;
01151     SIZE_T CommitChargeLimit;
01152     SIZE_T CommitChargePeak;
01153     PVOID AweInfo;
01154     SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo;
01155     MMSUPPORT Vm;
01156 #ifdef _M_AMD64
01157     ULONG Spares[2];
01158 #else
01159     LIST_ENTRY MmProcessLinks;
01160 #endif
01161     ULONG ModifiedPageCount;
01162 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01163     union
01164     {
01165         struct
01166         {
01167             ULONG JobNotReallyActive:1;
01168             ULONG AccountingFolded:1;
01169             ULONG NewProcessReported:1;
01170             ULONG ExitProcessReported:1;
01171             ULONG ReportCommitChanges:1;
01172             ULONG LastReportMemory:1;
01173             ULONG ReportPhysicalPageChanges:1;
01174             ULONG HandleTableRundown:1;
01175             ULONG NeedsHandleRundown:1;
01176             ULONG RefTraceEnabled:1;
01177             ULONG NumaAware:1;
01178             ULONG ProtectedProcess:1;
01179             ULONG DefaultPagePriority:3;
01180             ULONG ProcessDeleteSelf:1;
01181             ULONG ProcessVerifierTarget:1;
01182         };
01183         ULONG Flags2;
01184     };
01185 #else
01186     ULONG JobStatus;
01187 #endif
01188     union
01189     {
01190         struct
01191         {
01192             ULONG CreateReported:1;
01193             ULONG NoDebugInherit:1;
01194             ULONG ProcessExiting:1;
01195             ULONG ProcessDelete:1;
01196             ULONG Wow64SplitPages:1;
01197             ULONG VmDeleted:1;
01198             ULONG OutswapEnabled:1;
01199             ULONG Outswapped:1;
01200             ULONG ForkFailed:1;
01201             ULONG Wow64VaSpace4Gb:1;
01202             ULONG AddressSpaceInitialized:2;
01203             ULONG SetTimerResolution:1;
01204             ULONG BreakOnTermination:1;
01205 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01206             ULONG DeprioritizeViews:1;
01207 #else
01208             ULONG SessionCreationUnderway:1;
01209 #endif
01210             ULONG WriteWatch:1;
01211             ULONG ProcessInSession:1;
01212             ULONG OverrideAddressSpace:1;
01213             ULONG HasAddressSpace:1;
01214             ULONG LaunchPrefetched:1;
01215             ULONG InjectInpageErrors:1;
01216             ULONG VmTopDown:1;
01217             ULONG ImageNotifyDone:1;
01218             ULONG PdeUpdateNeeded:1;
01219             ULONG VdmAllowed:1;
01220             ULONG SmapAllowed:1;
01221 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01222             ULONG ProcessInserted:1;
01223 #else
01224             ULONG CreateFailed:1;
01225 #endif
01226             ULONG DefaultIoPriority:3;
01227 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01228             ULONG SparePsFlags1:2;
01229 #else
01230             ULONG Spare1:1;
01231             ULONG Spare2:1;
01232 #endif
01233         };
01234         ULONG Flags;
01235     };
01236     NTSTATUS ExitStatus;
01237 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01238     USHORT Spare7;
01239 #else
01240     USHORT NextPageColor;
01241 #endif
01242     union
01243     {
01244         struct
01245         {
01246             UCHAR SubSystemMinorVersion;
01247             UCHAR SubSystemMajorVersion;
01248         };
01249         USHORT SubSystemVersion;
01250     };
01251     UCHAR PriorityClass;
01252     MM_AVL_TABLE VadRoot;
01253     ULONG Cookie;
01254 } EPROCESS;
01255 
01256 //
01257 // Job Token Filter Data
01258 //
01259 #include <pshpack1.h>
01260 typedef struct _PS_JOB_TOKEN_FILTER
01261 {
01262     ULONG CapturedSidCount;
01263     PSID_AND_ATTRIBUTES CapturedSids;
01264     ULONG CapturedSidsLength;
01265     ULONG CapturedGroupCount;
01266     PSID_AND_ATTRIBUTES CapturedGroups;
01267     ULONG CapturedGroupsLength;
01268     ULONG CapturedPrivilegeCount;
01269     PLUID_AND_ATTRIBUTES CapturedPrivileges;
01270     ULONG CapturedPrivilegesLength;
01271 } PS_JOB_TOKEN_FILTER, *PPS_JOB_TOKEN_FILTER;
01272 
01273 //
01274 // Executive Job (EJOB)
01275 //
01276 typedef struct _EJOB
01277 {
01278     KEVENT Event;
01279     LIST_ENTRY JobLinks;
01280     LIST_ENTRY ProcessListHead;
01281     ERESOURCE JobLock;
01282     LARGE_INTEGER TotalUserTime;
01283     LARGE_INTEGER TotalKernelTime;
01284     LARGE_INTEGER ThisPeriodTotalUserTime;
01285     LARGE_INTEGER ThisPeriodTotalKernelTime;
01286     ULONG TotalPageFaultCount;
01287     ULONG TotalProcesses;
01288     ULONG ActiveProcesses;
01289     ULONG TotalTerminatedProcesses;
01290     LARGE_INTEGER PerProcessUserTimeLimit;
01291     LARGE_INTEGER PerJobUserTimeLimit;
01292     ULONG LimitFlags;
01293     ULONG MinimumWorkingSetSize;
01294     ULONG MaximumWorkingSetSize;
01295     ULONG ActiveProcessLimit;
01296     ULONG Affinity;
01297     UCHAR PriorityClass;
01298     ULONG UIRestrictionsClass;
01299     ULONG SecurityLimitFlags;
01300     PVOID Token;
01301     PPS_JOB_TOKEN_FILTER Filter;
01302     ULONG EndOfJobTimeAction;
01303     PVOID CompletionPort;
01304     PVOID CompletionKey;
01305     ULONG SessionId;
01306     ULONG SchedulingClass;
01307     ULONGLONG ReadOperationCount;
01308     ULONGLONG WriteOperationCount;
01309     ULONGLONG OtherOperationCount;
01310     ULONGLONG ReadTransferCount;
01311     ULONGLONG WriteTransferCount;
01312     ULONGLONG OtherTransferCount;
01313     IO_COUNTERS IoInfo;
01314     ULONG ProcessMemoryLimit;
01315     ULONG JobMemoryLimit;
01316     ULONG PeakProcessMemoryUsed;
01317     ULONG PeakJobMemoryUsed;
01318     ULONG CurrentJobMemoryUsed;
01319 #if (NTDDI_VERSION >= NTDDI_WINXP) && (NTDDI_VERSION < NTDDI_WS03)
01320     FAST_MUTEX MemoryLimitsLock;
01321 #elif (NTDDI_VERSION >= NTDDI_WS03) && (NTDDI_VERSION < NTDDI_LONGHORN)
01322     KGUARDED_MUTEX MemoryLimitsLock;
01323 #elif (NTDDI_VERSION >= NTDDI_LONGHORN)
01324     EX_PUSH_LOCK MemoryLimitsLock;
01325 #endif
01326     LIST_ENTRY JobSetLinks;
01327     ULONG MemberLevel;
01328     ULONG JobFlags;
01329 } EJOB, *PEJOB;
01330 #include <poppack.h>
01331 
01332 //
01333 // Win32K Callback Registration Data
01334 //
01335 typedef struct _WIN32_POWEREVENT_PARAMETERS
01336 {
01337     PSPOWEREVENTTYPE EventNumber;
01338     ULONG Code;
01339 } WIN32_POWEREVENT_PARAMETERS, *PWIN32_POWEREVENT_PARAMETERS;
01340 
01341 typedef struct _WIN32_POWERSTATE_PARAMETERS
01342 {
01343     UCHAR Promotion;
01344     POWER_ACTION SystemAction;
01345     SYSTEM_POWER_STATE MinSystemState;
01346     ULONG Flags;
01347     POWERSTATETASK PowerStateTask;
01348 } WIN32_POWERSTATE_PARAMETERS, *PWIN32_POWERSTATE_PARAMETERS;
01349 
01350 typedef struct _WIN32_JOBCALLOUT_PARAMETERS
01351 {
01352     PVOID Job;
01353     PSW32JOBCALLOUTTYPE CalloutType;
01354     PVOID Data;
01355 } WIN32_JOBCALLOUT_PARAMETERS, *PWIN32_JOBCALLOUT_PARAMETERS;
01356 
01357 typedef struct _WIN32_OPENMETHOD_PARAMETERS
01358 {
01359     OB_OPEN_REASON OpenReason;
01360     PEPROCESS Process;
01361     PVOID Object;
01362     ULONG GrantedAccess;
01363     ULONG HandleCount;
01364 } WIN32_OPENMETHOD_PARAMETERS, *PWIN32_OPENMETHOD_PARAMETERS;
01365 
01366 typedef struct _WIN32_OKAYTOCLOSEMETHOD_PARAMETERS
01367 {
01368     PEPROCESS Process;
01369     PVOID Object;
01370     HANDLE Handle;
01371     KPROCESSOR_MODE PreviousMode;
01372 } WIN32_OKAYTOCLOSEMETHOD_PARAMETERS, *PWIN32_OKAYTOCLOSEMETHOD_PARAMETERS;
01373 
01374 typedef struct _WIN32_CLOSEMETHOD_PARAMETERS
01375 {
01376     PEPROCESS Process;
01377     PVOID Object;
01378     ACCESS_MASK AccessMask;
01379     ULONG ProcessHandleCount;
01380     ULONG SystemHandleCount;
01381 } WIN32_CLOSEMETHOD_PARAMETERS, *PWIN32_CLOSEMETHOD_PARAMETERS;
01382 
01383 typedef struct _WIN32_DELETEMETHOD_PARAMETERS
01384 {
01385     PVOID Object;
01386 } WIN32_DELETEMETHOD_PARAMETERS, *PWIN32_DELETEMETHOD_PARAMETERS;
01387 
01388 typedef struct _WIN32_PARSEMETHOD_PARAMETERS
01389 {
01390     PVOID ParseObject;
01391     PVOID ObjectType;
01392     PACCESS_STATE AccessState;
01393     KPROCESSOR_MODE AccessMode;
01394     ULONG Attributes;
01395     OUT PUNICODE_STRING CompleteName;
01396     PUNICODE_STRING RemainingName;
01397     PVOID Context;
01398     PSECURITY_QUALITY_OF_SERVICE SecurityQos;
01399     PVOID *Object;
01400 } WIN32_PARSEMETHOD_PARAMETERS, *PWIN32_PARSEMETHOD_PARAMETERS;
01401 
01402 typedef struct _WIN32_CALLOUTS_FPNS
01403 {
01404     PKWIN32_PROCESS_CALLOUT ProcessCallout;
01405     PKWIN32_THREAD_CALLOUT ThreadCallout;
01406     PKWIN32_GLOBALATOMTABLE_CALLOUT GlobalAtomTableCallout;
01407     PKWIN32_POWEREVENT_CALLOUT PowerEventCallout;
01408     PKWIN32_POWERSTATE_CALLOUT PowerStateCallout;
01409     PKWIN32_JOB_CALLOUT JobCallout;
01410     PGDI_BATCHFLUSH_ROUTINE BatchFlushRoutine;
01411     PKWIN32_OPENMETHOD_CALLOUT DesktopOpenProcedure;
01412     PKWIN32_OKTOCLOSEMETHOD_CALLOUT DesktopOkToCloseProcedure;
01413     PKWIN32_CLOSEMETHOD_CALLOUT DesktopCloseProcedure;
01414     PKWIN32_DELETEMETHOD_CALLOUT DesktopDeleteProcedure;
01415     PKWIN32_OKTOCLOSEMETHOD_CALLOUT WindowStationOkToCloseProcedure;
01416     PKWIN32_CLOSEMETHOD_CALLOUT WindowStationCloseProcedure;
01417     PKWIN32_DELETEMETHOD_CALLOUT WindowStationDeleteProcedure;
01418     PKWIN32_PARSEMETHOD_CALLOUT WindowStationParseProcedure;
01419     PKWIN32_OPENMETHOD_CALLOUT WindowStationOpenProcedure;
01420     PKWIN32_WIN32DATACOLLECTION_CALLOUT Win32DataCollectionProcedure;
01421 } WIN32_CALLOUTS_FPNS, *PWIN32_CALLOUTS_FPNS;
01422 
01423 #endif // !NTOS_MODE_USER
01424 
01425 #endif // _PSTYPES_H

Generated on Sun May 27 2012 04:30:59 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.