1 /****************************************************************************** 2 * Kernel Functions * 3 ******************************************************************************/ 4 $if (_WDMDDK_) 5 #if defined(_M_IX86) 6 $include(x86/ke.h) 7 #elif defined(_M_AMD64) 8 $include(amd64/ke.h) 9 #elif defined(_M_IA64) 10 $include(ia64/ke.h) 11 #elif defined(_M_PPC) 12 $include(ppc/ke.h) 13 #elif defined(_M_MIPS) 14 $include(mips/ke.h) 15 #elif defined(_M_ARM) 16 $include(arm/ke.h) 17 #elif defined(_M_ARM64) 18 $include(arm64/ke.h) 19 #else 20 #error Unknown Architecture 21 #endif 22 23 NTKERNELAPI 24 VOID 25 NTAPI 26 KeInitializeEvent( 27 _Out_ PRKEVENT Event, 28 _In_ EVENT_TYPE Type, 29 _In_ BOOLEAN State); 30 31 _IRQL_requires_max_(DISPATCH_LEVEL) 32 NTKERNELAPI 33 VOID 34 NTAPI 35 KeClearEvent( 36 _Inout_ PRKEVENT Event); 37 $endif (_WDMDDK_) 38 $if (_NTDDK_) 39 40 _IRQL_requires_min_(PASSIVE_LEVEL) 41 _IRQL_requires_max_(DISPATCH_LEVEL) 42 NTKERNELAPI 43 VOID 44 FASTCALL 45 KeInvalidateRangeAllCaches( 46 _In_ PVOID BaseAddress, 47 _In_ ULONG Length); 48 $endif (_NTDDK_) 49 50 #if (NTDDI_VERSION >= NTDDI_WIN2K) 51 52 $if (_WDMDDK_) 53 #if defined(_NTDDK_) || defined(_NTIFS_) 54 _Maybe_raises_SEH_exception_ 55 _IRQL_requires_max_(APC_LEVEL) 56 NTKERNELAPI 57 VOID 58 NTAPI 59 ProbeForRead( 60 __in_data_source(USER_MODE) _In_reads_bytes_(Length) CONST VOID *Address, /* CONST is added */ 61 _In_ SIZE_T Length, 62 _In_ ULONG Alignment); 63 #endif /* defined(_NTDDK_) || defined(_NTIFS_) */ 64 65 _Maybe_raises_SEH_exception_ 66 _IRQL_requires_max_(APC_LEVEL) 67 NTKERNELAPI 68 VOID 69 NTAPI 70 ProbeForWrite( 71 __in_data_source(USER_MODE) _Out_writes_bytes_(Length) PVOID Address, 72 _In_ SIZE_T Length, 73 _In_ ULONG Alignment); 74 75 $endif (_WDMDDK_) 76 $if (_NTDDK_) 77 NTKERNELAPI 78 VOID 79 NTAPI 80 KeSetImportanceDpc( 81 _Inout_ PRKDPC Dpc, 82 _In_ KDPC_IMPORTANCE Importance); 83 84 _IRQL_requires_max_(DISPATCH_LEVEL) 85 NTKERNELAPI 86 LONG 87 NTAPI 88 KePulseEvent( 89 _Inout_ PRKEVENT Event, 90 _In_ KPRIORITY Increment, 91 _In_ BOOLEAN Wait); 92 93 _IRQL_requires_min_(PASSIVE_LEVEL) 94 _IRQL_requires_max_(DISPATCH_LEVEL) 95 NTKERNELAPI 96 LONG 97 NTAPI 98 KeSetBasePriorityThread( 99 _Inout_ PRKTHREAD Thread, 100 _In_ LONG Increment); 101 102 _Acquires_lock_(_Global_critical_region_) 103 _IRQL_requires_max_(APC_LEVEL) 104 NTKERNELAPI 105 VOID 106 NTAPI 107 KeEnterCriticalRegion(VOID); 108 109 _Releases_lock_(_Global_critical_region_) 110 _IRQL_requires_max_(APC_LEVEL) 111 NTKERNELAPI 112 VOID 113 NTAPI 114 KeLeaveCriticalRegion(VOID); 115 116 NTKERNELAPI 117 DECLSPEC_NORETURN 118 VOID 119 NTAPI 120 KeBugCheck( 121 _In_ ULONG BugCheckCode); 122 $endif(_NTDDK_) 123 $if (_WDMDDK_ || _NTDDK_) 124 #if defined(SINGLE_GROUP_LEGACY_API) 125 $endif (_WDMDDK_ || _NTDDK_) 126 127 $if (_WDMDDK_) 128 _IRQL_requires_min_(PASSIVE_LEVEL) 129 _IRQL_requires_max_(APC_LEVEL) 130 NTKERNELAPI 131 VOID 132 NTAPI 133 KeRevertToUserAffinityThread(VOID); 134 135 _IRQL_requires_min_(PASSIVE_LEVEL) 136 _IRQL_requires_max_(APC_LEVEL) 137 NTKERNELAPI 138 VOID 139 NTAPI 140 KeSetSystemAffinityThread( 141 _In_ KAFFINITY Affinity); 142 143 NTKERNELAPI 144 VOID 145 NTAPI 146 KeSetTargetProcessorDpc( 147 _Inout_ PRKDPC Dpc, 148 _In_ CCHAR Number); 149 150 NTKERNELAPI 151 KAFFINITY 152 NTAPI 153 KeQueryActiveProcessors(VOID); 154 $endif (_WDMDDK_) 155 $if (_NTDDK_) 156 157 NTKERNELAPI 158 VOID 159 NTAPI 160 KeSetTargetProcessorDpc( 161 _Inout_ PRKDPC Dpc, 162 _In_ CCHAR Number); 163 164 NTKERNELAPI 165 KAFFINITY 166 NTAPI 167 KeQueryActiveProcessors(VOID); 168 $endif (_NTDDK_) 169 $if (_WDMDDK_ || _NTDDK_) 170 #endif /* defined(SINGLE_GROUP_LEGACY_API) */ 171 $endif (_WDMDDK_ || _NTDDK_) 172 173 $if (_WDMDDK_) 174 #if !defined(_M_AMD64) 175 NTKERNELAPI 176 ULONGLONG 177 NTAPI 178 KeQueryInterruptTime(VOID); 179 180 NTKERNELAPI 181 VOID 182 NTAPI 183 KeQuerySystemTime( 184 _Out_ PLARGE_INTEGER CurrentTime); 185 #endif /* !_M_AMD64 */ 186 187 #if !defined(_X86_) && !defined(_M_ARM) 188 _Requires_lock_not_held_(*SpinLock) 189 _Acquires_lock_(*SpinLock) 190 _IRQL_requires_max_(DISPATCH_LEVEL) 191 _IRQL_saves_ 192 _IRQL_raises_(DISPATCH_LEVEL) 193 NTKERNELAPI 194 KIRQL 195 NTAPI 196 KeAcquireSpinLockRaiseToDpc( 197 _Inout_ PKSPIN_LOCK SpinLock); 198 199 #define KeAcquireSpinLock(SpinLock, OldIrql) \ 200 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock) 201 202 _Requires_lock_not_held_(*SpinLock) 203 _Acquires_lock_(*SpinLock) 204 _IRQL_requires_min_(DISPATCH_LEVEL) 205 NTKERNELAPI 206 VOID 207 NTAPI 208 KeAcquireSpinLockAtDpcLevel( 209 _Inout_ PKSPIN_LOCK SpinLock); 210 211 _Requires_lock_held_(*SpinLock) 212 _Releases_lock_(*SpinLock) 213 _IRQL_requires_(DISPATCH_LEVEL) 214 NTKERNELAPI 215 VOID 216 NTAPI 217 KeReleaseSpinLock( 218 _Inout_ PKSPIN_LOCK SpinLock, 219 _In_ _IRQL_restores_ KIRQL NewIrql); 220 221 _Requires_lock_held_(*SpinLock) 222 _Releases_lock_(*SpinLock) 223 _IRQL_requires_min_(DISPATCH_LEVEL) 224 NTKERNELAPI 225 VOID 226 NTAPI 227 KeReleaseSpinLockFromDpcLevel( 228 _Inout_ PKSPIN_LOCK SpinLock); 229 #endif /* !_X86_ */ 230 231 #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK)) 232 NTKERNELAPI 233 VOID 234 NTAPI 235 KeInitializeSpinLock( 236 _Out_ PKSPIN_LOCK SpinLock); 237 #else 238 FORCEINLINE 239 VOID 240 KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock) 241 { 242 /* Clear the lock */ 243 *SpinLock = 0; 244 } 245 #endif 246 247 NTKERNELAPI 248 DECLSPEC_NORETURN 249 VOID 250 NTAPI 251 KeBugCheckEx( 252 _In_ ULONG BugCheckCode, 253 _In_ ULONG_PTR BugCheckParameter1, 254 _In_ ULONG_PTR BugCheckParameter2, 255 _In_ ULONG_PTR BugCheckParameter3, 256 _In_ ULONG_PTR BugCheckParameter4); 257 258 _IRQL_requires_max_(DISPATCH_LEVEL) 259 NTKERNELAPI 260 BOOLEAN 261 NTAPI 262 KeCancelTimer( 263 _Inout_ PKTIMER); 264 265 _IRQL_requires_min_(PASSIVE_LEVEL) 266 _IRQL_requires_max_(APC_LEVEL) 267 NTKERNELAPI 268 NTSTATUS 269 NTAPI 270 KeDelayExecutionThread( 271 _In_ KPROCESSOR_MODE WaitMode, 272 _In_ BOOLEAN Alertable, 273 _In_ PLARGE_INTEGER Interval); 274 275 _Must_inspect_result_ 276 NTKERNELAPI 277 BOOLEAN 278 NTAPI 279 KeDeregisterBugCheckCallback( 280 _Inout_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord); 281 282 _Acquires_lock_(_Global_critical_region_) 283 _IRQL_requires_max_(APC_LEVEL) 284 NTKERNELAPI 285 VOID 286 NTAPI 287 KeEnterCriticalRegion(VOID); 288 289 _IRQL_requires_max_(DISPATCH_LEVEL) 290 NTKERNELAPI 291 VOID 292 NTAPI 293 KeInitializeDeviceQueue( 294 _Out_ PKDEVICE_QUEUE DeviceQueue); 295 296 NTKERNELAPI 297 VOID 298 NTAPI 299 KeInitializeDpc( 300 _Out_ __drv_aliasesMem PRKDPC Dpc, 301 _In_ PKDEFERRED_ROUTINE DeferredRoutine, 302 _In_opt_ __drv_aliasesMem PVOID DeferredContext); 303 304 NTKERNELAPI 305 VOID 306 NTAPI 307 KeInitializeMutex( 308 _Out_ PRKMUTEX Mutex, 309 _In_ ULONG Level); 310 311 _IRQL_requires_max_(PASSIVE_LEVEL) 312 NTKERNELAPI 313 VOID 314 NTAPI 315 KeInitializeSemaphore( 316 _Out_ PRKSEMAPHORE Semaphore, 317 _In_ LONG Count, 318 _In_ LONG Limit); 319 320 _IRQL_requires_max_(DISPATCH_LEVEL) 321 NTKERNELAPI 322 VOID 323 NTAPI 324 KeInitializeTimer( 325 _Out_ PKTIMER Timer); 326 327 _IRQL_requires_max_(DISPATCH_LEVEL) 328 NTKERNELAPI 329 VOID 330 NTAPI 331 KeInitializeTimerEx( 332 _Out_ PKTIMER Timer, 333 _In_ TIMER_TYPE Type); 334 335 _IRQL_requires_(DISPATCH_LEVEL) 336 NTKERNELAPI 337 BOOLEAN 338 NTAPI 339 KeInsertByKeyDeviceQueue( 340 _Inout_ PKDEVICE_QUEUE DeviceQueue, 341 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry, 342 _In_ ULONG SortKey); 343 344 _IRQL_requires_(DISPATCH_LEVEL) 345 NTKERNELAPI 346 BOOLEAN 347 NTAPI 348 KeInsertDeviceQueue( 349 _Inout_ PKDEVICE_QUEUE DeviceQueue, 350 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); 351 352 NTKERNELAPI 353 BOOLEAN 354 NTAPI 355 KeInsertQueueDpc( 356 _Inout_ PRKDPC Dpc, 357 _In_opt_ PVOID SystemArgument1, 358 _In_opt_ PVOID SystemArgument2); 359 360 _Releases_lock_(_Global_critical_region_) 361 _IRQL_requires_max_(APC_LEVEL) 362 NTKERNELAPI 363 VOID 364 NTAPI 365 KeLeaveCriticalRegion(VOID); 366 367 NTHALAPI 368 LARGE_INTEGER 369 NTAPI 370 KeQueryPerformanceCounter( 371 _Out_opt_ PLARGE_INTEGER PerformanceFrequency); 372 373 _IRQL_requires_max_(PASSIVE_LEVEL) 374 NTKERNELAPI 375 KPRIORITY 376 NTAPI 377 KeQueryPriorityThread( 378 _In_ PRKTHREAD Thread); 379 380 NTKERNELAPI 381 ULONG 382 NTAPI 383 KeQueryTimeIncrement(VOID); 384 385 _IRQL_requires_max_(DISPATCH_LEVEL) 386 NTKERNELAPI 387 LONG 388 NTAPI 389 KeReadStateEvent( 390 _In_ PRKEVENT Event); 391 392 _IRQL_requires_max_(DISPATCH_LEVEL) 393 NTKERNELAPI 394 LONG 395 NTAPI 396 KeReadStateMutex( 397 _In_ PRKMUTEX Mutex); 398 399 _IRQL_requires_max_(DISPATCH_LEVEL) 400 NTKERNELAPI 401 LONG 402 NTAPI 403 KeReadStateSemaphore( 404 _In_ PRKSEMAPHORE Semaphore); 405 406 _IRQL_requires_max_(DISPATCH_LEVEL) 407 NTKERNELAPI 408 BOOLEAN 409 NTAPI 410 KeReadStateTimer( 411 _In_ PKTIMER Timer); 412 413 _Must_inspect_result_ 414 NTKERNELAPI 415 BOOLEAN 416 NTAPI 417 KeRegisterBugCheckCallback( 418 _Out_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord, 419 _In_ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine, 420 _In_reads_bytes_opt_(Length) PVOID Buffer, 421 _In_ ULONG Length, 422 _In_ PUCHAR Component); 423 424 _When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL)) 425 _When_(Wait==1, _IRQL_requires_max_(APC_LEVEL)) 426 NTKERNELAPI 427 LONG 428 NTAPI 429 KeReleaseMutex( 430 _Inout_ PRKMUTEX Mutex, 431 _In_ BOOLEAN Wait); 432 433 _When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL)) 434 _When_(Wait==1, _IRQL_requires_max_(APC_LEVEL)) 435 NTKERNELAPI 436 LONG 437 NTAPI 438 KeReleaseSemaphore( 439 _Inout_ PRKSEMAPHORE Semaphore, 440 _In_ KPRIORITY Increment, 441 _In_ LONG Adjustment, 442 _In_ _Literal_ BOOLEAN Wait); 443 444 _IRQL_requires_(DISPATCH_LEVEL) 445 NTKERNELAPI 446 PKDEVICE_QUEUE_ENTRY 447 NTAPI 448 KeRemoveByKeyDeviceQueue( 449 _Inout_ PKDEVICE_QUEUE DeviceQueue, 450 _In_ ULONG SortKey); 451 452 _IRQL_requires_(DISPATCH_LEVEL) 453 NTKERNELAPI 454 PKDEVICE_QUEUE_ENTRY 455 NTAPI 456 KeRemoveDeviceQueue( 457 _Inout_ PKDEVICE_QUEUE DeviceQueue); 458 459 _IRQL_requires_max_(DISPATCH_LEVEL) 460 NTKERNELAPI 461 BOOLEAN 462 NTAPI 463 KeRemoveEntryDeviceQueue( 464 _Inout_ PKDEVICE_QUEUE DeviceQueue, 465 _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); 466 467 _IRQL_requires_max_(HIGH_LEVEL) 468 NTKERNELAPI 469 BOOLEAN 470 NTAPI 471 KeRemoveQueueDpc( 472 _Inout_ PRKDPC Dpc); 473 474 _IRQL_requires_max_(DISPATCH_LEVEL) 475 NTKERNELAPI 476 LONG 477 NTAPI 478 KeResetEvent( 479 _Inout_ PRKEVENT Event); 480 481 _When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL)) 482 _When_(Wait==1, _IRQL_requires_max_(APC_LEVEL)) 483 NTKERNELAPI 484 LONG 485 NTAPI 486 KeSetEvent( 487 _Inout_ PRKEVENT Event, 488 _In_ KPRIORITY Increment, 489 _In_ _Literal_ BOOLEAN Wait); 490 491 NTKERNELAPI 492 VOID 493 NTAPI 494 KeSetImportanceDpc( 495 _Inout_ PRKDPC Dpc, 496 _In_ KDPC_IMPORTANCE Importance); 497 498 _IRQL_requires_min_(PASSIVE_LEVEL) 499 _IRQL_requires_max_(DISPATCH_LEVEL) 500 NTKERNELAPI 501 KPRIORITY 502 NTAPI 503 KeSetPriorityThread( 504 _Inout_ PKTHREAD Thread, 505 _In_ KPRIORITY Priority); 506 507 _IRQL_requires_max_(DISPATCH_LEVEL) 508 NTKERNELAPI 509 BOOLEAN 510 NTAPI 511 KeSetTimer( 512 _Inout_ PKTIMER Timer, 513 _In_ LARGE_INTEGER DueTime, 514 _In_opt_ PKDPC Dpc); 515 516 _IRQL_requires_max_(DISPATCH_LEVEL) 517 NTKERNELAPI 518 BOOLEAN 519 NTAPI 520 KeSetTimerEx( 521 _Inout_ PKTIMER Timer, 522 _In_ LARGE_INTEGER DueTime, 523 _In_ LONG Period OPTIONAL, 524 _In_opt_ PKDPC Dpc); 525 526 NTHALAPI 527 VOID 528 NTAPI 529 KeStallExecutionProcessor( 530 _In_ ULONG MicroSeconds); 531 532 _IRQL_requires_max_(HIGH_LEVEL) 533 NTKERNELAPI 534 BOOLEAN 535 NTAPI 536 KeSynchronizeExecution( 537 _Inout_ PKINTERRUPT Interrupt, 538 _In_ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, 539 _In_opt_ __drv_aliasesMem PVOID SynchronizeContext); 540 541 _IRQL_requires_min_(PASSIVE_LEVEL) 542 _When_((Timeout==NULL || Timeout->QuadPart!=0), _IRQL_requires_max_(APC_LEVEL)) 543 _When_((Timeout!=NULL && Timeout->QuadPart==0), _IRQL_requires_max_(DISPATCH_LEVEL)) 544 NTKERNELAPI 545 NTSTATUS 546 NTAPI 547 KeWaitForMultipleObjects( 548 _In_ ULONG Count, 549 _In_reads_(Count) PVOID Object[], 550 _In_ __drv_strictTypeMatch(__drv_typeConst) WAIT_TYPE WaitType, 551 _In_ __drv_strictTypeMatch(__drv_typeCond) KWAIT_REASON WaitReason, 552 _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst) KPROCESSOR_MODE WaitMode, 553 _In_ BOOLEAN Alertable, 554 _In_opt_ PLARGE_INTEGER Timeout, 555 _Out_opt_ PKWAIT_BLOCK WaitBlockArray); 556 557 #define KeWaitForMutexObject KeWaitForSingleObject 558 559 _IRQL_requires_min_(PASSIVE_LEVEL) 560 _When_((Timeout==NULL || Timeout->QuadPart!=0), _IRQL_requires_max_(APC_LEVEL)) 561 _When_((Timeout!=NULL && Timeout->QuadPart==0), _IRQL_requires_max_(DISPATCH_LEVEL)) 562 NTKERNELAPI 563 NTSTATUS 564 NTAPI 565 KeWaitForSingleObject( 566 _In_ _Points_to_data_ PVOID Object, 567 _In_ __drv_strictTypeMatch(__drv_typeCond) KWAIT_REASON WaitReason, 568 _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst) KPROCESSOR_MODE WaitMode, 569 _In_ BOOLEAN Alertable, 570 _In_opt_ PLARGE_INTEGER Timeout); 571 $endif (_WDMDDK_) 572 $if (_NTIFS_) 573 574 NTKERNELAPI 575 VOID 576 NTAPI 577 KeInitializeMutant( 578 _Out_ PRKMUTANT Mutant, 579 _In_ BOOLEAN InitialOwner); 580 581 _IRQL_requires_max_(DISPATCH_LEVEL) 582 NTKERNELAPI 583 LONG 584 NTAPI 585 KeReadStateMutant( 586 _In_ PRKMUTANT Mutant); 587 588 _When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL)) 589 _When_(Wait==1, _IRQL_requires_max_(APC_LEVEL)) 590 NTKERNELAPI 591 LONG 592 NTAPI 593 KeReleaseMutant( 594 _Inout_ PRKMUTANT Mutant, 595 _In_ KPRIORITY Increment, 596 _In_ BOOLEAN Abandoned, 597 _In_ BOOLEAN Wait); 598 599 NTKERNELAPI 600 VOID 601 NTAPI 602 KeInitializeQueue( 603 _Out_ PRKQUEUE Queue, 604 _In_ ULONG Count); 605 606 _IRQL_requires_max_(DISPATCH_LEVEL) 607 NTKERNELAPI 608 LONG 609 NTAPI 610 KeReadStateQueue( 611 _In_ PRKQUEUE Queue); 612 613 _IRQL_requires_min_(PASSIVE_LEVEL) 614 _IRQL_requires_max_(DISPATCH_LEVEL) 615 NTKERNELAPI 616 LONG 617 NTAPI 618 KeInsertQueue( 619 _Inout_ PRKQUEUE Queue, 620 _Inout_ PLIST_ENTRY Entry); 621 622 _IRQL_requires_min_(PASSIVE_LEVEL) 623 _IRQL_requires_max_(DISPATCH_LEVEL) 624 NTKERNELAPI 625 LONG 626 NTAPI 627 KeInsertHeadQueue( 628 _Inout_ PRKQUEUE Queue, 629 _Inout_ PLIST_ENTRY Entry); 630 631 _IRQL_requires_min_(PASSIVE_LEVEL) 632 _When_((Timeout==NULL || Timeout->QuadPart!=0), _IRQL_requires_max_(APC_LEVEL)) 633 _When_((Timeout!=NULL && Timeout->QuadPart==0), _IRQL_requires_max_(DISPATCH_LEVEL)) 634 NTKERNELAPI 635 PLIST_ENTRY 636 NTAPI 637 KeRemoveQueue( 638 _Inout_ PRKQUEUE Queue, 639 _In_ KPROCESSOR_MODE WaitMode, 640 _In_opt_ PLARGE_INTEGER Timeout); 641 642 _IRQL_requires_max_(APC_LEVEL) 643 NTKERNELAPI 644 VOID 645 NTAPI 646 KeAttachProcess( 647 _Inout_ PKPROCESS Process); 648 649 _IRQL_requires_max_(APC_LEVEL) 650 NTKERNELAPI 651 VOID 652 NTAPI 653 KeDetachProcess(VOID); 654 655 _IRQL_requires_max_(DISPATCH_LEVEL) 656 NTKERNELAPI 657 PLIST_ENTRY 658 NTAPI 659 KeRundownQueue( 660 _Inout_ PRKQUEUE Queue); 661 662 _IRQL_requires_max_(APC_LEVEL) 663 NTKERNELAPI 664 VOID 665 NTAPI 666 KeStackAttachProcess( 667 _Inout_ PKPROCESS Process, 668 _Out_ PKAPC_STATE ApcState); 669 670 _IRQL_requires_max_(APC_LEVEL) 671 NTKERNELAPI 672 VOID 673 NTAPI 674 KeUnstackDetachProcess( 675 _In_ PKAPC_STATE ApcState); 676 677 _IRQL_requires_min_(PASSIVE_LEVEL) 678 _IRQL_requires_max_(DISPATCH_LEVEL) 679 NTKERNELAPI 680 UCHAR 681 NTAPI 682 KeSetIdealProcessorThread( 683 _Inout_ PKTHREAD Thread, 684 _In_ UCHAR Processor); 685 686 _IRQL_requires_max_(APC_LEVEL) 687 NTKERNELAPI 688 BOOLEAN 689 NTAPI 690 KeSetKernelStackSwapEnable( 691 _In_ BOOLEAN Enable); 692 693 #if defined(_X86_) 694 _Requires_lock_not_held_(*SpinLock) 695 _Acquires_lock_(*SpinLock) 696 _IRQL_raises_(SYNCH_LEVEL) 697 _IRQL_saves_ 698 NTHALAPI 699 KIRQL 700 FASTCALL 701 KeAcquireSpinLockRaiseToSynch( 702 _Inout_ PKSPIN_LOCK SpinLock); 703 #else 704 _Requires_lock_not_held_(*SpinLock) 705 _Acquires_lock_(*SpinLock) 706 _IRQL_raises_(SYNCH_LEVEL) 707 _IRQL_saves_ 708 NTKERNELAPI 709 KIRQL 710 KeAcquireSpinLockRaiseToSynch( 711 _Inout_ PKSPIN_LOCK SpinLock); 712 #endif 713 $endif (_NTIFS_) 714 715 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 716 717 #if (NTDDI_VERSION >= NTDDI_WINXP) 718 719 $if (_WDMDDK_) 720 _Requires_lock_not_held_(*LockHandle) 721 _Acquires_lock_(*LockHandle) 722 _Post_same_lock_(*SpinLock, *LockHandle) 723 _IRQL_requires_max_(DISPATCH_LEVEL) 724 _IRQL_saves_global_(QueuedSpinLock,LockHandle) 725 _IRQL_raises_(DISPATCH_LEVEL) 726 _DECL_HAL_KE_IMPORT 727 VOID 728 FASTCALL 729 KeAcquireInStackQueuedSpinLock( 730 _Inout_ PKSPIN_LOCK SpinLock, 731 _Out_ PKLOCK_QUEUE_HANDLE LockHandle); 732 733 _Requires_lock_not_held_(*LockHandle) 734 _Acquires_lock_(*LockHandle) 735 _Post_same_lock_(*SpinLock, *LockHandle) 736 _IRQL_requires_min_(DISPATCH_LEVEL) 737 NTKERNELAPI 738 VOID 739 FASTCALL 740 KeAcquireInStackQueuedSpinLockAtDpcLevel( 741 _Inout_ PKSPIN_LOCK SpinLock, 742 _Out_ PKLOCK_QUEUE_HANDLE LockHandle); 743 744 _Requires_lock_not_held_(*Interrupt->ActualLock) 745 _Acquires_lock_(*Interrupt->ActualLock) 746 _IRQL_requires_max_(HIGH_LEVEL) 747 _IRQL_saves_ 748 _IRQL_raises_(HIGH_LEVEL) 749 NTKERNELAPI 750 KIRQL 751 NTAPI 752 KeAcquireInterruptSpinLock( 753 _Inout_ PKINTERRUPT Interrupt); 754 755 _IRQL_requires_min_(PASSIVE_LEVEL) 756 _IRQL_requires_max_(DISPATCH_LEVEL) 757 NTKERNELAPI 758 BOOLEAN 759 NTAPI 760 KeAreApcsDisabled(VOID); 761 762 NTKERNELAPI 763 ULONG 764 NTAPI 765 KeGetRecommendedSharedDataAlignment(VOID); 766 767 _IRQL_requires_max_(PASSIVE_LEVEL) 768 NTKERNELAPI 769 ULONG 770 NTAPI 771 KeQueryRuntimeThread( 772 _In_ PKTHREAD Thread, 773 _Out_ PULONG UserTime); 774 775 _Requires_lock_held_(*LockHandle) 776 _Releases_lock_(*LockHandle) 777 _IRQL_requires_(DISPATCH_LEVEL) 778 NTKERNELAPI 779 VOID 780 FASTCALL 781 KeReleaseInStackQueuedSpinLockFromDpcLevel( 782 _In_ PKLOCK_QUEUE_HANDLE LockHandle); 783 784 _Requires_lock_held_(*Interrupt->ActualLock) 785 _Releases_lock_(*Interrupt->ActualLock) 786 _IRQL_requires_(HIGH_LEVEL) 787 NTKERNELAPI 788 VOID 789 NTAPI 790 KeReleaseInterruptSpinLock( 791 _Inout_ PKINTERRUPT Interrupt, 792 _In_ _IRQL_restores_ KIRQL OldIrql); 793 794 _IRQL_requires_(DISPATCH_LEVEL) 795 NTKERNELAPI 796 PKDEVICE_QUEUE_ENTRY 797 NTAPI 798 KeRemoveByKeyDeviceQueueIfBusy( 799 _Inout_ PKDEVICE_QUEUE DeviceQueue, 800 _In_ ULONG SortKey); 801 802 _Requires_lock_held_(*LockHandle) 803 _Releases_lock_(*LockHandle) 804 _IRQL_requires_(DISPATCH_LEVEL) 805 _IRQL_restores_global_(QueuedSpinLock,LockHandle) 806 _DECL_HAL_KE_IMPORT 807 VOID 808 FASTCALL 809 KeReleaseInStackQueuedSpinLock( 810 _In_ PKLOCK_QUEUE_HANDLE LockHandle); 811 $endif (_WDMDDK_) 812 $if (_NTDDK_) 813 _IRQL_requires_min_(PASSIVE_LEVEL) 814 _IRQL_requires_max_(DISPATCH_LEVEL) 815 NTKERNELAPI 816 BOOLEAN 817 NTAPI 818 KeAreApcsDisabled(VOID); 819 $endif (_NTDDK_) 820 $if (_NTIFS_) 821 822 _Requires_lock_not_held_(Number) 823 _Acquires_lock_(Number) 824 _IRQL_raises_(DISPATCH_LEVEL) 825 _DECL_HAL_KE_IMPORT 826 KIRQL 827 FASTCALL 828 KeAcquireQueuedSpinLock( 829 _In_ KSPIN_LOCK_QUEUE_NUMBER Number); 830 831 _Requires_lock_held_(Number) 832 _Releases_lock_(Number) 833 _DECL_HAL_KE_IMPORT 834 VOID 835 FASTCALL 836 KeReleaseQueuedSpinLock( 837 _In_ KSPIN_LOCK_QUEUE_NUMBER Number, 838 _In_ KIRQL OldIrql); 839 840 _Must_inspect_result_ 841 _Post_satisfies_(return == 1 || return == 0) 842 _DECL_HAL_KE_IMPORT 843 LOGICAL 844 FASTCALL 845 KeTryToAcquireQueuedSpinLock( 846 _In_ KSPIN_LOCK_QUEUE_NUMBER Number, 847 _Out_ _At_(*OldIrql, _IRQL_saves_) PKIRQL OldIrql); 848 $endif (_NTIFS_) 849 850 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 851 852 $if (_WDMDDK_) 853 #if (NTDDI_VERSION >= NTDDI_WINXPSP1) 854 855 _Must_inspect_result_ 856 NTKERNELAPI 857 BOOLEAN 858 NTAPI 859 KeDeregisterBugCheckReasonCallback( 860 _Inout_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord); 861 862 _Must_inspect_result_ 863 NTKERNELAPI 864 BOOLEAN 865 NTAPI 866 KeRegisterBugCheckReasonCallback( 867 _Out_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord, 868 _In_ PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine, 869 _In_ KBUGCHECK_CALLBACK_REASON Reason, 870 _In_ PUCHAR Component); 871 872 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */ 873 874 #if (NTDDI_VERSION >= NTDDI_WINXPSP2) 875 _IRQL_requires_max_(APC_LEVEL) 876 NTKERNELAPI 877 VOID 878 NTAPI 879 KeFlushQueuedDpcs(VOID); 880 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */ 881 $endif (_WDMDDK_) 882 $if (_WDMDDK_ || _NTDDK_) 883 #if (NTDDI_VERSION >= NTDDI_WS03) 884 $endif (_WDMDDK_ || _NTDDK_) 885 886 $if (_WDMDDK_) 887 _IRQL_requires_max_(APC_LEVEL) 888 NTKERNELAPI 889 PVOID 890 NTAPI 891 KeRegisterNmiCallback( 892 _In_ PNMI_CALLBACK CallbackRoutine, 893 _In_opt_ PVOID Context); 894 895 _IRQL_requires_max_(APC_LEVEL) 896 NTKERNELAPI 897 NTSTATUS 898 NTAPI 899 KeDeregisterNmiCallback( 900 _In_ PVOID Handle); 901 902 NTKERNELAPI 903 VOID 904 NTAPI 905 KeInitializeThreadedDpc( 906 _Out_ PRKDPC Dpc, 907 _In_ PKDEFERRED_ROUTINE DeferredRoutine, 908 _In_opt_ PVOID DeferredContext); 909 910 _IRQL_requires_min_(PASSIVE_LEVEL) 911 _IRQL_requires_max_(IPI_LEVEL-1) 912 NTKERNELAPI 913 ULONG_PTR 914 NTAPI 915 KeIpiGenericCall( 916 _In_ PKIPI_BROADCAST_WORKER BroadcastFunction, 917 _In_ ULONG_PTR Context); 918 919 _Requires_lock_not_held_(*SpinLock) 920 _Acquires_lock_(*SpinLock) 921 _IRQL_requires_max_(DISPATCH_LEVEL) 922 _IRQL_saves_ 923 NTKERNELAPI 924 KIRQL 925 FASTCALL 926 KeAcquireSpinLockForDpc( 927 _Inout_ PKSPIN_LOCK SpinLock); 928 929 _Requires_lock_held_(*SpinLock) 930 _Releases_lock_(*SpinLock) 931 _IRQL_requires_(DISPATCH_LEVEL) 932 NTKERNELAPI 933 VOID 934 FASTCALL 935 KeReleaseSpinLockForDpc( 936 _Inout_ PKSPIN_LOCK SpinLock, 937 _In_ _IRQL_restores_ KIRQL OldIrql); 938 939 _Must_inspect_result_ 940 NTKERNELAPI 941 BOOLEAN 942 FASTCALL 943 KeTestSpinLock( 944 _In_ PKSPIN_LOCK SpinLock); 945 $endif (_WDMDDK_) 946 947 $if (_NTDDK_) 948 NTKERNELAPI 949 BOOLEAN 950 NTAPI 951 KeInvalidateAllCaches(VOID); 952 $endif (_NTDDK_) 953 $if (_WDMDDK_ || _NTDDK_) 954 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ 955 $endif (_WDMDDK_ || _NTDDK_) 956 $if (_WDMDDK_ || _NTDDK_) 957 #if (NTDDI_VERSION >= NTDDI_WS03SP1) 958 $endif (_WDMDDK_ || _NTDDK_) 959 960 $if (_WDMDDK_) 961 _Must_inspect_result_ 962 _IRQL_requires_min_(DISPATCH_LEVEL) 963 _Post_satisfies_(return == 1 || return == 0) 964 NTKERNELAPI 965 BOOLEAN 966 FASTCALL 967 KeTryToAcquireSpinLockAtDpcLevel( 968 _Inout_ _Requires_lock_not_held_(*_Curr_) 969 _When_(return!=0, _Acquires_lock_(*_Curr_)) 970 PKSPIN_LOCK SpinLock); 971 972 _IRQL_requires_min_(PASSIVE_LEVEL) 973 _IRQL_requires_max_(DISPATCH_LEVEL) 974 NTKERNELAPI 975 BOOLEAN 976 NTAPI 977 KeAreAllApcsDisabled(VOID); 978 979 _Acquires_lock_(_Global_critical_region_) 980 _Requires_lock_not_held_(*Mutex) 981 _Acquires_lock_(*Mutex) 982 _IRQL_requires_max_(APC_LEVEL) 983 _IRQL_requires_min_(PASSIVE_LEVEL) 984 NTKERNELAPI 985 VOID 986 FASTCALL 987 KeAcquireGuardedMutex( 988 _Inout_ PKGUARDED_MUTEX GuardedMutex); 989 990 _Requires_lock_not_held_(*FastMutex) 991 _Acquires_lock_(*FastMutex) 992 _IRQL_requires_max_(APC_LEVEL) 993 _IRQL_requires_min_(PASSIVE_LEVEL) 994 NTKERNELAPI 995 VOID 996 FASTCALL 997 KeAcquireGuardedMutexUnsafe( 998 _Inout_ PKGUARDED_MUTEX GuardedMutex); 999 1000 _Acquires_lock_(_Global_critical_region_) 1001 _IRQL_requires_max_(APC_LEVEL) 1002 NTKERNELAPI 1003 VOID 1004 NTAPI 1005 KeEnterGuardedRegion(VOID); 1006 1007 _Releases_lock_(_Global_critical_region_) 1008 _IRQL_requires_max_(APC_LEVEL) 1009 NTKERNELAPI 1010 VOID 1011 NTAPI 1012 KeLeaveGuardedRegion(VOID); 1013 1014 _IRQL_requires_max_(APC_LEVEL) 1015 _IRQL_requires_min_(PASSIVE_LEVEL) 1016 NTKERNELAPI 1017 VOID 1018 FASTCALL 1019 KeInitializeGuardedMutex( 1020 _Out_ PKGUARDED_MUTEX GuardedMutex); 1021 1022 _Requires_lock_held_(*FastMutex) 1023 _Releases_lock_(*FastMutex) 1024 _IRQL_requires_max_(APC_LEVEL) 1025 NTKERNELAPI 1026 VOID 1027 FASTCALL 1028 KeReleaseGuardedMutexUnsafe( 1029 _Inout_ PKGUARDED_MUTEX GuardedMutex); 1030 1031 _Releases_lock_(_Global_critical_region_) 1032 _Requires_lock_held_(*Mutex) 1033 _Releases_lock_(*Mutex) 1034 _IRQL_requires_max_(APC_LEVEL) 1035 NTKERNELAPI 1036 VOID 1037 FASTCALL 1038 KeReleaseGuardedMutex( 1039 _Inout_ PKGUARDED_MUTEX GuardedMutex); 1040 1041 _Must_inspect_result_ 1042 _Success_(return != FALSE) 1043 _IRQL_requires_max_(APC_LEVEL) 1044 _Post_satisfies_(return == 1 || return == 0) 1045 NTKERNELAPI 1046 BOOLEAN 1047 FASTCALL 1048 KeTryToAcquireGuardedMutex( 1049 _When_ (return, _Requires_lock_not_held_(*_Curr_) _Acquires_exclusive_lock_(*_Curr_)) _Acquires_lock_(_Global_critical_region_) 1050 _Inout_ PKGUARDED_MUTEX GuardedMutex); 1051 $endif (_WDMDDK_) 1052 $if (_NTDDK_) 1053 _Must_inspect_result_ 1054 _IRQL_requires_max_(APC_LEVEL) 1055 NTKERNELAPI 1056 NTSTATUS 1057 NTAPI 1058 KeExpandKernelStackAndCallout( 1059 _In_ PEXPAND_STACK_CALLOUT Callout, 1060 _In_opt_ PVOID Parameter, 1061 _In_ SIZE_T Size); 1062 1063 _Acquires_lock_(_Global_critical_region_) 1064 _IRQL_requires_max_(APC_LEVEL) 1065 NTKERNELAPI 1066 VOID 1067 NTAPI 1068 KeEnterGuardedRegion(VOID); 1069 1070 _Releases_lock_(_Global_critical_region_) 1071 _IRQL_requires_max_(APC_LEVEL) 1072 NTKERNELAPI 1073 VOID 1074 NTAPI 1075 KeLeaveGuardedRegion(VOID); 1076 $endif (_NTDDK_) 1077 $if (_WDMDDK_ || _NTDDK_) 1078 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ 1079 $endif (_WDMDDK_ || _NTDDK_) 1080 1081 #if (NTDDI_VERSION >= NTDDI_VISTA) 1082 $if (_WDMDDK_) 1083 _Requires_lock_not_held_(*LockHandle) 1084 _Acquires_lock_(*LockHandle) 1085 _Post_same_lock_(*SpinLock, *LockHandle) 1086 _IRQL_requires_max_(DISPATCH_LEVEL) 1087 _IRQL_saves_global_(QueuedSpinLock,LockHandle) 1088 NTKERNELAPI 1089 VOID 1090 FASTCALL 1091 KeAcquireInStackQueuedSpinLockForDpc( 1092 _Inout_ PKSPIN_LOCK SpinLock, 1093 _Out_ PKLOCK_QUEUE_HANDLE LockHandle); 1094 1095 _Requires_lock_held_(*LockHandle) 1096 _Releases_lock_(*LockHandle) 1097 _IRQL_requires_(DISPATCH_LEVEL) 1098 _IRQL_restores_global_(QueuedSpinLock,LockHandle) 1099 NTKERNELAPI 1100 VOID 1101 FASTCALL 1102 KeReleaseInStackQueuedSpinLockForDpc( 1103 _In_ PKLOCK_QUEUE_HANDLE LockHandle); 1104 1105 _IRQL_requires_(DISPATCH_LEVEL) 1106 NTKERNELAPI 1107 NTSTATUS 1108 NTAPI 1109 KeQueryDpcWatchdogInformation( 1110 _Out_ PKDPC_WATCHDOG_INFORMATION WatchdogInformation); 1111 $endif (_WDMDDK_) 1112 $if (_WDMDDK_ || _NTDDK_) 1113 #if defined(SINGLE_GROUP_LEGACY_API) 1114 $endif (_WDMDDK_ || _NTDDK_) 1115 1116 $if (_WDMDDK_) 1117 _IRQL_requires_min_(PASSIVE_LEVEL) 1118 _IRQL_requires_max_(APC_LEVEL) 1119 NTKERNELAPI 1120 KAFFINITY 1121 NTAPI 1122 KeSetSystemAffinityThreadEx( 1123 _In_ KAFFINITY Affinity); 1124 1125 _IRQL_requires_min_(PASSIVE_LEVEL) 1126 _IRQL_requires_max_(APC_LEVEL) 1127 NTKERNELAPI 1128 VOID 1129 NTAPI 1130 KeRevertToUserAffinityThreadEx( 1131 _In_ KAFFINITY Affinity); 1132 1133 NTKRNLVISTAAPI 1134 ULONG 1135 NTAPI 1136 KeQueryActiveProcessorCount( 1137 _Out_opt_ PKAFFINITY ActiveProcessors); 1138 1139 NTKERNELAPI 1140 ULONG 1141 NTAPI 1142 KeQueryMaximumProcessorCount(VOID); 1143 $endif (_WDMDDK_) 1144 $if (_NTDDK_) 1145 NTKRNLVISTAAPI 1146 ULONG 1147 NTAPI 1148 KeQueryActiveProcessorCount( 1149 _Out_opt_ PKAFFINITY ActiveProcessors); 1150 1151 NTKERNELAPI 1152 ULONG 1153 NTAPI 1154 KeQueryMaximumProcessorCount(VOID); 1155 $endif (_NTDDK_) 1156 $if (_WDMDDK_ || _NTDDK_) 1157 #endif /* SINGLE_GROUP_LEGACY_API */ 1158 $endif (_WDMDDK_ || _NTDDK_) 1159 $if (_NTIFS_) 1160 _IRQL_requires_max_(DISPATCH_LEVEL) 1161 NTKERNELAPI 1162 VOID 1163 KeQueryOwnerMutant( 1164 _In_ PKMUTANT Mutant, 1165 _Out_ PCLIENT_ID ClientId); 1166 1167 _IRQL_requires_min_(PASSIVE_LEVEL) 1168 _When_((Timeout==NULL || *Timeout!=0), _IRQL_requires_max_(APC_LEVEL)) 1169 _When_((Timeout!=NULL && *Timeout==0), _IRQL_requires_max_(DISPATCH_LEVEL)) 1170 NTKERNELAPI 1171 ULONG 1172 NTAPI 1173 KeRemoveQueueEx( 1174 _Inout_ PKQUEUE Queue, 1175 _In_ KPROCESSOR_MODE WaitMode, 1176 _In_ BOOLEAN Alertable, 1177 _In_opt_ PLARGE_INTEGER Timeout, 1178 _Out_writes_to_(Count, return) PLIST_ENTRY *EntryArray, 1179 _In_ ULONG Count); 1180 $endif (_NTIFS_) 1181 1182 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 1183 1184 $if (_WDMDDK_) 1185 #if (NTDDI_VERSION >= NTDDI_WS08) 1186 1187 _IRQL_requires_max_(APC_LEVEL) 1188 PVOID 1189 NTAPI 1190 KeRegisterProcessorChangeCallback( 1191 _In_ PPROCESSOR_CALLBACK_FUNCTION CallbackFunction, 1192 _In_opt_ PVOID CallbackContext, 1193 _In_ ULONG Flags); 1194 1195 _IRQL_requires_max_(APC_LEVEL) 1196 VOID 1197 NTAPI 1198 KeDeregisterProcessorChangeCallback( 1199 _In_ PVOID CallbackHandle); 1200 1201 #endif /* (NTDDI_VERSION >= NTDDI_WS08) */ 1202 $endif (_WDMDDK_) 1203 $if (_WDMDDK_ || _NTDDK_) 1204 #if (NTDDI_VERSION >= NTDDI_WIN7) 1205 1206 NTKERNELAPI 1207 ULONG 1208 NTAPI 1209 KeQueryActiveProcessorCountEx( 1210 _In_ USHORT GroupNumber); 1211 1212 NTKERNELAPI 1213 ULONG 1214 NTAPI 1215 KeQueryMaximumProcessorCountEx( 1216 _In_ USHORT GroupNumber); 1217 1218 NTKERNELAPI 1219 USHORT 1220 NTAPI 1221 KeQueryActiveGroupCount(VOID); 1222 1223 NTKERNELAPI 1224 USHORT 1225 NTAPI 1226 KeQueryMaximumGroupCount(VOID); 1227 1228 NTKERNELAPI 1229 KAFFINITY 1230 NTAPI 1231 KeQueryGroupAffinity( 1232 _In_ USHORT GroupNumber); 1233 1234 NTKERNELAPI 1235 ULONG 1236 NTAPI 1237 KeGetCurrentProcessorNumberEx( 1238 _Out_opt_ PPROCESSOR_NUMBER ProcNumber); 1239 1240 NTKERNELAPI 1241 VOID 1242 NTAPI 1243 KeQueryNodeActiveAffinity( 1244 _In_ USHORT NodeNumber, 1245 _Out_opt_ PGROUP_AFFINITY Affinity, 1246 _Out_opt_ PUSHORT Count); 1247 1248 NTKERNELAPI 1249 USHORT 1250 NTAPI 1251 KeQueryNodeMaximumProcessorCount( 1252 _In_ USHORT NodeNumber); 1253 1254 NTKRNLVISTAAPI 1255 USHORT 1256 NTAPI 1257 KeQueryHighestNodeNumber(VOID); 1258 1259 NTKRNLVISTAAPI 1260 USHORT 1261 NTAPI 1262 KeGetCurrentNodeNumber(VOID); 1263 1264 _IRQL_requires_max_(DISPATCH_LEVEL) 1265 NTKERNELAPI 1266 NTSTATUS 1267 NTAPI 1268 KeQueryLogicalProcessorRelationship( 1269 _In_opt_ PPROCESSOR_NUMBER ProcessorNumber OPTIONAL, 1270 _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType, 1271 _Out_writes_bytes_opt_(*Length) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information, 1272 _Inout_ PULONG Length); 1273 1274 $endif (_WDMDDK_ || _NTDDK_) 1275 1276 $if (_WDMDDK_) 1277 _IRQL_requires_max_(DISPATCH_LEVEL) 1278 _IRQL_requires_min_(PASSIVE_LEVEL) 1279 _IRQL_requires_same_ 1280 ULONG64 1281 NTAPI 1282 KeQueryTotalCycleTimeProcess( 1283 _Inout_ PKPROCESS Process, 1284 _Out_ PULONG64 CycleTimeStamp); 1285 1286 _IRQL_requires_max_(APC_LEVEL) 1287 _IRQL_requires_min_(PASSIVE_LEVEL) 1288 _IRQL_requires_same_ 1289 ULONG64 1290 NTAPI 1291 KeQueryTotalCycleTimeThread( 1292 _Inout_ PKTHREAD Thread, 1293 _Out_ PULONG64 CycleTimeStamp); 1294 1295 _Must_inspect_result_ 1296 NTKERNELAPI 1297 NTSTATUS 1298 NTAPI 1299 KeSetTargetProcessorDpcEx( 1300 _Inout_ PKDPC Dpc, 1301 _In_ PPROCESSOR_NUMBER ProcNumber); 1302 1303 _IRQL_requires_min_(PASSIVE_LEVEL) 1304 _IRQL_requires_max_(APC_LEVEL) 1305 NTKERNELAPI 1306 VOID 1307 NTAPI 1308 KeSetSystemGroupAffinityThread( 1309 _In_ PGROUP_AFFINITY Affinity, 1310 _Out_opt_ PGROUP_AFFINITY PreviousAffinity); 1311 1312 _IRQL_requires_min_(PASSIVE_LEVEL) 1313 _IRQL_requires_max_(APC_LEVEL) 1314 NTKERNELAPI 1315 VOID 1316 NTAPI 1317 KeRevertToUserGroupAffinityThread( 1318 _In_ PGROUP_AFFINITY PreviousAffinity); 1319 1320 _IRQL_requires_max_(DISPATCH_LEVEL) 1321 NTKRNLVISTAAPI 1322 BOOLEAN 1323 NTAPI 1324 KeSetCoalescableTimer( 1325 _Inout_ PKTIMER Timer, 1326 _In_ LARGE_INTEGER DueTime, 1327 _In_ ULONG Period, 1328 _In_ ULONG TolerableDelay, 1329 _In_opt_ PKDPC Dpc); 1330 1331 NTKERNELAPI 1332 ULONGLONG 1333 NTAPI 1334 KeQueryUnbiasedInterruptTime(VOID); 1335 1336 _Must_inspect_result_ 1337 _IRQL_requires_max_(DISPATCH_LEVEL) 1338 _Ret_range_(<=, 0) 1339 _When_(return==0, _Kernel_float_saved_) 1340 NTKERNELAPI 1341 NTSTATUS 1342 NTAPI 1343 KeSaveExtendedProcessorState( 1344 _In_ ULONG64 Mask, 1345 _Out_ _Requires_lock_not_held_(*_Curr_) 1346 _When_(return==0, _Acquires_lock_(*_Curr_)) 1347 PXSTATE_SAVE XStateSave); 1348 1349 _Kernel_float_restored_ 1350 NTKERNELAPI 1351 VOID 1352 NTAPI 1353 KeRestoreExtendedProcessorState( 1354 _In_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) 1355 PXSTATE_SAVE XStateSave); 1356 1357 NTSTATUS 1358 NTAPI 1359 KeGetProcessorNumberFromIndex( 1360 _In_ ULONG ProcIndex, 1361 _Out_ PPROCESSOR_NUMBER ProcNumber); 1362 1363 ULONG 1364 NTAPI 1365 KeGetProcessorIndexFromNumber( 1366 _In_ PPROCESSOR_NUMBER ProcNumber); 1367 $endif (_WDMDDK_) 1368 $if (_NTDDK_) 1369 _IRQL_requires_max_(APC_LEVEL) 1370 NTKERNELAPI 1371 NTSTATUS 1372 NTAPI 1373 KeSetHardwareCounterConfiguration( 1374 _In_reads_(Count) PHARDWARE_COUNTER CounterArray, 1375 _In_ ULONG Count); 1376 1377 _IRQL_requires_max_(APC_LEVEL) 1378 NTKERNELAPI 1379 NTSTATUS 1380 NTAPI 1381 KeQueryHardwareCounterConfiguration( 1382 _Out_writes_to_(MaximumCount, *Count) PHARDWARE_COUNTER CounterArray, 1383 _In_ ULONG MaximumCount, 1384 _Out_ PULONG Count); 1385 $endif (_NTDDK_) 1386 $if (_WDMDDK_ || _NTDDK_) 1387 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 1388 $endif (_WDMDDK_ || _NTDDK_) 1389 $if (_WDMDDK_) 1390 #if !defined(_IA64_) 1391 NTHALAPI 1392 VOID 1393 NTAPI 1394 KeFlushWriteBuffer(VOID); 1395 #endif 1396 1397 /* VOID 1398 * KeInitializeCallbackRecord( 1399 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord) 1400 */ 1401 #define KeInitializeCallbackRecord(CallbackRecord) \ 1402 (CallbackRecord)->State = BufferEmpty; 1403 1404 #if defined(_PREFAST_) 1405 1406 void __PREfastPagedCode(void); 1407 void __PREfastPagedCodeLocked(void); 1408 #define PAGED_CODE() __PREfastPagedCode(); 1409 #define PAGED_CODE_LOCKED() __PREfastPagedCodeLocked(); 1410 1411 #elif DBG 1412 1413 #if (NTDDI_VERSION >= NTDDI_VISTA) 1414 #define PAGED_ASSERT( exp ) NT_ASSERT( exp ) 1415 #else 1416 #define PAGED_ASSERT( exp ) ASSERT( exp ) 1417 #endif 1418 1419 #define PAGED_CODE() { \ 1420 if (KeGetCurrentIrql() > APC_LEVEL) { \ 1421 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \ 1422 PAGED_ASSERT(FALSE); \ 1423 } \ 1424 } 1425 1426 #define PAGED_CODE_LOCKED() NOP_FUNCTION; 1427 1428 #else 1429 1430 #define PAGED_CODE() NOP_FUNCTION; 1431 #define PAGED_CODE_LOCKED() NOP_FUNCTION; 1432 1433 #endif /* DBG */ 1434 1435 $endif (_WDMDDK_) 1436