diff --git a/ntoskrnl/ps/query.c b/ntoskrnl/ps/query.c index ff5267dd649..4d788ddbd6f 100644 --- a/ntoskrnl/ps/query.c +++ b/ntoskrnl/ps/query.c @@ -49,6 +49,157 @@ PsReferenceProcessFilePointer(IN PEPROCESS Process, return Section ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; } +#if DBG +static +PCSTR +PspDumpProcessInfoClassName( + _In_ PROCESSINFOCLASS ProcessInformationClass) +{ + static CHAR UnknownClassName[11]; + +#define DBG_PROCESS_INFO_CLASS(InfoClass) [InfoClass] = #InfoClass + static const PCSTR ProcessInfoClasses[] = + { + DBG_PROCESS_INFO_CLASS(ProcessBasicInformation), + DBG_PROCESS_INFO_CLASS(ProcessQuotaLimits), + DBG_PROCESS_INFO_CLASS(ProcessVmCounters), + DBG_PROCESS_INFO_CLASS(ProcessTimes), + DBG_PROCESS_INFO_CLASS(ProcessBasePriority), + DBG_PROCESS_INFO_CLASS(ProcessRaisePriority), + DBG_PROCESS_INFO_CLASS(ProcessDebugPort), + DBG_PROCESS_INFO_CLASS(ProcessExceptionPort), + DBG_PROCESS_INFO_CLASS(ProcessAccessToken), + DBG_PROCESS_INFO_CLASS(ProcessLdtInformation), + DBG_PROCESS_INFO_CLASS(ProcessLdtSize), + DBG_PROCESS_INFO_CLASS(ProcessDefaultHardErrorMode), + DBG_PROCESS_INFO_CLASS(ProcessIoPortHandlers), + DBG_PROCESS_INFO_CLASS(ProcessPooledUsageAndLimits), + DBG_PROCESS_INFO_CLASS(ProcessWorkingSetWatch), + DBG_PROCESS_INFO_CLASS(ProcessUserModeIOPL), + DBG_PROCESS_INFO_CLASS(ProcessEnableAlignmentFaultFixup), + DBG_PROCESS_INFO_CLASS(ProcessPriorityClass), + DBG_PROCESS_INFO_CLASS(ProcessWx86Information), + DBG_PROCESS_INFO_CLASS(ProcessHandleCount), + DBG_PROCESS_INFO_CLASS(ProcessAffinityMask), + DBG_PROCESS_INFO_CLASS(ProcessPriorityBoost), + DBG_PROCESS_INFO_CLASS(ProcessDeviceMap), + DBG_PROCESS_INFO_CLASS(ProcessSessionInformation), + DBG_PROCESS_INFO_CLASS(ProcessForegroundInformation), + DBG_PROCESS_INFO_CLASS(ProcessWow64Information), + DBG_PROCESS_INFO_CLASS(ProcessImageFileName), + DBG_PROCESS_INFO_CLASS(ProcessLUIDDeviceMapsEnabled), + DBG_PROCESS_INFO_CLASS(ProcessBreakOnTermination), + DBG_PROCESS_INFO_CLASS(ProcessDebugObjectHandle), + DBG_PROCESS_INFO_CLASS(ProcessDebugFlags), + DBG_PROCESS_INFO_CLASS(ProcessHandleTracing), + DBG_PROCESS_INFO_CLASS(ProcessIoPriority), + DBG_PROCESS_INFO_CLASS(ProcessExecuteFlags), + DBG_PROCESS_INFO_CLASS(ProcessTlsInformation), + DBG_PROCESS_INFO_CLASS(ProcessCookie), + DBG_PROCESS_INFO_CLASS(ProcessImageInformation), + DBG_PROCESS_INFO_CLASS(ProcessCycleTime), + DBG_PROCESS_INFO_CLASS(ProcessPagePriority), + DBG_PROCESS_INFO_CLASS(ProcessInstrumentationCallback), + DBG_PROCESS_INFO_CLASS(ProcessThreadStackAllocation), + DBG_PROCESS_INFO_CLASS(ProcessWorkingSetWatchEx), + DBG_PROCESS_INFO_CLASS(ProcessImageFileNameWin32), + DBG_PROCESS_INFO_CLASS(ProcessImageFileMapping), + DBG_PROCESS_INFO_CLASS(ProcessAffinityUpdateMode), + DBG_PROCESS_INFO_CLASS(ProcessMemoryAllocationMode), + DBG_PROCESS_INFO_CLASS(ProcessGroupInformation), + DBG_PROCESS_INFO_CLASS(ProcessConsoleHostProcess), + DBG_PROCESS_INFO_CLASS(ProcessWindowInformation), + }; +#undef DBG_PROCESS_INFO_CLASS + + if (ProcessInformationClass < RTL_NUMBER_OF(ProcessInfoClasses)) + { + return ProcessInfoClasses[ProcessInformationClass]; + } + + sprintf(UnknownClassName, "%lu", ProcessInformationClass); + return UnknownClassName; +} + +static +PCSTR +PspDumpThreadInfoClassName( + _In_ THREADINFOCLASS ThreadInformationClass) +{ + static CHAR UnknownClassName[11]; + +#define DBG_THREAD_INFO_CLASS(InfoClass) [InfoClass] = #InfoClass + static const PCSTR ThreadInfoClasses[] = + { + DBG_THREAD_INFO_CLASS(ThreadBasicInformation), + DBG_THREAD_INFO_CLASS(ThreadTimes), + DBG_THREAD_INFO_CLASS(ThreadPriority), + DBG_THREAD_INFO_CLASS(ThreadBasePriority), + DBG_THREAD_INFO_CLASS(ThreadAffinityMask), + DBG_THREAD_INFO_CLASS(ThreadImpersonationToken), + DBG_THREAD_INFO_CLASS(ThreadDescriptorTableEntry), + DBG_THREAD_INFO_CLASS(ThreadEnableAlignmentFaultFixup), + DBG_THREAD_INFO_CLASS(ThreadEventPair_Reusable), + DBG_THREAD_INFO_CLASS(ThreadQuerySetWin32StartAddress), + DBG_THREAD_INFO_CLASS(ThreadZeroTlsCell), + DBG_THREAD_INFO_CLASS(ThreadPerformanceCount), + DBG_THREAD_INFO_CLASS(ThreadAmILastThread), + DBG_THREAD_INFO_CLASS(ThreadIdealProcessor), + DBG_THREAD_INFO_CLASS(ThreadPriorityBoost), + DBG_THREAD_INFO_CLASS(ThreadSetTlsArrayAddress), + DBG_THREAD_INFO_CLASS(ThreadIsIoPending), + DBG_THREAD_INFO_CLASS(ThreadHideFromDebugger), + DBG_THREAD_INFO_CLASS(ThreadBreakOnTermination), + DBG_THREAD_INFO_CLASS(ThreadSwitchLegacyState), + DBG_THREAD_INFO_CLASS(ThreadIsTerminated), + DBG_THREAD_INFO_CLASS(ThreadLastSystemCall), + DBG_THREAD_INFO_CLASS(ThreadIoPriority), + DBG_THREAD_INFO_CLASS(ThreadCycleTime), + DBG_THREAD_INFO_CLASS(ThreadPagePriority), + DBG_THREAD_INFO_CLASS(ThreadActualBasePriority), + DBG_THREAD_INFO_CLASS(ThreadTebInformation), + DBG_THREAD_INFO_CLASS(ThreadCSwitchMon), + DBG_THREAD_INFO_CLASS(ThreadCSwitchPmu), + DBG_THREAD_INFO_CLASS(ThreadWow64Context), + DBG_THREAD_INFO_CLASS(ThreadGroupInformation), + DBG_THREAD_INFO_CLASS(ThreadUmsInformation), + DBG_THREAD_INFO_CLASS(ThreadCounterProfiling), + DBG_THREAD_INFO_CLASS(ThreadIdealProcessorEx), + DBG_THREAD_INFO_CLASS(ThreadCpuAccountingInformation), + DBG_THREAD_INFO_CLASS(ThreadSuspendCount), + DBG_THREAD_INFO_CLASS(ThreadHeterogeneousCpuPolicy), + DBG_THREAD_INFO_CLASS(ThreadContainerId), + DBG_THREAD_INFO_CLASS(ThreadNameInformation), + DBG_THREAD_INFO_CLASS(ThreadSelectedCpuSets), + DBG_THREAD_INFO_CLASS(ThreadSystemThreadInformation), + DBG_THREAD_INFO_CLASS(ThreadActualGroupAffinity), + DBG_THREAD_INFO_CLASS(ThreadDynamicCodePolicyInfo), + DBG_THREAD_INFO_CLASS(ThreadExplicitCaseSensitivity), + DBG_THREAD_INFO_CLASS(ThreadWorkOnBehalfTicket), + DBG_THREAD_INFO_CLASS(ThreadSubsystemInformation), + DBG_THREAD_INFO_CLASS(ThreadDbgkWerReportActive), + DBG_THREAD_INFO_CLASS(ThreadAttachContainer), + DBG_THREAD_INFO_CLASS(ThreadManageWritesToExecutableMemory), + DBG_THREAD_INFO_CLASS(ThreadPowerThrottlingState), + DBG_THREAD_INFO_CLASS(ThreadWorkloadClass), + DBG_THREAD_INFO_CLASS(ThreadCreateStateChange), + DBG_THREAD_INFO_CLASS(ThreadApplyStateChange), + DBG_THREAD_INFO_CLASS(ThreadStrongerBadHandleChecks), + DBG_THREAD_INFO_CLASS(ThreadEffectiveIoPriority), + DBG_THREAD_INFO_CLASS(ThreadEffectivePagePriority), + }; +#undef DBG_THREAD_INFO_CLASS + + if (ThreadInformationClass < RTL_NUMBER_OF(ThreadInfoClasses)) + { + return ThreadInfoClasses[ThreadInformationClass]; + } + + sprintf(UnknownClassName, "%lu", ThreadInformationClass); + return UnknownClassName; +} +#endif // #if DBG + /* PUBLIC FUNCTIONS **********************************************************/ /* @@ -82,8 +233,10 @@ NtQueryInformationProcess( PreviousMode); if (!NT_SUCCESS(Status)) { - DPRINT1("NtQueryInformationProcess(ProcessInformationClass: %lu): Class validation failed! (Status: 0x%lx)\n", - ProcessInformationClass, Status); +#if DBG + DPRINT1("NtQueryInformationProcess(ProcessInformationClass: %s): Class validation failed! (Status: 0x%lx)\n", + PspDumpProcessInfoClassName(ProcessInformationClass), Status); +#endif return Status; } @@ -1200,7 +1353,9 @@ NtQueryInformationProcess( /* Not supported by Server 2003 */ default: - DPRINT1("Unsupported info class: %lu\n", ProcessInformationClass); +#if DBG + DPRINT1("Unsupported info class: %s\n", PspDumpProcessInfoClassName(ProcessInformationClass)); +#endif Status = STATUS_INVALID_INFO_CLASS; } @@ -1267,8 +1422,10 @@ NtSetInformationProcess(IN HANDLE ProcessHandle, PreviousMode); if (!NT_SUCCESS(Status)) { - DPRINT1("NtSetInformationProcess(ProcessInformationClass: %lu): Class validation failed! (Status: 0x%lx)\n", - ProcessInformationClass, Status); +#if DBG + DPRINT1("NtSetInformationProcess(ProcessInformationClass: %s): Class validation failed! (Status: 0x%lx)\n", + PspDumpProcessInfoClassName(ProcessInformationClass), Status); +#endif return Status; } @@ -2129,7 +2286,9 @@ NtSetInformationProcess(IN HANDLE ProcessHandle, /* Anything else is invalid */ default: - DPRINT1("Invalid Server 2003 Info Class: %lu\n", ProcessInformationClass); +#if DBG + DPRINT1("Invalid Server 2003 Info Class: %s\n", PspDumpProcessInfoClassName(ProcessInformationClass)); +#endif Status = STATUS_INVALID_INFO_CLASS; } @@ -2175,8 +2334,10 @@ NtSetInformationThread(IN HANDLE ThreadHandle, PreviousMode); if (!NT_SUCCESS(Status)) { - DPRINT1("NtSetInformationThread(ThreadInformationClass: %lu): Class validation failed! (Status: 0x%lx)\n", - ThreadInformationClass, Status); +#if DBG + DPRINT1("NtSetInformationThread(ThreadInformationClass: %s): Class validation failed! (Status: 0x%lx)\n", + PspDumpThreadInfoClassName(ThreadInformationClass), Status); +#endif return Status; } @@ -2739,7 +2900,9 @@ NtSetInformationThread(IN HANDLE ThreadHandle, /* Anything else */ default: /* Not yet implemented */ - DPRINT1("Not implemented: %lu\n", ThreadInformationClass); +#if DBG + DPRINT1("Not implemented: %s\n", PspDumpThreadInfoClassName(ThreadInformationClass)); +#endif Status = STATUS_NOT_IMPLEMENTED; } @@ -2781,8 +2944,10 @@ NtQueryInformationThread(IN HANDLE ThreadHandle, PreviousMode); if (!NT_SUCCESS(Status)) { - DPRINT1("NtQueryInformationThread(ThreadInformationClass: %lu): Class validation failed! (Status: 0x%lx)\n", - ThreadInformationClass, Status); +#if DBG + DPRINT1("NtQueryInformationThread(ThreadInformationClass: %s): Class validation failed! (Status: 0x%lx)\n", + PspDumpThreadInfoClassName(ThreadInformationClass), Status); +#endif return Status; } @@ -3187,7 +3352,9 @@ NtQueryInformationThread(IN HANDLE ThreadHandle, /* Anything else */ default: /* Not yet implemented */ - DPRINT1("Not implemented: %lu\n", ThreadInformationClass); +#if DBG + DPRINT1("Not implemented: %s\n", PspDumpThreadInfoClassName(ThreadInformationClass)); +#endif Status = STATUS_NOT_IMPLEMENTED; }