218{
223
225
226
231 ProcessInformation,
232 ProcessInformationLength,
237 {
238#if DBG
239 DPRINT1(
"NtQueryInformationProcess(ProcessInformationClass: %s): Class validation failed! (Status: 0x%lx)\n",
240 PspDumpProcessInfoClassName(ProcessInformationClass),
Status);
241#endif
243 }
244
248 {
249
250
251
252
253
255 }
256
257
258 switch (ProcessInformationClass)
259 {
260
262 {
264
266 {
268 break;
269 }
270
271
273
274
282
283
285 {
286
291 UniqueProcessId;
295
296 }
298 {
299
301 }
303
304
306 break;
307 }
308
309
311 {
314
317 {
319 break;
320 }
321
322
323 Length = ProcessInformationLength;
325
326
334
335
337
339
340
345
346
348
349
351 {
352
356 }
357 else
358 {
359
366 }
367
368
369 if (Extended)
370 {
371 QuotaLimits.
Flags |= (
Process->Vm.Flags.MaximumWorkingSetHard ?
373 QuotaLimits.
Flags |= (
Process->Vm.Flags.MinimumWorkingSetHard ?
375
376
377
379 }
380
381
383 {
385 }
387 {
388
390 }
392
393
395 break;
396 }
397
399 {
402
403 if (ProcessInformationLength !=
sizeof(
IO_COUNTERS))
404 {
406 break;
407 }
408
410
411
419
420
422
424 {
426 }
428 {
429
430 }
432
433
435
436
438 break;
439 }
440
441
443 {
446
447
449 {
451 break;
452 }
453
455
456
464
465
467 {
468
474 }
476 {
477
479 }
481
482
484 break;
485 }
486
487
489
490 if (ProcessInformationLength !=
sizeof(
HANDLE))
491 {
493 break;
494 }
495
496
498
499
507
508
510 {
511
514 }
516 {
517
519 }
521
522
524 break;
525
527 {
529
530 if (ProcessInformationLength !=
sizeof(
ULONG))
531 {
533 break;
534 }
535
536
538
539
547
548
550
551
553 {
554
556 }
558 {
559
561 }
563
564
566 break;
567 }
568
569
571 {
573
575 {
577 break;
578 }
579
580
582
583
591
592
594 {
595
597 }
599 {
600
602 }
604
605
607 break;
608 }
609
610
612 {
614
615
616 if ((ProcessInformationLength !=
sizeof(
VM_COUNTERS)) &&
618 {
620 break;
621 }
622
623
631
632
634 {
635
647
648
649
650
651 Length = ProcessInformationLength;
652 }
654 {
655
657 }
659
660
662 break;
663 }
664
665
667
668 if (ProcessInformationLength !=
sizeof(
ULONG))
669 {
671 break;
672 }
673
674
676
677
685
686
688 {
689
691 DefaultHardErrorProcessing;
692 }
694 {
695
697 }
699
700
702 break;
703
704
706
707 if (ProcessInformationLength !=
sizeof(
ULONG))
708 {
710 break;
711 }
712
713
715
716
724
725
727 {
728
731 }
733 {
734
736 }
738
739
741 break;
742
743
745 {
747
749 {
750
752 {
754
756 }
758 {
759
762 }
764
765
768 {
770 break;
771 }
772 }
773 else
774 {
775
777 {
779 break;
780 }
781
782
784 }
785
786
787 Length = ProcessInformationLength;
788
789
797
798
800 ProcessInformation,
802
803
805 break;
806 }
807
808
810 {
812
814 {
816 break;
817 }
818
819
821
822
830
831
833 {
834
837 }
839 {
840
842 }
844
845
847 break;
848 }
849
851 {
853
854
862
863
866 {
867
870
871
872 if (
Length <= ProcessInformationLength)
873 {
874
876 {
877
881
882
885 }
887 {
888
890 }
892 }
893 else
894 {
895
897 }
898
899
901 }
902
904 break;
905 }
906
907#if (NTDDI_VERSION >= NTDDI_VISTA) || (DLL_EXPORT_VERSION >= _WIN32_WINNT_VISTA)
909 {
912
913
915
922 {
923 break;
924 }
925
926
930 {
931 break;
932 }
936 {
937 break;
938 }
939
940
942 if (
Length <= ProcessInformationLength)
943 {
945 {
950 {
955 }
956 else
957 {
960 }
961 }
963 {
965 }
967 }
968 else
969 {
971 }
973
974 break;
975 }
976#endif
977
979
980 if (ProcessInformationLength !=
sizeof(
ULONG))
981 {
983 break;
984 }
985
986
988
989
997
998
1000 {
1001
1002 *(
PULONG)ProcessInformation =
Process->NoDebugInherit ? 0 : 1;
1003 }
1005 {
1006
1008 }
1010
1011
1013 break;
1014
1016
1017 if (ProcessInformationLength !=
sizeof(
ULONG))
1018 {
1020 break;
1021 }
1022
1023
1025
1026
1034
1035
1037 {
1038
1040 }
1042 {
1043
1045 }
1047
1048
1050 break;
1051
1052
1054 {
1056
1057 if (ProcessInformationLength !=
sizeof(
ULONG))
1058 {
1059
1061 break;
1062 }
1063
1064
1068 {
1072
1073
1077 SystemTime.
u.LowPart ^ SystemTime.
u.HighPart;
1078
1079
1081 NewCookie,
1084
1085
1087 }
1088
1089
1091
1092
1094 {
1095
1097 }
1099 {
1100
1102 }
1104 break;
1105 }
1106
1108
1110 {
1111
1113 break;
1114 }
1115
1116
1118
1119
1121
1122
1124 {
1126 }
1128 {
1129
1131 }
1133 break;
1134
1136 {
1138
1139 if (ProcessInformationLength !=
sizeof(
HANDLE))
1140 {
1142 break;
1143 }
1144
1145
1147
1148
1156
1157
1159
1160
1162
1163
1165 {
1166
1167 *(
PHANDLE)ProcessInformation = DebugPort;
1168 }
1170 {
1171 if (DebugPort)
1173
1174
1175
1177 }
1179 break;
1180 }
1181
1183 DPRINT1(
"Handle tracing not implemented: %lu\n", ProcessInformationClass);
1185 break;
1186
1188
1189 if (ProcessInformationLength !=
sizeof(
ULONG))
1190 {
1192 break;
1193 }
1194
1195
1197
1198
1200
1201
1203 {
1204
1206 }
1208 {
1209
1211 }
1213 break;
1214
1216
1217 if (ProcessInformationLength !=
sizeof(
ULONG))
1218 {
1220 break;
1221 }
1222
1223
1225
1226
1234
1235
1237 {
1238
1240 }
1242 {
1243
1245 }
1247
1248
1250 break;
1251
1253 {
1255
1256 if (ProcessInformationLength !=
sizeof(
ULONG_PTR))
1257 {
1259 break;
1260 }
1261
1262
1264
1265
1273
1274#ifdef _WIN64
1275
1277 {
1278
1280
1282 }
1283#endif
1284
1285
1287
1288
1290 {
1291
1293 }
1295 {
1296
1298 }
1300 break;
1301 }
1302
1304 {
1305 ULONG ExecuteOptions = 0;
1306
1307 if (ProcessInformationLength !=
sizeof(
ULONG))
1308 {
1310 break;
1311 }
1312
1313
1315
1317 {
1319 break;
1320 }
1321
1322
1325 {
1326
1328 {
1329
1330 *(
PULONG)ProcessInformation = ExecuteOptions;
1331 }
1333 {
1334
1336 }
1338 }
1339 break;
1340 }
1341
1343 DPRINT1(
"VDM/16-bit not implemented: %lu\n", ProcessInformationClass);
1345 break;
1346
1348 DPRINT1(
"WS Watch not implemented: %lu\n", ProcessInformationClass);
1350 break;
1351
1353 DPRINT1(
"Pool limits not implemented: %lu\n", ProcessInformationClass);
1355 break;
1356
1357
1358 default:
1359#if DBG
1360 DPRINT1(
"Unsupported info class: %s\n", PspDumpProcessInfoClassName(ProcessInformationClass));
1361#endif
1363 }
1364
1365
1367 {
1368
1370 {
1372 }
1374 {
1375
1376
1378 }
1380 }
1381
1383}
_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
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended)
@ ProcessBreakOnTermination
@ ProcessBasicInformation
@ ProcessWow64Information
#define STATUS_NOT_IMPLEMENTED
NTSTATUS NTAPI DbgkOpenProcessDebugPort(IN PEPROCESS Process, IN KPROCESSOR_MODE PreviousMode, OUT HANDLE *DebugHandle)
#define NT_SUCCESS(StatCode)
UNICODE_STRING * PUNICODE_STRING
#define KeQuerySystemTime(t)
struct _UNICODE_STRING UNICODE_STRING
#define ExReleaseRundownProtection
#define ExGetPreviousMode
#define ExAcquireRundownProtection
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
struct _PROCESS_PRIORITY_CLASS PROCESS_PRIORITY_CLASS
#define PROCESS_QUERY_INFORMATION
struct _PROCESS_PRIORITY_CLASS * PPROCESS_PRIORITY_CLASS
#define EXCEPTION_EXECUTE_HANDLER
#define QUOTA_LIMITS_HARDWS_MIN_DISABLE
#define PROCESS_LUID_DOSDEVICES_ONLY
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
struct _IO_COUNTERS * PIO_COUNTERS
#define InterlockedCompareExchange
#define RTL_FIELD_SIZE(type, field)
#define ExFreePoolWithTag(_P, _T)
static const char * ImageName
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
_In_ HANDLE ProcessHandle
struct _SECTION_IMAGE_INFORMATION SECTION_IMAGE_INFORMATION
#define NtCurrentProcess()
struct _OBJECT_NAME_INFORMATION OBJECT_NAME_INFORMATION
_In_ ULONG _In_ ULONG _In_ ULONG Length
ULONG NTAPI KeQueryRuntimeProcess(IN PKPROCESS Process, OUT PULONG UserTime)
VOID NTAPI KeQueryValuesProcess(IN PKPROCESS Process, PPROCESS_VALUES Values)
VOID NTAPI MmGetImageInformation(OUT PSECTION_IMAGE_INFORMATION ImageInformation)
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...
NTSTATUS NTAPI IoQueryFileDosDeviceName(IN PFILE_OBJECT FileObject, OUT POBJECT_NAME_INFORMATION *ObjectNameInformation)
POBJECT_TYPE PsProcessType
ULONG NTAPI PsGetProcessSessionId(IN PEPROCESS Process)
NTSTATUS NTAPI PsReferenceProcessFilePointer(_In_ PEPROCESS Process, _Outptr_ PFILE_OBJECT *FileObject)
NTSTATUS NTAPI SeLocateProcessImageName(_In_ PEPROCESS Process, _Out_ PUNICODE_STRING *ProcessImageName)
Finds the process image name of a specific process.
#define STATUS_INVALID_INFO_CLASS
ULONG NTAPI ObGetProcessHandleCount(IN PEPROCESS Process)
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)
EPROCESS_QUOTA_BLOCK PspDefaultQuotaBlock
static const INFORMATION_CLASS_INFO PsProcessInfoClass[]
struct _PROCESS_BASIC_INFORMATION * PPROCESS_BASIC_INFORMATION
struct _PROCESS_BASIC_INFORMATION PROCESS_BASIC_INFORMATION
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
SIZE_T MaximumWorkingSetSize
RATE_QUOTA_LIMIT CpuRateLimit
SIZE_T MinimumWorkingSetSize
SIZE_T PeakWorkingSetSize
SIZE_T QuotaPagedPoolUsage
SIZE_T QuotaPeakPagedPoolUsage
SIZE_T QuotaPeakNonPagedPoolUsage
SIZE_T QuotaNonPagedPoolUsage
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_INVALID_PARAMETER
#define STATUS_INFO_LENGTH_MISMATCH
struct _LARGE_INTEGER::@2480 u
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
struct _KERNEL_USER_TIMES KERNEL_USER_TIMES
struct _KERNEL_USER_TIMES * PKERNEL_USER_TIMES
@ ProcessLUIDDeviceMapsEnabled
@ ProcessSessionInformation
@ ProcessImageInformation
@ ProcessPooledUsageAndLimits
@ ProcessImageFileNameWin32
@ ProcessDefaultHardErrorMode
@ ProcessDebugObjectHandle
struct _VM_COUNTERS * PVM_COUNTERS
struct _VM_COUNTERS_EX VM_COUNTERS_EX
_Must_inspect_result_ _In_ ULONG Flags
_In_opt_ PVOID _Out_ PLARGE_INTEGER Cookie
#define ObDereferenceObject
#define PsGetCurrentProcess