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;
952 DPRINT1(
"Handle tracing Not implemented: %lx\n", ProcessInformationClass);
958 if (ProcessInformationLength !=
sizeof(
ULONG))
986 if (ProcessInformationLength !=
sizeof(
ULONG))
1025 if (ProcessInformationLength !=
sizeof(
ULONG_PTR))
1076 ULONG ExecuteOptions = 0;
1078 if (ProcessInformationLength !=
sizeof(
ULONG))
1100 *(
PULONG)ProcessInformation = ExecuteOptions;
1113 DPRINT1(
"VDM/16-bit not implemented: %lx\n", ProcessInformationClass);
1118 DPRINT1(
"WS Watch Not implemented: %lx\n", ProcessInformationClass);
1123 DPRINT1(
"Pool limits Not implemented: %lx\n", ProcessInformationClass);
1129 DPRINT1(
"Unsupported info class: %lx\n", ProcessInformationClass);
1157 IN ULONG ProcessInformationLength)
1169 PVOID ExceptionPort;
1173 UCHAR MemoryPriority = 0;
1175 ULONG DefaultHardErrorMode = 0;
1176 ULONG DebugFlags = 0, EnableFixup = 0, Boost = 0;
1177 ULONG NoExecute = 0, VdmPower = 0;
1188 ProcessInformationLength,
1192 DPRINT1(
"NtSetInformationProcess(): Information verification class failed! (Status -> 0x%lx, ProcessInformationClass -> %lx)\n",
Status, ProcessInformationClass);
1219 switch (ProcessInformationClass)
1224 if (ProcessInformationLength !=
sizeof(
ULONG))
1234 VdmPower = *(
PULONG)ProcessInformation;
1249 DPRINT1(
"Need TCB privilege\n");
1268 if (ProcessInformationLength !=
sizeof(
HANDLE))
1278 PortHandle = *(
PHANDLE)ProcessInformation;
1301 (
PVOID)&ExceptionPort,
1349 if (ProcessInformationLength !=
sizeof(
ULONG))
1358 DefaultHardErrorMode = *(
PULONG)ProcessInformation;
1369 Process->DefaultHardErrorProcessing = DefaultHardErrorMode;
1516 DPRINT1(
"Privilege to change priority to realtime lacking\n");
1524 DPRINT1(
"Jobs not yet supported\n");
1572 if (ProcessInformationLength !=
sizeof(
KPRIORITY))
1581 BasePriority = *(
KPRIORITY*)ProcessInformation;
1593 if (BasePriority & 0x80000000)
1596 BasePriority &= ~0x80000000;
1611 if (BasePriority >
Process->Pcb.BasePriority)
1620 DPRINT1(
"Privilege to change priority from %lx to %lx lacking\n", BasePriority,
Process->Pcb.BasePriority);
1636 if (ProcessInformationLength !=
sizeof(
ULONG))
1645 Boost = *(
PULONG)ProcessInformation;
1664 for (Next =
Process->ThreadListHead.Flink;
1665 Next != &
Process->ThreadListHead;
1691 if (ProcessInformationLength !=
sizeof(
ULONG))
1700 Break = *(
PULONG)ProcessInformation;
1734 if (ProcessInformationLength !=
sizeof(
KAFFINITY))
1800 if (ProcessInformationLength !=
sizeof(
ULONG))
1809 DisableBoost = *(
PBOOLEAN)ProcessInformation;
1831 for (Next =
Process->ThreadListHead.Flink;
1832 Next != &
Process->ThreadListHead;
1858 if (ProcessInformationLength !=
sizeof(
ULONG))
1867 DebugFlags = *(
PULONG)ProcessInformation;
1878 if (DebugFlags & ~1)
1901 if (ProcessInformationLength !=
sizeof(
BOOLEAN))
1910 EnableFixup = *(
PULONG)ProcessInformation;
1927 Process->DefaultHardErrorProcessing &= ~SEM_NOALIGNMENTFAULTEXCEPT;
1941 DPRINT1(
"Need TCB to set IOPL\n");
1949#elif defined(_M_AMD64)
1967 if (ProcessInformationLength !=
sizeof(
ULONG))
1982 NoExecute = *(
PULONG)ProcessInformation;
1999 if (ProcessInformationLength !=
sizeof(
HANDLE))
2028 DPRINT1(
"VDM/16-bit Request not implemented: %lx\n", ProcessInformationClass);
2037 ProcessInformationLength,
2042 DPRINT1(
"WS watch not implemented\n");
2047 DPRINT1(
"Handle tracing not implemented\n");
2053 DPRINT1(
"Invalid Server 2003 Info Class: %lx\n", ProcessInformationClass);
2085 PVOID *ExpansionSlots;
2401 IdealProcessor = *(
PULONG_PTR)ThreadInformation;
2431 (
CCHAR)IdealProcessor);
2461 DisableBoost = *(
PULONG_PTR)ThreadInformation;
2541 Teb = ProcThread->
Tcb.
Teb;
2590 Break = *(
PULONG)ThreadInformation;
2688 ULONG ThreadTerminated;
2909 *(
PULONG)ThreadInformation = ((
Thread->ThreadsProcess->
2911 &
Thread->ThreadsProcess->
3036 Length =
sizeof(ThreadTerminated);
3058 *(
PULONG)ThreadInformation = ThreadTerminated ? 1 : 0;
#define STATUS_PRIVILEGE_NOT_HELD
static HANDLE DirectoryHandle
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended)
#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
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
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
@ ProcessBreakOnTermination
@ ProcessBasicInformation
@ ProcessWow64Information
struct _PROCESS_BASIC_INFORMATION * PPROCESS_BASIC_INFORMATION
enum _PROCESSINFOCLASS PROCESSINFOCLASS
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 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
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::@2306 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
_In_ KPROCESSOR_MODE PreviousMode