1 /******************************************************************************
3 ******************************************************************************/
8 KeInvalidateRangeAllCaches(
26 IN OUT PRKEVENT Event
);
29 #if (NTDDI_VERSION >= NTDDI_WIN2K)
37 IN KDPC_IMPORTANCE Importance
);
43 IN OUT PRKEVENT Event
,
44 IN KPRIORITY Increment
,
50 KeSetBasePriorityThread(
51 IN OUT PRKTHREAD Thread
,
57 KeEnterCriticalRegion(VOID
);
62 KeLeaveCriticalRegion(VOID
);
69 IN ULONG BugCheckCode
);
73 #if defined(_NTDDK_) || defined(_NTIFS_)
78 IN CONST VOID
*Address
, /* CONST is added */
81 #endif /* defined(_NTDDK_) || defined(_NTIFS_) */
93 #if defined(SINGLE_GROUP_LEGACY_API)
99 KeRevertToUserAffinityThread(VOID
);
104 KeSetSystemAffinityThread(
105 IN KAFFINITY Affinity
);
110 KeSetTargetProcessorDpc(
117 KeQueryActiveProcessors(VOID
);
124 KeSetTargetProcessorDpc(
131 KeQueryActiveProcessors(VOID
);
134 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
137 #if !defined(_M_AMD64)
141 KeQueryInterruptTime(VOID
);
147 OUT PLARGE_INTEGER CurrentTime
);
148 #endif /* !_M_AMD64 */
154 KeAcquireSpinLockRaiseToDpc(
155 IN OUT PKSPIN_LOCK SpinLock
);
157 #define KeAcquireSpinLock(SpinLock, OldIrql) \
158 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
163 KeAcquireSpinLockAtDpcLevel(
164 IN OUT PKSPIN_LOCK SpinLock
);
170 IN OUT PKSPIN_LOCK SpinLock
,
176 KeReleaseSpinLockFromDpcLevel(
177 IN OUT PKSPIN_LOCK SpinLock
);
180 #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
184 KeInitializeSpinLock(
185 IN PKSPIN_LOCK SpinLock
);
189 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
201 IN ULONG BugCheckCode
,
202 IN ULONG_PTR BugCheckParameter1
,
203 IN ULONG_PTR BugCheckParameter2
,
204 IN ULONG_PTR BugCheckParameter3
,
205 IN ULONG_PTR BugCheckParameter4
);
216 KeDelayExecutionThread(
217 IN KPROCESSOR_MODE WaitMode
,
218 IN BOOLEAN Alertable
,
219 IN PLARGE_INTEGER Interval
);
224 KeDeregisterBugCheckCallback(
225 IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
230 KeEnterCriticalRegion(VOID
);
235 KeInitializeDeviceQueue(
236 OUT PKDEVICE_QUEUE DeviceQueue
);
243 IN PKDEFERRED_ROUTINE DeferredRoutine
,
244 IN PVOID DeferredContext OPTIONAL
);
256 KeInitializeSemaphore(
257 OUT PRKSEMAPHORE Semaphore
,
277 KeInsertByKeyDeviceQueue(
278 IN OUT PKDEVICE_QUEUE DeviceQueue
,
279 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
286 IN OUT PKDEVICE_QUEUE DeviceQueue
,
287 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
294 IN PVOID SystemArgument1 OPTIONAL
,
295 IN PVOID SystemArgument2 OPTIONAL
);
300 KeLeaveCriticalRegion(VOID
);
305 KeQueryPerformanceCounter(
306 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
311 KeQueryPriorityThread(
312 IN PRKTHREAD Thread
);
317 KeQueryTimeIncrement(VOID
);
334 KeReadStateSemaphore(
335 IN PRKSEMAPHORE Semaphore
);
346 KeRegisterBugCheckCallback(
347 OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
348 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
351 IN PUCHAR Component
);
357 IN OUT PRKMUTEX Mutex
,
364 IN OUT PRKSEMAPHORE Semaphore
,
365 IN KPRIORITY Increment
,
372 KeRemoveByKeyDeviceQueue(
373 IN OUT PKDEVICE_QUEUE DeviceQueue
,
380 IN OUT PKDEVICE_QUEUE DeviceQueue
);
385 KeRemoveEntryDeviceQueue(
386 IN OUT PKDEVICE_QUEUE DeviceQueue
,
387 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
399 IN OUT PRKEVENT Event
);
405 IN OUT PRKEVENT Event
,
406 IN KPRIORITY Increment
,
414 IN KDPC_IMPORTANCE Importance
);
420 IN OUT PKTHREAD Thread
,
421 IN KPRIORITY Priority
);
427 IN OUT PKTIMER Timer
,
428 IN LARGE_INTEGER DueTime
,
429 IN PKDPC Dpc OPTIONAL
);
435 IN OUT PKTIMER Timer
,
436 IN LARGE_INTEGER DueTime
,
437 IN LONG Period OPTIONAL
,
438 IN PKDPC Dpc OPTIONAL
);
443 KeStallExecutionProcessor(
444 IN ULONG MicroSeconds
);
449 KeSynchronizeExecution(
450 IN OUT PKINTERRUPT Interrupt
,
451 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
452 IN PVOID SynchronizeContext OPTIONAL
);
457 KeWaitForMultipleObjects(
460 IN WAIT_TYPE WaitType
,
461 IN KWAIT_REASON WaitReason
,
462 IN KPROCESSOR_MODE WaitMode
,
463 IN BOOLEAN Alertable
,
464 IN PLARGE_INTEGER Timeout OPTIONAL
,
465 OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
467 #define KeWaitForMutexObject KeWaitForSingleObject
472 KeWaitForSingleObject(
474 IN KWAIT_REASON WaitReason
,
475 IN KPROCESSOR_MODE WaitMode
,
476 IN BOOLEAN Alertable
,
477 IN PLARGE_INTEGER Timeout OPTIONAL
);
480 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
482 #if (NTDDI_VERSION >= NTDDI_WINXP)
487 KeAreApcsDisabled(VOID
);
494 KeAcquireInStackQueuedSpinLock(
495 IN OUT PKSPIN_LOCK SpinLock
,
496 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
501 KeAcquireInStackQueuedSpinLockAtDpcLevel(
502 IN OUT PKSPIN_LOCK SpinLock
,
503 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
508 KeAcquireInterruptSpinLock(
509 IN OUT PKINTERRUPT Interrupt
);
514 KeAreApcsDisabled(VOID
);
519 KeGetRecommendedSharedDataAlignment(VOID
);
524 KeQueryRuntimeThread(
526 OUT PULONG UserTime
);
531 KeReleaseInStackQueuedSpinLockFromDpcLevel(
532 IN PKLOCK_QUEUE_HANDLE LockHandle
);
537 KeReleaseInterruptSpinLock(
538 IN OUT PKINTERRUPT Interrupt
,
544 KeRemoveByKeyDeviceQueueIfBusy(
545 IN OUT PKDEVICE_QUEUE DeviceQueue
,
551 KeReleaseInStackQueuedSpinLock(
552 IN PKLOCK_QUEUE_HANDLE LockHandle
);
555 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
558 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
563 KeDeregisterBugCheckReasonCallback(
564 IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
);
569 KeRegisterBugCheckReasonCallback(
570 OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
,
571 IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
,
572 IN KBUGCHECK_CALLBACK_REASON Reason
,
573 IN PUCHAR Component
);
575 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
577 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
581 KeFlushQueuedDpcs(VOID
);
582 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
583 $endif
/* _WDMDDK_ */
585 #if (NTDDI_VERSION >= NTDDI_WS03)
591 KeRegisterNmiCallback(
592 IN PNMI_CALLBACK CallbackRoutine
,
593 IN PVOID Context OPTIONAL
);
598 KeDeregisterNmiCallback(
604 KeInitializeThreadedDpc(
606 IN PKDEFERRED_ROUTINE DeferredRoutine
,
607 IN PVOID DeferredContext OPTIONAL
);
613 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
614 IN ULONG_PTR Context
);
619 KeAcquireSpinLockForDpc(
620 IN OUT PKSPIN_LOCK SpinLock
);
625 KeReleaseSpinLockForDpc(
626 IN OUT PKSPIN_LOCK SpinLock
,
633 IN PKSPIN_LOCK SpinLock
);
634 $endif
/* _WDMDDK_ */
640 KeInvalidateAllCaches(VOID
);
643 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
645 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
651 KeExpandKernelStackAndCallout(
652 IN PEXPAND_STACK_CALLOUT Callout
,
653 IN PVOID Parameter OPTIONAL
,
659 KeEnterGuardedRegion(VOID
);
664 KeLeaveGuardedRegion(VOID
);
671 KeTryToAcquireSpinLockAtDpcLevel(
672 IN OUT PKSPIN_LOCK SpinLock
);
677 KeAreAllApcsDisabled(VOID
);
682 KeAcquireGuardedMutex(
683 IN OUT PKGUARDED_MUTEX GuardedMutex
);
688 KeAcquireGuardedMutexUnsafe(
689 IN OUT PKGUARDED_MUTEX GuardedMutex
);
694 KeEnterGuardedRegion(VOID
);
699 KeLeaveGuardedRegion(VOID
);
704 KeInitializeGuardedMutex(
705 OUT PKGUARDED_MUTEX GuardedMutex
);
710 KeReleaseGuardedMutexUnsafe(
711 IN OUT PKGUARDED_MUTEX GuardedMutex
);
716 KeReleaseGuardedMutex(
717 IN OUT PKGUARDED_MUTEX GuardedMutex
);
722 KeTryToAcquireGuardedMutex(
723 IN OUT PKGUARDED_MUTEX GuardedMutex
);
724 $endif
/* _WDMDDK_ */
726 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
728 #if (NTDDI_VERSION >= NTDDI_VISTA)
734 KeAcquireInStackQueuedSpinLockForDpc(
735 IN OUT PKSPIN_LOCK SpinLock
,
736 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
741 KeReleaseInStackQueuedSpinLockForDpc(
742 IN PKLOCK_QUEUE_HANDLE LockHandle
);
747 KeQueryDpcWatchdogInformation(
748 OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation
);
749 $endif
/* _WDMDDK_ */
751 #if defined(SINGLE_GROUP_LEGACY_API)
756 KeQueryActiveProcessorCount(
757 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
762 KeQueryMaximumProcessorCount(VOID
);
769 KeSetSystemAffinityThreadEx(
770 IN KAFFINITY Affinity
);
775 KeRevertToUserAffinityThreadEx(
776 IN KAFFINITY Affinity
);
781 KeQueryActiveProcessorCount(
782 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
787 KeQueryMaximumProcessorCount(VOID
);
788 $endif
/* _WDMDDK_ */
789 #endif /* SINGLE_GROUP_LEGACY_API */
791 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
794 #if (NTDDI_VERSION >= NTDDI_WS08)
797 KeRegisterProcessorChangeCallback(
798 IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction
,
799 IN PVOID CallbackContext OPTIONAL
,
803 KeDeregisterProcessorChangeCallback(
804 IN PVOID CallbackHandle
);
806 #endif /* (NTDDI_VERSION >= NTDDI_WS08) */
807 $endif
/* _WDMDDK_ */
809 #if (NTDDI_VERSION >= NTDDI_WIN7)
815 KeQueryActiveProcessorCountEx(
816 IN USHORT GroupNumber
);
821 KeQueryMaximumProcessorCountEx(
822 IN USHORT GroupNumber
);
827 KeQueryActiveGroupCount(VOID
);
832 KeQueryMaximumGroupCount(VOID
);
837 KeQueryGroupAffinity(
838 IN USHORT GroupNumber
);
843 KeGetCurrentProcessorNumberEx(
844 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
849 KeQueryNodeActiveAffinity(
850 IN USHORT NodeNumber
,
851 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
852 OUT PUSHORT Count OPTIONAL
);
857 KeQueryNodeMaximumProcessorCount(
858 IN USHORT NodeNumber
);
863 KeQueryHighestNodeNumber(VOID
);
868 KeGetCurrentNodeNumber(VOID
);
873 KeQueryLogicalProcessorRelationship(
874 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
875 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
876 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
877 IN OUT PULONG Length
);
882 KeSetHardwareCounterConfiguration(
883 IN PHARDWARE_COUNTER CounterArray
,
889 KeQueryHardwareCounterConfiguration(
890 OUT PHARDWARE_COUNTER CounterArray
,
891 IN ULONG MaximumCount
,
898 KeQueryTotalCycleTimeProcess(
899 IN OUT PKPROCESS Process
,
900 OUT PULONG64 CycleTimeStamp
);
904 KeQueryTotalCycleTimeThread(
905 IN OUT PKTHREAD Thread
,
906 OUT PULONG64 CycleTimeStamp
);
911 KeSetTargetProcessorDpcEx(
913 IN PPROCESSOR_NUMBER ProcNumber
);
918 KeSetSystemGroupAffinityThread(
919 IN PGROUP_AFFINITY Affinity
,
920 OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL
);
925 KeRevertToUserGroupAffinityThread(
926 IN PGROUP_AFFINITY PreviousAffinity
);
931 KeSetCoalescableTimer(
932 IN OUT PKTIMER Timer
,
933 IN LARGE_INTEGER DueTime
,
935 IN ULONG TolerableDelay
,
936 IN PKDPC Dpc OPTIONAL
);
941 KeQueryUnbiasedInterruptTime(VOID
);
946 KeQueryActiveProcessorCountEx(
947 IN USHORT GroupNumber
);
952 KeQueryMaximumProcessorCountEx(
953 IN USHORT GroupNumber
);
958 KeQueryActiveGroupCount(VOID
);
963 KeQueryMaximumGroupCount(VOID
);
968 KeQueryGroupAffinity(
969 IN USHORT GroupNumber
);
974 KeGetCurrentProcessorNumberEx(
975 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
980 KeQueryNodeActiveAffinity(
981 IN USHORT NodeNumber
,
982 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
983 OUT PUSHORT Count OPTIONAL
);
988 KeQueryNodeMaximumProcessorCount(
989 IN USHORT NodeNumber
);
994 KeQueryHighestNodeNumber(VOID
);
999 KeGetCurrentNodeNumber(VOID
);
1004 KeQueryLogicalProcessorRelationship(
1005 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
1006 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
1007 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
1008 IN OUT PULONG Length
);
1013 KeSaveExtendedProcessorState(
1015 OUT PXSTATE_SAVE XStateSave
);
1020 KeRestoreExtendedProcessorState(
1021 IN PXSTATE_SAVE XStateSave
);
1025 KeGetProcessorNumberFromIndex(
1027 OUT PPROCESSOR_NUMBER ProcNumber
);
1031 KeGetProcessorIndexFromNumber(
1032 IN PPROCESSOR_NUMBER ProcNumber
);
1035 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1038 #if !defined(_IA64_)
1042 KeFlushWriteBuffer(VOID
);
1046 * KeInitializeCallbackRecord(
1047 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
1049 #define KeInitializeCallbackRecord(CallbackRecord) \
1050 CallbackRecord->State = BufferEmpty;
1054 #if (NTDDI_VERSION >= NTDDI_VISTA)
1055 #define PAGED_ASSERT( exp ) NT_ASSERT( exp )
1057 #define PAGED_ASSERT( exp ) ASSERT( exp )
1060 #define PAGED_CODE() { \
1061 if (KeGetCurrentIrql() > APC_LEVEL) { \
1062 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
1063 PAGED_ASSERT(FALSE); \
1069 #define PAGED_CODE()
1073 #define PAGED_CODE_LOCKED() NOP_FUNCTION;