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
555 *(
PULONG)ProcessInformation = HandleCount;
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
921 {
922 break;
923 }
924
925
929 {
930 break;
931 }
935 {
936 break;
937 }
938
939
941 if (
Length <= ProcessInformationLength)
942 {
944 {
949 {
954 }
955 else
956 {
959 }
960 }
962 {
964 }
966 }
967 else
968 {
970 }
972
973 break;
974 }
975#endif
976
978
979 if (ProcessInformationLength !=
sizeof(
ULONG))
980 {
982 break;
983 }
984
985
987
988
996
997
999 {
1000
1001 *(
PULONG)ProcessInformation =
Process->NoDebugInherit ? 0 : 1;
1002 }
1004 {
1005
1007 }
1009
1010
1012 break;
1013
1015
1016 if (ProcessInformationLength !=
sizeof(
ULONG))
1017 {
1019 break;
1020 }
1021
1022
1024
1025
1033
1034
1036 {
1037
1039 }
1041 {
1042
1044 }
1046
1047
1049 break;
1050
1051
1053 {
1055
1056 if (ProcessInformationLength !=
sizeof(
ULONG))
1057 {
1058
1060 break;
1061 }
1062
1063
1067 {
1071
1072
1076 SystemTime.
u.LowPart ^ SystemTime.
u.HighPart;
1077
1078
1080 NewCookie,
1083
1084
1086 }
1087
1088
1090
1091
1093 {
1094
1096 }
1098 {
1099
1101 }
1103 break;
1104 }
1105
1107
1109 {
1110
1112 break;
1113 }
1114
1115
1117
1118
1120
1121
1123 {
1125 }
1127 {
1128
1130 }
1132 break;
1133
1135 {
1137
1138 if (ProcessInformationLength !=
sizeof(
HANDLE))
1139 {
1141 break;
1142 }
1143
1144
1146
1147
1155
1156
1158
1159
1161
1162
1164 {
1165
1166 *(
PHANDLE)ProcessInformation = DebugPort;
1167 }
1169 {
1170 if (DebugPort)
1172
1173
1174
1176 }
1178 break;
1179 }
1180
1182 DPRINT1(
"Handle tracing not implemented: %lu\n", ProcessInformationClass);
1184 break;
1185
1187
1188 if (ProcessInformationLength !=
sizeof(
ULONG))
1189 {
1191 break;
1192 }
1193
1194
1196
1197
1199
1200
1202 {
1203
1205 }
1207 {
1208
1210 }
1212 break;
1213
1215
1216 if (ProcessInformationLength !=
sizeof(
ULONG))
1217 {
1219 break;
1220 }
1221
1222
1224
1225
1233
1234
1236 {
1237
1239 }
1241 {
1242
1244 }
1246
1247
1249 break;
1250
1252 {
1254
1255 if (ProcessInformationLength !=
sizeof(
ULONG_PTR))
1256 {
1258 break;
1259 }
1260
1261
1263
1264
1272
1273#ifdef _WIN64
1274
1276 {
1277
1279
1281 }
1282#endif
1283
1284
1286
1287
1289 {
1290
1292 }
1294 {
1295
1297 }
1299 break;
1300 }
1301
1303 {
1304 ULONG ExecuteOptions = 0;
1305
1306 if (ProcessInformationLength !=
sizeof(
ULONG))
1307 {
1309 break;
1310 }
1311
1312
1314
1316 {
1318 break;
1319 }
1320
1321
1324 {
1325
1327 {
1328
1329 *(
PULONG)ProcessInformation = ExecuteOptions;
1330 }
1332 {
1333
1335 }
1337 }
1338 break;
1339 }
1340
1342 DPRINT1(
"VDM/16-bit not implemented: %lu\n", ProcessInformationClass);
1344 break;
1345
1347 DPRINT1(
"WS Watch not implemented: %lu\n", ProcessInformationClass);
1349 break;
1350
1352 DPRINT1(
"Pool limits not implemented: %lu\n", ProcessInformationClass);
1354 break;
1355
1356
1357 default:
1358#if DBG
1359 DPRINT1(
"Unsupported info class: %s\n", PspDumpProcessInfoClassName(ProcessInformationClass));
1360#endif
1362 }
1363
1364
1366 {
1367
1369 {
1371 }
1373 {
1374
1375
1377 }
1379 }
1380
1382}
_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
struct _PROCESS_BASIC_INFORMATION * PPROCESS_BASIC_INFORMATION
struct _PROCESS_BASIC_INFORMATION PROCESS_BASIC_INFORMATION
#define EXCEPTION_EXECUTE_HANDLER
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
#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[]
#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::@2479 u
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ ULONG Flags
_In_opt_ PVOID _Out_ PLARGE_INTEGER Cookie
#define ObDereferenceObject
#define PsGetCurrentProcess