Reactos
1/*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Info Classes for the Process Manager
5 * COPYRIGHT: Copyright Alex Ionescu <alex.ionescu@reactos.org>
6 * Copyright Thomas Weidenmueller <w3seek@reactos.org>
7 * Copyright 2020-2021 George Bișoc <george.bisoc@reactos.org>
8 */
9
10#include "icif.h"
11
12//
13// Process Information Classes
14//
15static const INFORMATION_CLASS_INFO PsProcessInfoClass[] =
16{
17 /* ProcessBasicInformation */
18 IQS_SAME
19 (
20 PROCESS_BASIC_INFORMATION,
21 ULONG,
22 ICIF_QUERY
23 ),
24
25 /* ProcessQuotaLimits */
26 IQS_SAME
27 (
28 QUOTA_LIMITS,
29 ULONG,
30
31 /* NOTE: ICIF_SIZE_VARIABLE is for QUOTA_LIMITS_EX support */
32 ICIF_QUERY | ICIF_SET | ICIF_SIZE_VARIABLE
33 ),
34
35 /* ProcessIoCounters */
36 IQS_SAME
37 (
38 IO_COUNTERS,
39 ULONG,
40 ICIF_QUERY
41 ),
42
43 /* ProcessVmCounters */
44 IQS_SAME
45 (
46 VM_COUNTERS,
47 ULONG,
48 ICIF_QUERY | ICIF_QUERY_SIZE_VARIABLE
49 ),
50
51 /* ProcessTimes */
52 IQS_SAME
53 (
54 KERNEL_USER_TIMES,
55 ULONG,
56 ICIF_QUERY
57 ),
58
59 /* ProcessBasePriority */
60 IQS_SAME
61 (
62 KPRIORITY,
63 ULONG,
64 ICIF_SET
65 ),
66
67 /* ProcessRaisePriority */
68 IQS_SAME
69 (
70 ULONG,
71 ULONG,
72 ICIF_SET
73 ),
74
75 /* ProcessDebugPort */
76 IQS_SAME
77 (
78 HANDLE,
79 ULONG,
80 ICIF_QUERY
81 ),
82
83 /* ProcessExceptionPort */
84 IQS_SAME
85 (
86 HANDLE,
87 HANDLE,
88 ICIF_SET
89 ),
90
91 /* ProcessAccessToken */
92 IQS_SAME
93 (
94 PROCESS_ACCESS_TOKEN,
95 ULONG,
96 ICIF_SET
97 ),
98
99 /* ProcessLdtInformation */
100 IQS_SAME
101 (
102 PROCESS_LDT_INFORMATION,
103 ULONG,
104 ICIF_QUERY | ICIF_SET
105 ),
106
107 /* ProcessLdtSize */
108 IQS_SAME
109 (
110 PROCESS_LDT_SIZE,
111 ULONG,
112 ICIF_SET
113 ),
114
115 /* ProcessDefaultHardErrorMode */
116 IQS_SAME
117 (
118 ULONG,
119 ULONG,
120 ICIF_QUERY | ICIF_SET
121 ),
122
123 /* ProcessIoPortHandlers */
124 IQS_SAME
125 (
126 UCHAR,
127 ULONG,
128 ICIF_SET
129 ),
130
131 /* ProcessPooledUsageAndLimits */
132 IQS_SAME
133 (
134 POOLED_USAGE_AND_LIMITS,
135 ULONG,
136 ICIF_QUERY
137 ),
138
139 /* ProcessWorkingSetWatch */
140 IQS_SAME
141 (
142 PROCESS_WS_WATCH_INFORMATION,
143 ULONG,
144 ICIF_QUERY | ICIF_SET | ICIF_SET_SIZE_VARIABLE
145 ),
146
147 /* ProcessUserModeIOPL is only implemented in x86 */
148#if defined (_X86_)
149 IQS_NO_TYPE_LENGTH
150 (
151 ULONG,
152 ICIF_SET
153 ),
154#else
155 IQS_NONE,
156#endif
157
158 /* ProcessEnableAlignmentFaultFixup */
159 IQS
160 (
161 BOOLEAN,
162 ULONG,
163 BOOLEAN,
164 CHAR,
165 ICIF_SET
166 ),
167
168 /* ProcessPriorityClass */
169 IQS
170 (
171 PROCESS_PRIORITY_CLASS,
172 ULONG,
173 PROCESS_PRIORITY_CLASS,
174 CHAR,
175 ICIF_QUERY | ICIF_SET
176 ),
177
178 /* ProcessWx86Information */
179 IQS_SAME
180 (
181 ULONG,
182 ULONG,
183 ICIF_QUERY | ICIF_SET
184 ),
185
186 /* ProcessHandleCount */
187 IQS_SAME
188 (
189 ULONG,
190 ULONG,
191 ICIF_QUERY
192 ),
193
194 /* ProcessAffinityMask */
195 IQS_SAME
196 (
197 KAFFINITY,
198 KAFFINITY,
199 ICIF_SET
200 ),
201
202 /* ProcessPriorityBoost */
203 IQS_SAME
204 (
205 ULONG,
206 ULONG,
207 ICIF_QUERY | ICIF_SET
208 ),
209
210 /* ProcessDeviceMap */
211 IQS
212 (
213 RTL_FIELD_TYPE(PROCESS_DEVICEMAP_INFORMATION, Query),
214 ULONG,
215 RTL_FIELD_TYPE(PROCESS_DEVICEMAP_INFORMATION, Set),
216 ULONG,
217 ICIF_QUERY | ICIF_SET
218 ),
219
220 /* ProcessSessionInformation */
221 IQS_SAME
222 (
223 PROCESS_SESSION_INFORMATION,
224 ULONG,
225 ICIF_QUERY | ICIF_SET
226 ),
227
228 /* ProcessForegroundInformation */
229 IQS
230 (
231 CHAR,
232 ULONG,
233 BOOLEAN,
234 CHAR,
235 ICIF_SET
236 ),
237
238 /* ProcessWow64Information */
239 IQS_SAME
240 (
241 ULONG_PTR,
242 ULONG,
243 ICIF_QUERY
244 ),
245
246 /* ProcessImageFileName */
247 IQS_SAME
248 (
249 UNICODE_STRING,
250 ULONG,
251 ICIF_QUERY | ICIF_QUERY_SIZE_VARIABLE
252 ),
253
254 /* ProcessLUIDDeviceMapsEnabled */
255 IQS_SAME
256 (
257 ULONG,
258 ULONG,
259 ICIF_QUERY
260 ),
261
262 /* ProcessBreakOnTermination */
263 IQS_SAME
264 (
265 ULONG,
266 ULONG,
267 ICIF_QUERY | ICIF_SET
268 ),
269
270 /* ProcessDebugObjectHandle */
271 IQS_SAME
272 (
273 HANDLE,
274 ULONG,
275 ICIF_QUERY
276 ),
277
278 /* ProcessDebugFlags */
279 IQS_SAME
280 (
281 ULONG,
282 ULONG,
283 ICIF_QUERY | ICIF_SET
284 ),
285
286 /* ProcessHandleTracing */
287 IQS
288 (
289 PROCESS_HANDLE_TRACING_QUERY,
290 ULONG,
291 ULONG,
292 ULONG,
293 ICIF_QUERY | ICIF_SET
294 ),
295
296 /* ProcessIoPriority */
297 IQS_NONE,
298
299 /* ProcessExecuteFlags */
300 IQS_SAME
301 (
302 ULONG,
303 ULONG,
304 ICIF_QUERY | ICIF_SET
305 ),
306
307 /* ProcessTlsInformation */
308 IQS_NONE,
309
310 /* ProcessCookie */
311 IQS_SAME
312 (
313 ULONG,
314 ULONG,
315 ICIF_QUERY
316 ),
317
318 /* ProcessImageInformation */
319 IQS_SAME
320 (
321 SECTION_IMAGE_INFORMATION,
322 ULONG,
323 ICIF_QUERY
324 ),
325
326 /* ProcessCycleTime */
327 IQS_NONE,
328
329 /* ProcessPagePriority */
330 IQS_NONE,
331
332 /* ProcessInstrumentationCallback */
333 IQS_NONE,
334
335 /* ProcessThreadStackAllocation */
336 IQS_NONE,
337
338 /* ProcessWorkingSetWatchEx */
339 IQS_NONE,
340
341 /* ProcessImageFileNameWin32 */
342 IQS_SAME
343 (
344 UNICODE_STRING,
345 ULONG_PTR,
346 ICIF_QUERY | ICIF_QUERY_SIZE_VARIABLE
347 ),
348
349 /* ProcessImageFileMapping */
350 IQS_NONE,
351
352 /* ProcessAffinityUpdateMode */
353 IQS_NONE,
354
355 /* ProcessMemoryAllocationMode */
356 IQS_NONE,
357};
358
359//
360// Thread Information Classes
361//
362static const INFORMATION_CLASS_INFO PsThreadInfoClass[] =
363{
364 /* ThreadBasicInformation */
365 IQS_SAME
366 (
367 THREAD_BASIC_INFORMATION,
368 ULONG,
369 ICIF_QUERY
370 ),
371
372 /* ThreadTimes */
373 IQS_SAME
374 (
375 KERNEL_USER_TIMES,
376 ULONG,
377 ICIF_QUERY
378 ),
379
380 /* ThreadPriority */
381 IQS_SAME
382 (
383 KPRIORITY,
384 ULONG,
385 ICIF_SET
386 ),
387
388 /* ThreadBasePriority */
389 IQS_SAME
390 (
391 LONG,
392 ULONG,
393 ICIF_SET
394 ),
395
396 /* ThreadAffinityMask */
397 IQS_SAME
398 (
399 KAFFINITY,
400 ULONG,
401 ICIF_SET
402 ),
403
404 /* ThreadImpersonationToken */
405 IQS_SAME
406 (
407 HANDLE,
408 ULONG,
409 ICIF_SET
410 ),
411
412 /* ThreadDescriptorTableEntry is only implemented in x86 as well as the descriptor entry */
413#if defined(_X86_)
414 IQS_SAME
415 (
416 DESCRIPTOR_TABLE_ENTRY,
417 ULONG,
418 ICIF_QUERY
419 ),
420#else
421 IQS_NONE,
422#endif
423
424 /* ThreadEnableAlignmentFaultFixup */
425 IQS
426 (
427 CHAR,
428 CHAR,
429 BOOLEAN,
430 UCHAR,
431 ICIF_SET
432 ),
433
434 /* ThreadEventPair_Reusable */
435 IQS_NONE,
436
437 /* ThreadQuerySetWin32StartAddress */
438 IQS
439 (
440 PVOID,
441 ULONG,
442 ULONG_PTR,
443 ULONG,
444 ICIF_QUERY | ICIF_SET
445 ),
446
447 /* ThreadZeroTlsCell */
448 IQS_SAME
449 (
450 ULONG,
451 ULONG,
452 ICIF_SET
453 ),
454
455 /* ThreadPerformanceCount */
456 IQS_SAME
457 (
458 LARGE_INTEGER,
459 ULONG,
460 ICIF_QUERY
461 ),
462
463 /* ThreadAmILastThread */
464 IQS_SAME
465 (
466 ULONG,
467 ULONG,
468 ICIF_QUERY
469 ),
470
471 /* ThreadIdealProcessor */
472 IQS_SAME
473 (
474 ULONG_PTR,
475 ULONG,
476 ICIF_SET
477 ),
478
479 /* ThreadPriorityBoost */
480 IQS
481 (
482 ULONG,
483 ULONG,
484 ULONG_PTR,
485 ULONG,
486 ICIF_QUERY | ICIF_SET
487 ),
488
489 /* ThreadSetTlsArrayAddress */
490 IQS_SAME
491 (
492 PVOID,
493 ULONG,
494 ICIF_SET | ICIF_SIZE_VARIABLE
495 ),
496
497 /* ThreadIsIoPending */
498 IQS_SAME
499 (
500 ULONG,
501 ULONG,
502 ICIF_QUERY
503 ),
504
505 /* ThreadHideFromDebugger */
506 IQS_SAME
507 (
508 CHAR,
509 ULONG,
510 ICIF_SET | ICIF_SET_SIZE_VARIABLE
511 ),
512
513 /* ThreadBreakOnTermination */
514 IQS_SAME
515 (
516 ULONG,
517 ULONG,
518 ICIF_QUERY | ICIF_SET
519 ),
520
521 /* ThreadSwitchLegacyState */
522 IQS_SAME
523 (
524 ULONG,
525 ULONG,
526 ICIF_SET
527 ),
528
529 /* ThreadIsTerminated */
530 IQS_SAME
531 (
532 ULONG,
533 ULONG,
534 ICIF_QUERY
535 ),
536
537 /* ThreadLastSystemCall */
538 IQS_NONE,
539
540 /* ThreadIoPriority */
541 IQS_NONE,
542
543 /* ThreadCycleTime */
544 IQS_NONE,
545
546 /* ThreadPagePriority */
547 IQS_NONE,
548
549 /* ThreadActualBasePriority */
550 IQS_NONE,
551
552 /* ThreadTebInformation */
553 IQS_NONE,
554
555 /* ThreadCSwitchMon */
556 IQS_NONE,
557
558#if 0 // Hermes will surely fix this properly
559 // Windows 7
560 /* ThreadCSwitchPmu */
561 IQS_NONE,
562 /* ThreadWow64Context */
563 IQS_NONE,
564 /* ThreadGroupInformation */
565 IQS_NONE,
566 /* ThreadUmsInformation */
567 IQS_NONE,
568 /* ThreadCounterProfiling */
569 IQS_NONE,
570 /* ThreadIdealProcessorEx */
571 IQS_NONE,
572
573 // Windows 8
574 /* ThreadCpuAccountingInformation */
575 IQS_NONE,
576
577 // Windows 8.1
578 /* ThreadSuspendCount */
579 IQS_NONE,
580
581 // Windows 10
582 /* ThreadHeterogeneousCpuPolicy */
583 IQS_NONE,
584 /* ThreadContainerId */
585 IQS_NONE,
586 /* ThreadNameInformation */
587 IQS_NONE,
588 /* ThreadSelectedCpuSets */
589 IQS_NONE,
590 /* ThreadSystemThreadInformation */
591 IQS_NONE,
592 /* ThreadActualGroupAffinity */
593 IQS_NONE,
594
595 /* ThreadDynamicCodePolicyInfo */
596 IQS_NONE,
597 /* ThreadExplicitCaseSensitivity */
598 IQS_NONE,
599 /* ThreadWorkOnBehalfTicket */
600 IQS_NONE,
601 /* ThreadSubsystemInformation */
602 IQS_NONE,
603 /* ThreadDbgkWerReportActive */
604 IQS_NONE,
605 /* ThreadAttachContainer */
606 IQS_NONE,
607 /* ThreadManageWritesToExecutableMemory */
608 IQS_NONE,
609 /* ThreadPowerThrottlingState */
610 IQS_NONE,
611 /* ThreadWorkloadClass */
612 IQS_NONE,
613 /* ThreadCreateStateChange */
614 IQS_NONE,
615 /* ThreadApplyStateChange */
616 IQS_NONE,
617 /* ThreadStrongerBadHandleChecks */
618 IQS_NONE,
619 /* ThreadEffectiveIoPriority */
620 IQS_NONE,
621 /* ThreadEffectivePagePriority */
622 IQS_NONE,
623#endif
624};