1 /*++ NDK Version: 0098 2 3 Copyright (c) Alex Ionescu. All rights reserved. 4 5 Header Name: 6 7 kefuncs.h 8 9 Abstract: 10 11 Functions definitions for the Kernel services. 12 13 Author: 14 15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 16 17 --*/ 18 19 #ifndef _KEFUNCS_H 20 #define _KEFUNCS_H 21 22 // 23 // Dependencies 24 // 25 #include <umtypes.h> 26 #include <ketypes.h> 27 #include <section_attribs.h> 28 29 #ifndef NTOS_MODE_USER 30 31 // 32 // APC Functions 33 // 34 VOID 35 NTAPI 36 KeInitializeApc( 37 _In_ PKAPC Apc, 38 _In_ PKTHREAD Thread, 39 _In_ KAPC_ENVIRONMENT TargetEnvironment, 40 _In_ PKKERNEL_ROUTINE KernelRoutine, 41 _In_opt_ PKRUNDOWN_ROUTINE RundownRoutine, 42 _In_ PKNORMAL_ROUTINE NormalRoutine, 43 _In_ KPROCESSOR_MODE Mode, 44 _In_ PVOID Context 45 ); 46 47 BOOLEAN 48 NTAPI 49 KeInsertQueueApc( 50 _In_ PKAPC Apc, 51 _In_ PVOID SystemArgument1, 52 _In_ PVOID SystemArgument2, 53 _In_ KPRIORITY PriorityBoost 54 ); 55 56 VOID 57 NTAPI 58 KiDeliverApc( 59 _In_ KPROCESSOR_MODE PreviousMode, 60 #ifdef _M_AMD64 61 _In_ PKEXCEPTION_FRAME ExceptionFrame, 62 #else 63 _Reserved_ PKEXCEPTION_FRAME ExceptionFrame, 64 #endif 65 _In_ PKTRAP_FRAME TrapFrame 66 ); 67 68 // 69 // Process/Thread Functions 70 // 71 VOID 72 NTAPI 73 KeTerminateThread( 74 _In_ KPRIORITY Increment 75 ); 76 77 BOOLEAN 78 NTAPI 79 KeIsAttachedProcess( 80 VOID 81 ); 82 83 VOID 84 NTAPI 85 KeSetEventBoostPriority( 86 _In_ PKEVENT Event, 87 _In_opt_ PKTHREAD *Thread 88 ); 89 90 KAFFINITY 91 NTAPI 92 KeSetAffinityThread( 93 _Inout_ PKTHREAD Thread, 94 _In_ KAFFINITY Affinity 95 ); 96 97 PKPROCESS 98 NTAPI 99 KeGetCurrentProcess( 100 VOID 101 ); 102 103 BOOLEAN 104 NTAPI 105 KeAddSystemServiceTable( 106 _In_ PULONG_PTR Base, 107 _In_opt_ PULONG Count, 108 _In_ ULONG Limit, 109 _In_ PUCHAR Number, 110 _In_ ULONG Index 111 ); 112 113 // 114 // Spinlock Functions 115 // 116 VOID 117 FASTCALL 118 KiAcquireSpinLock( 119 _Inout_ PKSPIN_LOCK SpinLock 120 ); 121 122 VOID 123 FASTCALL 124 KiReleaseSpinLock( 125 _Inout_ PKSPIN_LOCK SpinLock 126 ); 127 128 KIRQL 129 FASTCALL 130 KeAcquireQueuedSpinLockRaiseToSynch( 131 _In_ KSPIN_LOCK_QUEUE_NUMBER LockNumber 132 ); 133 134 BOOLEAN 135 FASTCALL 136 KeTryToAcquireQueuedSpinLockRaiseToSynch( 137 _In_ KSPIN_LOCK_QUEUE_NUMBER LockNumber, 138 _In_ PKIRQL OldIrql 139 ); 140 141 VOID 142 FASTCALL 143 KeAcquireInStackQueuedSpinLockRaiseToSynch( 144 _In_ PKSPIN_LOCK SpinLock, 145 _In_ PKLOCK_QUEUE_HANDLE LockHandle 146 ); 147 148 149 // 150 // Interrupt Functions 151 // 152 VOID 153 NTAPI 154 KeInitializeInterrupt( 155 _Out_ PKINTERRUPT InterruptObject, 156 _In_ PKSERVICE_ROUTINE ServiceRoutine, 157 _In_ PVOID ServiceContext, 158 _In_ PKSPIN_LOCK SpinLock, 159 _In_ ULONG Vector, 160 _In_ KIRQL Irql, 161 _In_ KIRQL SynchronizeIrql, 162 _In_ KINTERRUPT_MODE InterruptMode, 163 _In_ BOOLEAN ShareVector, 164 _In_ CHAR ProcessorNumber, 165 _In_ BOOLEAN FloatingSave 166 ); 167 168 BOOLEAN 169 NTAPI 170 KeConnectInterrupt( 171 _Inout_ PKINTERRUPT InterruptObject 172 ); 173 174 BOOLEAN 175 NTAPI 176 KeDisconnectInterrupt( 177 _Inout_ PKINTERRUPT InterruptObject 178 ); 179 180 VOID 181 NTAPI 182 KiDispatchInterrupt( 183 VOID 184 ); 185 186 VOID 187 NTAPI 188 KiCoprocessorError( 189 VOID 190 ); 191 192 DECLSPEC_NORETURN 193 VOID 194 __cdecl 195 KiUnexpectedInterrupt( 196 VOID 197 ); 198 199 VOID 200 NTAPI 201 KeEnterKernelDebugger( 202 VOID 203 ); 204 205 BOOLEAN 206 NTAPI 207 KeIsExecutingDpc( 208 VOID 209 ); 210 211 BOOLEAN 212 NTAPI 213 KiIpiServiceRoutine( 214 _In_ PKTRAP_FRAME TrapFrame, 215 #ifdef _M_AMD64 216 _In_ PKEXCEPTION_FRAME ExceptionFrame 217 #else 218 _Reserved_ PKEXCEPTION_FRAME ExceptionFrame 219 #endif 220 ); 221 222 // 223 // Generic DPC Routines 224 // 225 VOID 226 NTAPI 227 KeGenericCallDpc( 228 _In_ PKDEFERRED_ROUTINE Routine, 229 _In_ PVOID Context 230 ); 231 232 VOID 233 NTAPI 234 KeSignalCallDpcDone( 235 _In_ PVOID SystemArgument1 236 ); 237 238 BOOLEAN 239 NTAPI 240 KeSignalCallDpcSynchronize( 241 _In_ PVOID SystemArgument2 242 ); 243 244 // 245 // ARC Configuration Functions. Only enabled if you have ARC Support 246 // 247 #ifdef _ARC_ 248 PCONFIGURATION_COMPONENT_DATA 249 NTAPI 250 KeFindConfigurationNextEntry( 251 _In_ PCONFIGURATION_COMPONENT_DATA Child, 252 _In_ CONFIGURATION_CLASS Class, 253 _In_ CONFIGURATION_TYPE Type, 254 _In_opt_ PULONG ComponentKey, 255 _In_ PCONFIGURATION_COMPONENT_DATA *NextLink 256 ); 257 258 PCONFIGURATION_COMPONENT_DATA 259 NTAPI 260 KeFindConfigurationEntry( 261 _In_ PCONFIGURATION_COMPONENT_DATA Child, 262 _In_ CONFIGURATION_CLASS Class, 263 _In_ CONFIGURATION_TYPE Type, 264 _In_opt_ PULONG ComponentKey 265 ); 266 #endif 267 268 // 269 // Low-level Hardware/CPU Control Functions 270 // 271 VOID 272 NTAPI 273 KeFlushEntireTb( 274 _In_ BOOLEAN Invalid, 275 _In_ BOOLEAN AllProcessors 276 ); 277 278 VOID 279 NTAPI 280 KeSetDmaIoCoherency( 281 _In_ ULONG Coherency 282 ); 283 284 VOID 285 KeSetGdtSelector( 286 _In_ ULONG Entry, 287 _In_ ULONG Value1, 288 _In_ ULONG Value2 289 ); 290 291 VOID 292 NTAPI 293 KeProfileInterrupt( 294 _In_ PKTRAP_FRAME TrapFrame 295 ); 296 297 VOID 298 NTAPI 299 KeProfileInterruptWithSource( 300 _In_ PKTRAP_FRAME TrapFrame, 301 _In_ KPROFILE_SOURCE Source 302 ); 303 304 VOID 305 NTAPI 306 KeSetProfileIrql( 307 _In_ KIRQL ProfileIrql 308 ); 309 310 VOID 311 NTAPI 312 KeSetTimeIncrement( 313 _In_ ULONG MaxIncrement, 314 _In_ ULONG MinIncrement 315 ); 316 317 NTSTATUS 318 NTAPI 319 Ke386CallBios( 320 _In_ ULONG BiosCommand, 321 _Inout_ PCONTEXT BiosArguments 322 ); 323 324 // 325 // Misc. Functions 326 // 327 NTSTATUS 328 NTAPI 329 KeUserModeCallback( 330 _In_ ULONG FunctionID, 331 _In_reads_opt_(InputLength) PVOID InputBuffer, 332 _In_ ULONG InputLength, 333 _Outptr_result_buffer_(*OutputLength) PVOID *OutputBuffer, 334 _Out_ PULONG OutputLength 335 ); 336 337 NTSTATUS 338 NTAPI 339 KeRaiseUserException( 340 _In_ NTSTATUS ExceptionCode 341 ); 342 343 #endif 344 345 // 346 // Native Calls 347 // 348 NTSYSCALLAPI 349 NTSTATUS 350 NTAPI 351 NtContinue( 352 _In_ PCONTEXT Context, 353 _In_ BOOLEAN TestAlert 354 ); 355 356 NTSYSCALLAPI 357 NTSTATUS 358 NTAPI 359 NtCallbackReturn( 360 _In_ PVOID Result, 361 _In_ ULONG ResultLength, 362 _In_ NTSTATUS Status 363 ); 364 365 NTSYSCALLAPI 366 NTSTATUS 367 NTAPI 368 NtCreateProfile( 369 _Out_ PHANDLE ProfileHandle, 370 _In_ HANDLE ProcessHandle, 371 _In_ PVOID ImageBase, 372 _In_ SIZE_T ImageSize, 373 _In_ ULONG Granularity, 374 _Out_ PVOID Buffer, 375 _In_ ULONG ProfilingSize, 376 _In_ KPROFILE_SOURCE Source, 377 _In_ KAFFINITY ProcessorMask 378 ); 379 380 NTSYSCALLAPI 381 NTSTATUS 382 NTAPI 383 NtCreateProfileEx( 384 _Out_ PHANDLE ProfileHandle, 385 _In_ HANDLE ProcessHandle, 386 _In_ PVOID ImageBase, 387 _In_ SIZE_T ImageSize, 388 _In_ ULONG Granularity, 389 _Out_ PVOID Buffer, 390 _In_ ULONG ProfilingSize, 391 _In_ KPROFILE_SOURCE Source, 392 _In_ USHORT GroupCount, 393 _In_reads_(GroupCount) PGROUP_AFFINITY Affinity 394 ); 395 396 NTSYSCALLAPI 397 NTSTATUS 398 NTAPI 399 NtDelayExecution( 400 _In_ BOOLEAN Alertable, 401 _In_ LARGE_INTEGER *Interval 402 ); 403 404 ULONG 405 NTAPI 406 NtGetCurrentProcessorNumber( 407 VOID 408 ); 409 410 NTSYSCALLAPI 411 NTSTATUS 412 NTAPI 413 NtGetContextThread( 414 _In_ HANDLE ThreadHandle, 415 _Out_ PCONTEXT Context 416 ); 417 418 NTSYSCALLAPI 419 ULONG 420 NTAPI 421 NtGetTickCount( 422 VOID 423 ); 424 425 NTSYSCALLAPI 426 NTSTATUS 427 NTAPI 428 NtQueryIntervalProfile( 429 _In_ KPROFILE_SOURCE ProfileSource, 430 _Out_ PULONG Interval 431 ); 432 433 NTSYSCALLAPI 434 NTSTATUS 435 NTAPI 436 NtQueryPerformanceCounter( 437 _Out_ PLARGE_INTEGER Counter, 438 _Out_opt_ PLARGE_INTEGER Frequency 439 ); 440 441 NTSYSCALLAPI 442 NTSTATUS 443 NTAPI 444 NtQuerySystemTime( 445 _Out_ PLARGE_INTEGER CurrentTime 446 ); 447 448 NTSYSCALLAPI 449 NTSTATUS 450 NTAPI 451 NtQueryTimerResolution( 452 _Out_ PULONG MinimumResolution, 453 _Out_ PULONG MaximumResolution, 454 _Out_ PULONG ActualResolution 455 ); 456 457 NTSYSCALLAPI 458 NTSTATUS 459 NTAPI 460 NtQueueApcThread( 461 _In_ HANDLE ThreadHandle, 462 _In_ PKNORMAL_ROUTINE ApcRoutine, 463 _In_opt_ PVOID NormalContext, 464 _In_opt_ PVOID SystemArgument1, 465 _In_opt_ PVOID SystemArgument2 466 ); 467 468 NTSYSCALLAPI 469 NTSTATUS 470 NTAPI 471 NtQueueApcThreadEx( 472 _In_ HANDLE ThreadHandle, 473 _In_opt_ HANDLE UserApcReserveHandle, 474 _In_ PKNORMAL_ROUTINE ApcRoutine, 475 _In_opt_ PVOID NormalContext, 476 _In_opt_ PVOID SystemArgument1, 477 _In_opt_ PVOID SystemArgument2 478 ); 479 480 NTSYSCALLAPI 481 NTSTATUS 482 NTAPI 483 NtRaiseException( 484 _In_ PEXCEPTION_RECORD ExceptionRecord, 485 _In_ PCONTEXT Context, 486 _In_ BOOLEAN SearchFrames 487 ); 488 489 NTSYSCALLAPI 490 NTSTATUS 491 NTAPI 492 NtSetContextThread( 493 _In_ HANDLE ThreadHandle, 494 _In_ PCONTEXT Context 495 ); 496 497 NTSYSCALLAPI 498 NTSTATUS 499 NTAPI 500 NtSetIntervalProfile( 501 _In_ ULONG Interval, 502 _In_ KPROFILE_SOURCE ClockSource 503 ); 504 505 NTSYSCALLAPI 506 NTSTATUS 507 NTAPI 508 NtSetLdtEntries( 509 _In_ ULONG Selector1, 510 _In_ LDT_ENTRY LdtEntry1, 511 _In_ ULONG Selector2, 512 _In_ LDT_ENTRY LdtEntry2 513 ); 514 515 NTSYSCALLAPI 516 NTSTATUS 517 NTAPI 518 NtSetSystemTime( 519 _In_ PLARGE_INTEGER SystemTime, 520 _In_opt_ PLARGE_INTEGER NewSystemTime 521 ); 522 523 NTSYSCALLAPI 524 NTSTATUS 525 NTAPI 526 NtSetTimerResolution( 527 _In_ ULONG RequestedResolution, 528 _In_ BOOLEAN SetOrUnset, 529 _Out_ PULONG ActualResolution 530 ); 531 532 NTSYSCALLAPI 533 NTSTATUS 534 NTAPI 535 NtStartProfile( 536 _In_ HANDLE ProfileHandle 537 ); 538 539 NTSYSCALLAPI 540 NTSTATUS 541 NTAPI 542 NtStopProfile( 543 _In_ HANDLE ProfileHandle 544 ); 545 546 NTSYSCALLAPI 547 NTSTATUS 548 NTAPI 549 NtTestAlert( 550 VOID 551 ); 552 553 NTSYSCALLAPI 554 NTSTATUS 555 NTAPI 556 NtVdmControl( 557 _In_ ULONG ControlCode, 558 _In_ PVOID ControlData 559 ); 560 561 NTSYSCALLAPI 562 NTSTATUS 563 NTAPI 564 NtW32Call( 565 _In_ ULONG RoutineIndex, 566 _In_ PVOID Argument, 567 _In_ ULONG ArgumentLength, 568 _Out_opt_ PVOID* Result, 569 _Out_opt_ PULONG ResultLength 570 ); 571 572 NTSYSCALLAPI 573 NTSTATUS 574 NTAPI 575 NtYieldExecution( 576 VOID 577 ); 578 579 NTSYSAPI 580 NTSTATUS 581 NTAPI 582 ZwContinue( 583 _In_ PCONTEXT Context, 584 _In_ BOOLEAN TestAlert 585 ); 586 587 NTSYSAPI 588 NTSTATUS 589 NTAPI 590 ZwCallbackReturn( 591 _In_ PVOID Result, 592 _In_ ULONG ResultLength, 593 _In_ NTSTATUS Status 594 ); 595 596 NTSYSAPI 597 NTSTATUS 598 NTAPI 599 ZwCreateProfile( 600 _Out_ PHANDLE ProfileHandle, 601 _In_ HANDLE ProcessHandle, 602 _In_ PVOID ImageBase, 603 _In_ ULONG ImageSize, 604 _In_ ULONG Granularity, 605 _Out_ PVOID Buffer, 606 _In_ ULONG ProfilingSize, 607 _In_ KPROFILE_SOURCE Source, 608 _In_ KAFFINITY ProcessorMask 609 ); 610 611 NTSYSAPI 612 NTSTATUS 613 NTAPI 614 ZwDelayExecution( 615 _In_ BOOLEAN Alertable, 616 _In_ LARGE_INTEGER *Interval 617 ); 618 619 NTSYSAPI 620 NTSTATUS 621 NTAPI 622 ZwFlushInstructionCache( 623 _In_ HANDLE ProcessHandle, 624 _In_ PVOID BaseAddress, 625 _In_ ULONG NumberOfBytesToFlush 626 ); 627 628 NTSYSAPI 629 NTSTATUS 630 NTAPI 631 ZwGetContextThread( 632 _In_ HANDLE ThreadHandle, 633 _Out_ PCONTEXT Context 634 ); 635 636 NTSYSAPI 637 ULONG 638 NTAPI 639 ZwGetTickCount( 640 VOID 641 ); 642 643 NTSYSAPI 644 NTSTATUS 645 NTAPI 646 ZwQueryIntervalProfile( 647 _In_ KPROFILE_SOURCE ProfileSource, 648 _Out_ PULONG Interval 649 ); 650 651 NTSYSAPI 652 NTSTATUS 653 NTAPI 654 ZwQueryPerformanceCounter( 655 _Out_ PLARGE_INTEGER Counter, 656 _Out_opt_ PLARGE_INTEGER Frequency 657 ); 658 659 NTSYSAPI 660 NTSTATUS 661 NTAPI 662 ZwQuerySystemTime( 663 _Out_ PLARGE_INTEGER CurrentTime 664 ); 665 666 NTSYSAPI 667 NTSTATUS 668 NTAPI 669 ZwQueryTimerResolution( 670 _Out_ PULONG MinimumResolution, 671 _Out_ PULONG MaximumResolution, 672 _Out_ PULONG ActualResolution 673 ); 674 675 NTSYSAPI 676 NTSTATUS 677 NTAPI 678 ZwQueueApcThread( 679 _In_ HANDLE ThreadHandle, 680 _In_ PKNORMAL_ROUTINE ApcRoutine, 681 _In_opt_ PVOID NormalContext, 682 _In_opt_ PVOID SystemArgument1, 683 _In_opt_ PVOID SystemArgument2 684 ); 685 686 NTSYSAPI 687 NTSTATUS 688 NTAPI 689 ZwRaiseException( 690 _In_ PEXCEPTION_RECORD ExceptionRecord, 691 _In_ PCONTEXT Context, 692 _In_ BOOLEAN SearchFrames 693 ); 694 695 NTSYSAPI 696 NTSTATUS 697 NTAPI 698 ZwSetContextThread( 699 _In_ HANDLE ThreadHandle, 700 _In_ PCONTEXT Context 701 ); 702 703 NTSYSAPI 704 NTSTATUS 705 NTAPI 706 ZwSetIntervalProfile( 707 _In_ ULONG Interval, 708 _In_ KPROFILE_SOURCE ClockSource 709 ); 710 711 NTSYSAPI 712 NTSTATUS 713 NTAPI 714 ZwSetLdtEntries( 715 _In_ ULONG Selector1, 716 _In_ LDT_ENTRY LdtEntry1, 717 _In_ ULONG Selector2, 718 _In_ LDT_ENTRY LdtEntry2 719 ); 720 721 NTSYSAPI 722 NTSTATUS 723 NTAPI 724 ZwSetSystemTime( 725 _In_ PLARGE_INTEGER SystemTime, 726 _In_opt_ PLARGE_INTEGER NewSystemTime 727 ); 728 729 NTSYSAPI 730 NTSTATUS 731 NTAPI 732 ZwSetTimerResolution( 733 _In_ ULONG RequestedResolution, 734 _In_ BOOLEAN SetOrUnset, 735 _Out_ PULONG ActualResolution 736 ); 737 738 NTSYSAPI 739 NTSTATUS 740 NTAPI 741 ZwStartProfile( 742 _In_ HANDLE ProfileHandle 743 ); 744 745 NTSYSAPI 746 NTSTATUS 747 NTAPI 748 ZwStopProfile( 749 _In_ HANDLE ProfileHandle 750 ); 751 752 NTSYSAPI 753 NTSTATUS 754 NTAPI 755 ZwTestAlert( 756 VOID 757 ); 758 759 NTSYSAPI 760 NTSTATUS 761 NTAPI 762 ZwVdmControl( 763 _In_ ULONG ControlCode, 764 _In_ PVOID ControlData 765 ); 766 767 NTSYSAPI 768 NTSTATUS 769 NTAPI 770 ZwW32Call( 771 _In_ ULONG RoutineIndex, 772 _In_ PVOID Argument, 773 _In_ ULONG ArgumentLength, 774 _Out_opt_ PVOID* Result, 775 _Out_opt_ PULONG ResultLength 776 ); 777 778 NTSYSAPI 779 NTSTATUS 780 NTAPI 781 ZwYieldExecution( 782 VOID 783 ); 784 #endif 785