Reactos
at master 624 lines 10 kB view raw
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};