37 Section =
Process->SectionObject;
79 ProcessInformationLength,
85 DPRINT1(
"NtQueryInformationProcess(): Information verification class failed! (Status -> 0x%lx, ProcessInformationClass -> %lx)\n",
Status, ProcessInformationClass);
102 switch (ProcessInformationClass)
167 Length = ProcessInformationLength;
215 QuotaLimits.
Flags |= (
Process->Vm.Flags.MaximumWorkingSetHard ?
217 QuotaLimits.
Flags |= (
Process->Vm.Flags.MinimumWorkingSetHard ?
247 if (ProcessInformationLength !=
sizeof(
IO_COUNTERS))
334 if (ProcessInformationLength !=
sizeof(
HANDLE))
374 if (ProcessInformationLength !=
sizeof(
ULONG))
399 *(
PULONG)ProcessInformation = HandleCount;
460 if ((ProcessInformationLength !=
sizeof(
VM_COUNTERS)) &&
495 Length = ProcessInformationLength;
512 if (ProcessInformationLength !=
sizeof(
ULONG))
535 DefaultHardErrorProcessing;
551 if (ProcessInformationLength !=
sizeof(
ULONG))
631 Length = ProcessInformationLength;
716 if (
Length <= ProcessInformationLength)
753 if (ProcessInformationLength !=
sizeof(
ULONG))
775 *(
PULONG)ProcessInformation =
Process->NoDebugInherit ? 0 : 1;
790 if (ProcessInformationLength !=
sizeof(
ULONG))
830 if (ProcessInformationLength !=
sizeof(
ULONG))
850 SystemTime.
u.LowPart ^ SystemTime.
u.HighPart;
912 if (ProcessInformationLength !=
sizeof(
HANDLE))
940 *(
PHANDLE)ProcessInformation = DebugPort;
956 DPRINT1(
"Handle tracing Not implemented: %lx\n", ProcessInformationClass);
962 if (ProcessInformationLength !=
sizeof(
ULONG))
990 if (ProcessInformationLength !=
sizeof(
ULONG))
1029 if (ProcessInformationLength !=
sizeof(
ULONG_PTR))
1078 ULONG ExecuteOptions = 0;
1080 if (ProcessInformationLength !=
sizeof(
ULONG))
1103 *(
PULONG)ProcessInformation = ExecuteOptions;
1116 DPRINT1(
"VDM/16-bit not implemented: %lx\n", ProcessInformationClass);
1121 DPRINT1(
"WS Watch Not implemented: %lx\n", ProcessInformationClass);
1126 DPRINT1(
"Pool limits Not implemented: %lx\n", ProcessInformationClass);
1132 DPRINT1(
"Unsupported info class: %lx\n", ProcessInformationClass);
1164 IN ULONG ProcessInformationLength)
1176 PVOID ExceptionPort;
1180 UCHAR MemoryPriority = 0;
1182 ULONG DefaultHardErrorMode = 0;
1183 ULONG DebugFlags = 0, EnableFixup = 0, Boost = 0;
1184 ULONG NoExecute = 0, VdmPower = 0;
1195 ProcessInformationLength,
1199 DPRINT1(
"NtSetInformationProcess(): Information verification class failed! (Status -> 0x%lx, ProcessInformationClass -> %lx)\n",
Status, ProcessInformationClass);
1226 switch (ProcessInformationClass)
1231 if (ProcessInformationLength !=
sizeof(
ULONG))
1241 VdmPower = *(
PULONG)ProcessInformation;
1256 DPRINT1(
"Need TCB privilege\n");
1275 if (ProcessInformationLength !=
sizeof(
HANDLE))
1285 PortHandle = *(
PHANDLE)ProcessInformation;
1308 (
PVOID)&ExceptionPort,
1356 if (ProcessInformationLength !=
sizeof(
ULONG))
1365 DefaultHardErrorMode = *(
PULONG)ProcessInformation;
1376 Process->DefaultHardErrorProcessing = DefaultHardErrorMode;
1523 DPRINT1(
"Privilege to change priority to realtime lacking\n");
1531 DPRINT1(
"Jobs not yet supported\n");
1579 if (ProcessInformationLength !=
sizeof(
KPRIORITY))
1588 BasePriority = *(
KPRIORITY*)ProcessInformation;
1600 if (BasePriority & 0x80000000)
1603 BasePriority &= ~0x80000000;
1618 if (BasePriority >
Process->Pcb.BasePriority)
1627 DPRINT1(
"Privilege to change priority from %lx to %lx lacking\n", BasePriority,
Process->Pcb.BasePriority);
1643 if (ProcessInformationLength !=
sizeof(
ULONG))
1652 Boost = *(
PULONG)ProcessInformation;
1698 if (ProcessInformationLength !=
sizeof(
ULONG))
1707 Break = *(
PULONG)ProcessInformation;
1741 if (ProcessInformationLength !=
sizeof(
KAFFINITY))
1807 if (ProcessInformationLength !=
sizeof(
ULONG))
1816 DisableBoost = *(
PBOOLEAN)ProcessInformation;
1865 if (ProcessInformationLength !=
sizeof(
ULONG))
1874 DebugFlags = *(
PULONG)ProcessInformation;
1885 if (DebugFlags & ~1)
1908 if (ProcessInformationLength !=
sizeof(
BOOLEAN))
1917 EnableFixup = *(
PULONG)ProcessInformation;
1934 Process->DefaultHardErrorProcessing &= ~SEM_NOALIGNMENTFAULTEXCEPT;
1948 DPRINT1(
"Need TCB to set IOPL\n");
1956#elif defined(_M_AMD64)
1974 if (ProcessInformationLength !=
sizeof(
ULONG))
1989 NoExecute = *(
PULONG)ProcessInformation;
2006 if (ProcessInformationLength !=
sizeof(
HANDLE))
2035 DPRINT1(
"VDM/16-bit Request not implemented: %lx\n", ProcessInformationClass);
2044 ProcessInformationLength,
2049 DPRINT1(
"WS watch not implemented\n");
2054 DPRINT1(
"Handle tracing not implemented\n");
2060 DPRINT1(
"Invalid Server 2003 Info Class: %lx\n", ProcessInformationClass);
2092 PVOID *ExpansionSlots;
2408 IdealProcessor = *(
PULONG_PTR)ThreadInformation;
2438 (
CCHAR)IdealProcessor);
2468 DisableBoost = *(
PULONG_PTR)ThreadInformation;
2548 Teb = ProcThread->
Tcb.
Teb;
2597 Break = *(
PULONG)ThreadInformation;
2695 ULONG ThreadTerminated;
2916 *(
PULONG)ThreadInformation = ((
Thread->ThreadsProcess->
2918 &
Thread->ThreadsProcess->
3043 Length =
sizeof(ThreadTerminated);
3065 *(
PULONG)ThreadInformation = ThreadTerminated ? 1 : 0;
#define STATUS_PRIVILEGE_NOT_HELD
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG ReturnLength
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG _In_ KPROCESSOR_MODE PreviousMode
static HANDLE DirectoryHandle
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended)
@ ProcessBreakOnTermination
@ ProcessBasicInformation
@ ProcessWow64Information
enum _PROCESSINFOCLASS PROCESSINFOCLASS
#define STATUS_NOT_IMPLEMENTED
NTSTATUS NTAPI DbgkOpenProcessDebugPort(IN PEPROCESS Process, IN KPROCESSOR_MODE PreviousMode, OUT HANDLE *DebugHandle)
#define NT_SUCCESS(StatCode)
struct _THREAD_BASIC_INFORMATION THREAD_BASIC_INFORMATION
@ ThreadDescriptorTableEntry
@ ThreadQuerySetWin32StartAddress
@ ThreadBreakOnTermination
@ ThreadImpersonationToken
enum _THREADINFOCLASS THREADINFOCLASS
struct _THREAD_BASIC_INFORMATION * PTHREAD_BASIC_INFORMATION
UNICODE_STRING * PUNICODE_STRING
#define IsListEmpty(ListHead)
#define PsGetCurrentThread()
#define KeRaiseIrql(irql, oldIrql)
#define KeLowerIrql(oldIrql)
#define KeQuerySystemTime(t)
#define ExReleaseRundownProtection
#define ExGetPreviousMode
FORCEINLINE VOID ExAcquirePushLockShared(PEX_PUSH_LOCK PushLock)
FORCEINLINE VOID ExReleasePushLockShared(PEX_PUSH_LOCK PushLock)
#define ExAcquireRundownProtection
#define MAXIMUM_PROCESSORS
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
#define PROCESS_SUSPEND_RESUME
struct _PROCESS_PRIORITY_CLASS PROCESS_PRIORITY_CLASS
#define PROCESS_QUERY_INFORMATION
#define THREAD_SET_THREAD_TOKEN
#define THREAD_BASE_PRIORITY_LOWRT
struct _PROCESS_PRIORITY_CLASS * PPROCESS_PRIORITY_CLASS
#define THREAD_QUERY_INFORMATION
#define PROCESS_PRIORITY_CLASS_ABOVE_NORMAL
#define PSF_NO_DEBUG_INHERIT_BIT
#define CT_HIDE_FROM_DEBUGGER_BIT
#define THREAD_BASE_PRIORITY_MIN
#define PROCESS_SET_SESSIONID
#define THREAD_BASE_PRIORITY_MAX
@ PsProcessPriorityForeground
@ PsProcessPriorityBackground
#define THREAD_BASE_PRIORITY_IDLE
#define PROCESS_SET_INFORMATION
#define PSF_VDM_ALLOWED_BIT
#define TLS_EXPANSION_SLOTS
#define PROCESS_PRIORITY_CLASS_REALTIME
#define CT_BREAK_ON_TERMINATION_BIT
struct _PROCESS_FOREGROUND_BACKGROUND * PPROCESS_FOREGROUND_BACKGROUND
#define MEMORY_PRIORITY_BACKGROUND
#define PSF_BREAK_ON_TERMINATION_BIT
#define MEMORY_PRIORITY_FOREGROUND
struct _PROCESS_BASIC_INFORMATION * PPROCESS_BASIC_INFORMATION
struct _PROCESS_BASIC_INFORMATION PROCESS_BASIC_INFORMATION
struct _KERNEL_USER_TIMES KERNEL_USER_TIMES
struct _KERNEL_USER_TIMES * PKERNEL_USER_TIMES
@ ProcessLUIDDeviceMapsEnabled
@ ProcessSessionInformation
@ ProcessImageInformation
@ ProcessPooledUsageAndLimits
@ ProcessDefaultHardErrorMode
@ ProcessEnableAlignmentFaultFixup
@ ProcessForegroundInformation
@ ProcessDebugObjectHandle
struct _VM_COUNTERS_ * PVM_COUNTERS
#define EXCEPTION_EXECUTE_HANDLER
#define QUOTA_LIMITS_HARDWS_MIN_DISABLE
#define PROCESS_LUID_DOSDEVICES_ONLY
struct _PROCESS_ACCESS_TOKEN * PPROCESS_ACCESS_TOKEN
struct _IO_COUNTERS IO_COUNTERS
struct _PROCESS_SESSION_INFORMATION PROCESS_SESSION_INFORMATION
struct _PROCESS_SESSION_INFORMATION * PPROCESS_SESSION_INFORMATION
#define QUOTA_LIMITS_HARDWS_MAX_DISABLE
struct _QUOTA_LIMITS_EX QUOTA_LIMITS_EX
#define QUOTA_LIMITS_HARDWS_MAX_ENABLE
#define QUOTA_LIMITS_HARDWS_MIN_ENABLE
#define LOW_REALTIME_PRIORITY
struct _VM_COUNTERS_EX VM_COUNTERS_EX
struct _IO_COUNTERS * PIO_COUNTERS
#define InterlockedCompareExchangePointer
#define InterlockedCompareExchange
static LIST_ENTRY ThreadListHead
#define RTL_FIELD_SIZE(type, field)
#define KeLeaveCriticalRegion()
#define KeEnterCriticalRegion()
POBJECT_TYPE LpcPortObjectType
#define ExFreePoolWithTag(_P, _T)
static const char * ImageName
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
_In_ HANDLE ProcessHandle
struct _SECTION_IMAGE_INFORMATION SECTION_IMAGE_INFORMATION
_In_ ACCESS_MASK _In_ ULONG _Out_ PHANDLE TokenHandle
_In_ THREADINFOCLASS _In_ ULONG ThreadInformationLength
_In_ THREADINFOCLASS ThreadInformationClass
#define SEM_NOALIGNMENTFAULTEXCEPT
#define NtCurrentProcess()
struct _OBJECT_NAME_INFORMATION OBJECT_NAME_INFORMATION
#define THREAD_SET_INFORMATION
_In_ ULONG _In_ ULONG _In_ ULONG Length
LONG NTAPI KeQueryBasePriorityThread(IN PKTHREAD Thread)
ULONG NTAPI KeQueryRuntimeProcess(IN PKPROCESS Process, OUT PULONG UserTime)
KAFFINITY NTAPI KeSetAffinityProcess(IN PKPROCESS Process, IN KAFFINITY Affinity)
KAFFINITY KeActiveProcessors
VOID NTAPI Ke386SetIOPL(VOID)
VOID NTAPI KeQueryValuesProcess(IN PKPROCESS Process, PPROCESS_VALUES Values)
BOOLEAN NTAPI KeSetDisableBoostProcess(IN PKPROCESS Process, IN BOOLEAN Disable)
BOOLEAN NTAPI KeSetDisableBoostThread(IN OUT PKTHREAD Thread, IN BOOLEAN Disable)
BOOLEAN NTAPI KeReadStateThread(IN PKTHREAD Thread)
BOOLEAN NTAPI KeSetAutoAlignmentProcess(IN PKPROCESS Process, IN BOOLEAN Enable)
VOID NTAPI KeBoostPriorityThread(IN PKTHREAD Thread, IN KPRIORITY Increment)
KPRIORITY NTAPI KeSetPriorityAndQuantumProcess(IN PKPROCESS Process, IN KPRIORITY Priority, IN UCHAR Quantum OPTIONAL)
PFILE_OBJECT NTAPI MmGetFileObjectForSection(IN PVOID Section)
VOID NTAPI MmGetImageInformation(OUT PSECTION_IMAGE_INFORMATION ImageInformation)
NTSTATUS NTAPI MmSetExecuteOptions(IN ULONG ExecuteOptions)
NTSTATUS NTAPI MmSetMemoryPriorityProcess(IN PEPROCESS Process, IN UCHAR MemoryPriority)
NTSTATUS NTAPI MmGetExecuteOptions(IN PULONG ExecuteOptions)
static __inline NTSTATUS DefaultQueryInfoBufferCheck(_In_ ULONG Class, _In_ const INFORMATION_CLASS_INFO *ClassList, _In_ ULONG ClassListEntries, _In_ ULONG Flags, _In_opt_ PVOID Buffer, _In_ ULONG BufferLength, _In_opt_ PULONG ReturnLength, _In_opt_ PULONG_PTR ReturnLengthPtr, _In_ KPROCESSOR_MODE PreviousMode)
Probe helper that validates the provided parameters whenever a NtQuery*** system call is invoked from...
static __inline NTSTATUS DefaultSetInfoBufferCheck(_In_ ULONG Class, _In_ const INFORMATION_CLASS_INFO *ClassList, _In_ ULONG ClassListEntries, _In_ PVOID Buffer, _In_ ULONG BufferLength, _In_ KPROCESSOR_MODE PreviousMode)
Probe helper that validates the provided parameters whenever a NtSet*** system call is invoked from u...
const LUID SeDebugPrivilege
BOOLEAN NTAPI SeCheckPrivilegedObject(_In_ LUID PrivilegeValue, _In_ HANDLE ObjectHandle, _In_ ACCESS_MASK DesiredAccess, _In_ KPROCESSOR_MODE PreviousMode)
Checks a privileged object if such object has the specific privilege submitted by the caller.
const LUID SeTcbPrivilege
const LUID SeIncreaseBasePriorityPrivilege
POBJECT_TYPE PsProcessType
ULONG NTAPI PsGetProcessSessionId(IN PEPROCESS Process)
VOID NTAPI PsSetProcessPriorityByClass(IN PEPROCESS Process, IN PSPROCESSPRIORITYMODE Type)
NTSTATUS NTAPI NtQueryInformationThread(IN HANDLE ThreadHandle, IN THREADINFOCLASS ThreadInformationClass, OUT PVOID ThreadInformation, IN ULONG ThreadInformationLength, OUT PULONG ReturnLength OPTIONAL)
NTSTATUS NTAPI PsReferenceProcessFilePointer(IN PEPROCESS Process, OUT PFILE_OBJECT *FileObject)
NTSTATUS NTAPI NtSetInformationProcess(IN HANDLE ProcessHandle, IN PROCESSINFOCLASS ProcessInformationClass, IN PVOID ProcessInformation, IN ULONG ProcessInformationLength)
NTSTATUS NTAPI NtSetInformationThread(IN HANDLE ThreadHandle, IN THREADINFOCLASS ThreadInformationClass, IN PVOID ThreadInformation, IN ULONG ThreadInformationLength)
NTSTATUS NTAPI NtQueryInformationProcess(_In_ HANDLE ProcessHandle, _In_ PROCESSINFOCLASS ProcessInformationClass, _Out_ PVOID ProcessInformation, _In_ ULONG ProcessInformationLength, _Out_opt_ PULONG ReturnLength)
NTSTATUS NTAPI PsAssignImpersonationToken(IN PETHREAD Thread, IN HANDLE TokenHandle)
POBJECT_TYPE PsThreadType
BOOLEAN NTAPI PsIsThreadTerminating(IN PETHREAD Thread)
NTSTATUS NTAPI SeLocateProcessImageName(_In_ PEPROCESS Process, _Out_ PUNICODE_STRING *ProcessImageName)
Finds the process image name of a specific process.
BOOLEAN NTAPI SeSinglePrivilegeCheck(_In_ LUID PrivilegeValue, _In_ KPROCESSOR_MODE PreviousMode)
Checks if a single privilege is present in the context of the calling thread.
#define STATUS_PROCESS_IS_TERMINATING
#define STATUS_INVALID_INFO_CLASS
#define STATUS_PORT_ALREADY_SET
ULONG NTAPI ObGetProcessHandleCount(IN PEPROCESS Process)
NTSTATUS NTAPI ObSetDeviceMap(IN PEPROCESS Process, IN HANDLE DirectoryHandle)
ULONG NTAPI ObIsLUIDDeviceMapsEnabled(VOID)
NTSTATUS NTAPI ObQueryDeviceMapInformation(_In_opt_ PEPROCESS Process, _Out_ PPROCESS_DEVICEMAP_INFORMATION DeviceMapInfo, _In_ ULONG Flags)
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
VOID NTAPI KeDetachProcess(VOID)
VOID NTAPI KeAttachProcess(IN PKPROCESS Process)
NTSTATUS NTAPI PspSetPrimaryToken(IN PEPROCESS Process, IN HANDLE TokenHandle OPTIONAL, IN PACCESS_TOKEN Token OPTIONAL)
NTSTATUS NTAPI PspSetQuotaLimits(_In_ PEPROCESS Process, _In_ ULONG Unused, _In_ PVOID QuotaLimits, _In_ ULONG QuotaLimitsLength, _In_ KPROCESSOR_MODE PreviousMode)
This function adjusts the working set limits of a process and sets up new quota limits when necessary...
PETHREAD NTAPI PsGetNextProcessThread(IN PEPROCESS Process, IN PETHREAD Thread OPTIONAL)
EPROCESS_QUOTA_BLOCK PspDefaultQuotaBlock
static const INFORMATION_CLASS_INFO PsThreadInfoClass[]
static const INFORMATION_CLASS_INFO PsProcessInfoClass[]
#define PspSetCrossThreadFlag(Thread, Flag)
#define PspClearCrossThreadFlag(Thread, Flag)
#define PspClearProcessFlag(Process, Flag)
#define PspSetProcessFlag(Process, Flag)
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
NTSTATUS NTAPI PspQueryDescriptorThread(IN PETHREAD Thread, IN PVOID ThreadInformation, IN ULONG ThreadInformationLength, OUT PULONG ReturnLength OPTIONAL)
#define _WIN32_WINNT_WS03
STDMETHOD() Next(THIS_ ULONG celt, IAssociationElement *pElement, ULONG *pceltFetched) PURE
PULONG MinorVersion OPTIONAL
#define TLS_MINIMUM_AVAILABLE
EX_RUNDOWN_REF RundownProtect
struct _LIST_ENTRY * Flink
SIZE_T MaximumWorkingSetSize
RATE_QUOTA_LIMIT CpuRateLimit
SIZE_T MinimumWorkingSetSize
PVOID * TlsExpansionSlots
SIZE_T QuotaPeakPagedPoolUsage
SIZE_T PeakWorkingSetSize
SIZE_T QuotaPeakNonPagedPoolUsage
SIZE_T QuotaNonPagedPoolUsage
SIZE_T QuotaPagedPoolUsage
UCHAR NTAPI KeSetIdealProcessorThread(IN PKTHREAD Thread, IN UCHAR Processor)
LONG NTAPI KeSetBasePriorityThread(IN PKTHREAD Thread, IN LONG Increment)
KPRIORITY NTAPI KeSetPriorityThread(IN PKTHREAD Thread, IN KPRIORITY Priority)
KAFFINITY NTAPI KeSetAffinityThread(IN PKTHREAD Thread, IN KAFFINITY Affinity)
union _LARGE_INTEGER LARGE_INTEGER
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
union _LARGE_INTEGER * PLARGE_INTEGER
#define CONTAINING_RECORD(address, type, field)
#define STATUS_ACCESS_DENIED
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_INFO_LENGTH_MISMATCH
struct _LARGE_INTEGER::@2473 u
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY _In_ WDF_INTERRUPT_PRIORITY Priority
BOOLEAN HasPrivilege(IN PPRIVILEGE_SET Privilege)
_Must_inspect_result_ _In_ ULONG Flags
_In_opt_ PVOID _Out_ PLARGE_INTEGER Cookie
_In_ ULONG _In_ ULONG _In_ ULONG _Out_ PKIRQL _Out_ PKAFFINITY Affinity
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define ObDereferenceObject
#define ObReferenceObject
#define PsGetCurrentProcess