1 /******************************************************************************
3 ******************************************************************************/
8 KeInvalidateRangeAllCaches(
26 IN OUT PRKEVENT Event
);
29 #if (NTDDI_VERSION >= NTDDI_WIN2K)
38 IN KDPC_IMPORTANCE Importance
);
44 IN OUT PRKEVENT Event
,
45 IN KPRIORITY Increment
,
51 KeSetBasePriorityThread(
52 IN OUT PRKTHREAD Thread
,
58 KeEnterCriticalRegion(VOID
);
63 KeLeaveCriticalRegion(VOID
);
70 IN ULONG BugCheckCode
);
76 #if defined(_NTDDK_) || defined(_NTIFS_)
81 IN CONST VOID
*Address
, /* CONST is added */
84 #endif /* defined(_NTDDK_) || defined(_NTIFS_) */
96 #if defined(SINGLE_GROUP_LEGACY_API)
102 KeRevertToUserAffinityThread(VOID
);
107 KeSetSystemAffinityThread(
108 IN KAFFINITY Affinity
);
113 KeSetTargetProcessorDpc(
120 KeQueryActiveProcessors(VOID
);
127 KeSetTargetProcessorDpc(
134 KeQueryActiveProcessors(VOID
);
137 #endif /* defined(SINGLE_GROUP_LEGACY_API) */
140 #if !defined(_M_AMD64)
145 KeQueryInterruptTime(VOID
);
151 OUT PLARGE_INTEGER CurrentTime
);
153 #endif /* !_M_AMD64 */
155 #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
159 KeInitializeSpinLock(
160 IN PKSPIN_LOCK SpinLock
);
164 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
176 IN ULONG BugCheckCode
,
177 IN ULONG_PTR BugCheckParameter1
,
178 IN ULONG_PTR BugCheckParameter2
,
179 IN ULONG_PTR BugCheckParameter3
,
180 IN ULONG_PTR BugCheckParameter4
);
191 KeDelayExecutionThread(
192 IN KPROCESSOR_MODE WaitMode
,
193 IN BOOLEAN Alertable
,
194 IN PLARGE_INTEGER Interval
);
199 KeDeregisterBugCheckCallback(
200 IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
205 KeEnterCriticalRegion(VOID
);
210 KeInitializeDeviceQueue(
211 OUT PKDEVICE_QUEUE DeviceQueue
);
218 IN PKDEFERRED_ROUTINE DeferredRoutine
,
219 IN PVOID DeferredContext OPTIONAL
);
231 KeInitializeSemaphore(
232 OUT PRKSEMAPHORE Semaphore
,
252 KeInsertByKeyDeviceQueue(
253 IN OUT PKDEVICE_QUEUE DeviceQueue
,
254 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
261 IN OUT PKDEVICE_QUEUE DeviceQueue
,
262 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
269 IN PVOID SystemArgument1 OPTIONAL
,
270 IN PVOID SystemArgument2 OPTIONAL
);
275 KeLeaveCriticalRegion(VOID
);
280 KeQueryPerformanceCounter(
281 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
286 KeQueryPriorityThread(
287 IN PRKTHREAD Thread
);
292 KeQueryTimeIncrement(VOID
);
309 KeReadStateSemaphore(
310 IN PRKSEMAPHORE Semaphore
);
321 KeRegisterBugCheckCallback(
322 OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
323 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
326 IN PUCHAR Component
);
332 IN OUT PRKMUTEX Mutex
,
339 IN OUT PRKSEMAPHORE Semaphore
,
340 IN KPRIORITY Increment
,
347 KeRemoveByKeyDeviceQueue(
348 IN OUT PKDEVICE_QUEUE DeviceQueue
,
355 IN OUT PKDEVICE_QUEUE DeviceQueue
);
360 KeRemoveEntryDeviceQueue(
361 IN OUT PKDEVICE_QUEUE DeviceQueue
,
362 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
374 IN OUT PRKEVENT Event
);
380 IN OUT PRKEVENT Event
,
381 IN KPRIORITY Increment
,
389 IN KDPC_IMPORTANCE Importance
);
395 IN OUT PKTHREAD Thread
,
396 IN KPRIORITY Priority
);
402 IN OUT PKTIMER Timer
,
403 IN LARGE_INTEGER DueTime
,
404 IN PKDPC Dpc OPTIONAL
);
410 IN OUT PKTIMER Timer
,
411 IN LARGE_INTEGER DueTime
,
412 IN LONG Period OPTIONAL
,
413 IN PKDPC Dpc OPTIONAL
);
418 KeStallExecutionProcessor(
419 IN ULONG MicroSeconds
);
424 KeSynchronizeExecution(
425 IN OUT PKINTERRUPT Interrupt
,
426 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
427 IN PVOID SynchronizeContext OPTIONAL
);
432 KeWaitForMultipleObjects(
435 IN WAIT_TYPE WaitType
,
436 IN KWAIT_REASON WaitReason
,
437 IN KPROCESSOR_MODE WaitMode
,
438 IN BOOLEAN Alertable
,
439 IN PLARGE_INTEGER Timeout OPTIONAL
,
440 OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
442 #define KeWaitForMutexObject KeWaitForSingleObject
447 KeWaitForSingleObject(
449 IN KWAIT_REASON WaitReason
,
450 IN KPROCESSOR_MODE WaitMode
,
451 IN BOOLEAN Alertable
,
452 IN PLARGE_INTEGER Timeout OPTIONAL
);
455 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
457 #if (NTDDI_VERSION >= NTDDI_WINXP)
462 KeAreApcsDisabled(VOID
);
469 KeAcquireInStackQueuedSpinLock(
470 IN OUT PKSPIN_LOCK SpinLock
,
471 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
476 KeAcquireInStackQueuedSpinLockAtDpcLevel(
477 IN OUT PKSPIN_LOCK SpinLock
,
478 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
483 KeAcquireInterruptSpinLock(
484 IN OUT PKINTERRUPT Interrupt
);
489 KeAreApcsDisabled(VOID
);
494 KeGetRecommendedSharedDataAlignment(VOID
);
499 KeQueryRuntimeThread(
501 OUT PULONG UserTime
);
506 KeReleaseInStackQueuedSpinLockFromDpcLevel(
507 IN PKLOCK_QUEUE_HANDLE LockHandle
);
512 KeReleaseInterruptSpinLock(
513 IN OUT PKINTERRUPT Interrupt
,
519 KeRemoveByKeyDeviceQueueIfBusy(
520 IN OUT PKDEVICE_QUEUE DeviceQueue
,
526 KeReleaseInStackQueuedSpinLock(
527 IN PKLOCK_QUEUE_HANDLE LockHandle
);
530 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
533 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
538 KeDeregisterBugCheckReasonCallback(
539 IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
);
544 KeRegisterBugCheckReasonCallback(
545 OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
,
546 IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
,
547 IN KBUGCHECK_CALLBACK_REASON Reason
,
548 IN PUCHAR Component
);
550 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
552 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
556 KeFlushQueuedDpcs(VOID
);
557 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
560 #if (NTDDI_VERSION >= NTDDI_WS03)
565 KeInvalidateAllCaches(VOID
);
572 KeRegisterNmiCallback(
573 IN PNMI_CALLBACK CallbackRoutine
,
574 IN PVOID Context OPTIONAL
);
579 KeDeregisterNmiCallback(
585 KeInitializeThreadedDpc(
587 IN PKDEFERRED_ROUTINE DeferredRoutine
,
588 IN PVOID DeferredContext OPTIONAL
);
594 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
595 IN ULONG_PTR Context
);
600 KeAcquireSpinLockForDpc(
601 IN OUT PKSPIN_LOCK SpinLock
);
606 KeReleaseSpinLockForDpc(
607 IN OUT PKSPIN_LOCK SpinLock
,
614 IN PKSPIN_LOCK SpinLock
);
617 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
619 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
624 KeExpandKernelStackAndCallout(
625 IN PEXPAND_STACK_CALLOUT Callout
,
626 IN PVOID Parameter OPTIONAL
,
632 KeEnterGuardedRegion(VOID
);
637 KeLeaveGuardedRegion(VOID
);
644 KeTryToAcquireSpinLockAtDpcLevel(
645 IN OUT PKSPIN_LOCK SpinLock
);
650 KeAreAllApcsDisabled(VOID
);
655 KeAcquireGuardedMutex(
656 IN OUT PKGUARDED_MUTEX GuardedMutex
);
661 KeAcquireGuardedMutexUnsafe(
662 IN OUT PKGUARDED_MUTEX GuardedMutex
);
667 KeEnterGuardedRegion(VOID
);
672 KeLeaveGuardedRegion(VOID
);
677 KeInitializeGuardedMutex(
678 OUT PKGUARDED_MUTEX GuardedMutex
);
683 KeReleaseGuardedMutexUnsafe(
684 IN OUT PKGUARDED_MUTEX GuardedMutex
);
689 KeReleaseGuardedMutex(
690 IN OUT PKGUARDED_MUTEX GuardedMutex
);
695 KeTryToAcquireGuardedMutex(
696 IN OUT PKGUARDED_MUTEX GuardedMutex
);
699 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
701 #if (NTDDI_VERSION >= NTDDI_VISTA)
706 KeAcquireInStackQueuedSpinLockForDpc(
707 IN OUT PKSPIN_LOCK SpinLock
,
708 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
713 KeReleaseInStackQueuedSpinLockForDpc(
714 IN PKLOCK_QUEUE_HANDLE LockHandle
);
719 KeQueryDpcWatchdogInformation(
720 OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation
);
723 #if defined(SINGLE_GROUP_LEGACY_API)
728 KeQueryActiveProcessorCount(
729 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
734 KeQueryMaximumProcessorCount(VOID
);
741 KeSetSystemAffinityThreadEx(
742 IN KAFFINITY Affinity
);
747 KeRevertToUserAffinityThreadEx(
748 IN KAFFINITY Affinity
);
753 KeQueryActiveProcessorCount(
754 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
759 KeQueryMaximumProcessorCount(VOID
);
763 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
766 #if (NTDDI_VERSION >= NTDDI_WS08)
769 KeRegisterProcessorChangeCallback(
770 IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction
,
771 IN PVOID CallbackContext OPTIONAL
,
775 KeDeregisterProcessorChangeCallback(
776 IN PVOID CallbackHandle
);
778 #endif /* (NTDDI_VERSION >= NTDDI_WS08) */
781 #if (NTDDI_VERSION >= NTDDI_WIN7)
787 KeQueryActiveProcessorCountEx(
788 IN USHORT GroupNumber
);
793 KeQueryMaximumProcessorCountEx(
794 IN USHORT GroupNumber
);
799 KeQueryActiveGroupCount(VOID
);
804 KeQueryMaximumGroupCount(VOID
);
809 KeQueryGroupAffinity(
810 IN USHORT GroupNumber
);
815 KeGetCurrentProcessorNumberEx(
816 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
821 KeQueryNodeActiveAffinity(
822 IN USHORT NodeNumber
,
823 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
824 OUT PUSHORT Count OPTIONAL
);
829 KeQueryNodeMaximumProcessorCount(
830 IN USHORT NodeNumber
);
835 KeQueryHighestNodeNumber(VOID
);
840 KeGetCurrentNodeNumber(VOID
);
845 KeQueryLogicalProcessorRelationship(
846 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
847 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
848 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
849 IN OUT PULONG Length
);
854 KeSetHardwareCounterConfiguration(
855 IN PHARDWARE_COUNTER CounterArray
,
861 KeQueryHardwareCounterConfiguration(
862 OUT PHARDWARE_COUNTER CounterArray
,
863 IN ULONG MaximumCount
,
870 KeQueryTotalCycleTimeProcess(
871 IN OUT PKPROCESS Process
,
872 OUT PULONG64 CycleTimeStamp
);
876 KeQueryTotalCycleTimeThread(
877 IN OUT PKTHREAD Thread
,
878 OUT PULONG64 CycleTimeStamp
);
883 KeSetTargetProcessorDpcEx(
885 IN PPROCESSOR_NUMBER ProcNumber
);
890 KeSetSystemGroupAffinityThread(
891 IN PGROUP_AFFINITY Affinity
,
892 OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL
);
897 KeRevertToUserGroupAffinityThread(
898 IN PGROUP_AFFINITY PreviousAffinity
);
903 KeSetCoalescableTimer(
904 IN OUT PKTIMER Timer
,
905 IN LARGE_INTEGER DueTime
,
907 IN ULONG TolerableDelay
,
908 IN PKDPC Dpc OPTIONAL
);
913 KeQueryUnbiasedInterruptTime(VOID
);
918 KeQueryActiveProcessorCountEx(
919 IN USHORT GroupNumber
);
924 KeQueryMaximumProcessorCountEx(
925 IN USHORT GroupNumber
);
930 KeQueryActiveGroupCount(VOID
);
935 KeQueryMaximumGroupCount(VOID
);
940 KeQueryGroupAffinity(
941 IN USHORT GroupNumber
);
946 KeGetCurrentProcessorNumberEx(
947 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
952 KeQueryNodeActiveAffinity(
953 IN USHORT NodeNumber
,
954 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
955 OUT PUSHORT Count OPTIONAL
);
960 KeQueryNodeMaximumProcessorCount(
961 IN USHORT NodeNumber
);
966 KeQueryHighestNodeNumber(VOID
);
971 KeGetCurrentNodeNumber(VOID
);
976 KeQueryLogicalProcessorRelationship(
977 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
978 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
979 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
980 IN OUT PULONG Length
);
985 KeSaveExtendedProcessorState(
987 OUT PXSTATE_SAVE XStateSave
);
992 KeRestoreExtendedProcessorState(
993 IN PXSTATE_SAVE XStateSave
);
997 KeGetProcessorNumberFromIndex(
999 OUT PPROCESSOR_NUMBER ProcNumber
);
1003 KeGetProcessorIndexFromNumber(
1004 IN PPROCESSOR_NUMBER ProcNumber
);
1007 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1010 #if !defined(_IA64_)
1014 KeFlushWriteBuffer(VOID
);
1018 * KeInitializeCallbackRecord(
1019 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
1021 #define KeInitializeCallbackRecord(CallbackRecord) \
1022 CallbackRecord->State = BufferEmpty;
1026 #if (NTDDI_VERSION >= NTDDI_VISTA)
1027 #define PAGED_ASSERT( exp ) NT_ASSERT( exp )
1029 #define PAGED_ASSERT( exp ) ASSERT( exp )
1032 #define PAGED_CODE() { \
1033 if (KeGetCurrentIrql() > APC_LEVEL) { \
1034 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
1035 PAGED_ASSERT(FALSE); \
1041 #define PAGED_CODE()
1045 #define PAGED_CODE_LOCKED() NOP_FUNCTION;