1 /******************************************************************************
3 ******************************************************************************/
8 KeGetCurrentIrql(VOID
);
22 IN OUT PRKEVENT Event
);
24 #if (NTDDI_VERSION >= NTDDI_WIN2K)
30 IN CONST VOID
*Address
, /* CONST is added */
42 #if defined(SINGLE_GROUP_LEGACY_API)
46 KeRevertToUserAffinityThread(VOID
);
51 KeSetSystemAffinityThread(
52 IN KAFFINITY Affinity
);
57 KeSetTargetProcessorDpc(
64 KeQueryActiveProcessors(VOID
);
67 #if !defined(_M_AMD64)
72 KeQueryInterruptTime(VOID
);
78 OUT PLARGE_INTEGER CurrentTime
);
80 #endif /* !_M_AMD64 */
82 #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
87 IN PKSPIN_LOCK SpinLock
);
91 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
103 IN ULONG BugCheckCode
,
104 IN ULONG_PTR BugCheckParameter1
,
105 IN ULONG_PTR BugCheckParameter2
,
106 IN ULONG_PTR BugCheckParameter3
,
107 IN ULONG_PTR BugCheckParameter4
);
118 KeDelayExecutionThread(
119 IN KPROCESSOR_MODE WaitMode
,
120 IN BOOLEAN Alertable
,
121 IN PLARGE_INTEGER Interval
);
126 KeDeregisterBugCheckCallback(
127 IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
132 KeEnterCriticalRegion(VOID
);
137 KeInitializeDeviceQueue(
138 OUT PKDEVICE_QUEUE DeviceQueue
);
145 IN PKDEFERRED_ROUTINE DeferredRoutine
,
146 IN PVOID DeferredContext OPTIONAL
);
158 KeInitializeSemaphore(
159 OUT PRKSEMAPHORE Semaphore
,
179 KeInsertByKeyDeviceQueue(
180 IN OUT PKDEVICE_QUEUE DeviceQueue
,
181 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
188 IN OUT PKDEVICE_QUEUE DeviceQueue
,
189 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
196 IN PVOID SystemArgument1 OPTIONAL
,
197 IN PVOID SystemArgument2 OPTIONAL
);
202 KeLeaveCriticalRegion(VOID
);
207 KeQueryPerformanceCounter(
208 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
213 KeQueryPriorityThread(
214 IN PRKTHREAD Thread
);
219 KeQueryTimeIncrement(VOID
);
236 KeReadStateSemaphore(
237 IN PRKSEMAPHORE Semaphore
);
248 KeRegisterBugCheckCallback(
249 OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
250 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
253 IN PUCHAR Component
);
259 IN OUT PRKMUTEX Mutex
,
266 IN OUT PRKSEMAPHORE Semaphore
,
267 IN KPRIORITY Increment
,
274 KeRemoveByKeyDeviceQueue(
275 IN OUT PKDEVICE_QUEUE DeviceQueue
,
282 IN OUT PKDEVICE_QUEUE DeviceQueue
);
287 KeRemoveEntryDeviceQueue(
288 IN OUT PKDEVICE_QUEUE DeviceQueue
,
289 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
301 IN OUT PRKEVENT Event
);
307 IN OUT PRKEVENT Event
,
308 IN KPRIORITY Increment
,
316 IN KDPC_IMPORTANCE Importance
);
322 IN OUT PKTHREAD Thread
,
323 IN KPRIORITY Priority
);
329 IN OUT PKTIMER Timer
,
330 IN LARGE_INTEGER DueTime
,
331 IN PKDPC Dpc OPTIONAL
);
337 IN OUT PKTIMER Timer
,
338 IN LARGE_INTEGER DueTime
,
339 IN LONG Period OPTIONAL
,
340 IN PKDPC Dpc OPTIONAL
);
345 KeStallExecutionProcessor(
346 IN ULONG MicroSeconds
);
351 KeSynchronizeExecution(
352 IN OUT PKINTERRUPT Interrupt
,
353 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
354 IN PVOID SynchronizeContext OPTIONAL
);
359 KeWaitForMultipleObjects(
362 IN WAIT_TYPE WaitType
,
363 IN KWAIT_REASON WaitReason
,
364 IN KPROCESSOR_MODE WaitMode
,
365 IN BOOLEAN Alertable
,
366 IN PLARGE_INTEGER Timeout OPTIONAL
,
367 OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
369 #define KeWaitForMutexObject KeWaitForSingleObject
374 KeWaitForSingleObject(
376 IN KWAIT_REASON WaitReason
,
377 IN KPROCESSOR_MODE WaitMode
,
378 IN BOOLEAN Alertable
,
379 IN PLARGE_INTEGER Timeout OPTIONAL
);
381 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
383 #if (NTDDI_VERSION >= NTDDI_WINXP)
388 KeAcquireInStackQueuedSpinLock(
389 IN OUT PKSPIN_LOCK SpinLock
,
390 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
395 KeAcquireInStackQueuedSpinLockAtDpcLevel(
396 IN OUT PKSPIN_LOCK SpinLock
,
397 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
402 KeAcquireInterruptSpinLock(
403 IN OUT PKINTERRUPT Interrupt
);
408 KeAreApcsDisabled(VOID
);
413 KeGetRecommendedSharedDataAlignment(VOID
);
418 KeQueryRuntimeThread(
420 OUT PULONG UserTime
);
425 KeReleaseInStackQueuedSpinLockFromDpcLevel(
426 IN PKLOCK_QUEUE_HANDLE LockHandle
);
431 KeReleaseInterruptSpinLock(
432 IN OUT PKINTERRUPT Interrupt
,
438 KeRemoveByKeyDeviceQueueIfBusy(
439 IN OUT PKDEVICE_QUEUE DeviceQueue
,
445 KeReleaseInStackQueuedSpinLock(
446 IN PKLOCK_QUEUE_HANDLE LockHandle
);
448 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
450 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
455 KeDeregisterBugCheckReasonCallback(
456 IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
);
461 KeRegisterBugCheckReasonCallback(
462 OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
,
463 IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
,
464 IN KBUGCHECK_CALLBACK_REASON Reason
,
465 IN PUCHAR Component
);
467 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
469 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
473 KeFlushQueuedDpcs(VOID
);
474 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
476 #if (NTDDI_VERSION >= NTDDI_WS03)
481 KeRegisterNmiCallback(
482 IN PNMI_CALLBACK CallbackRoutine
,
483 IN PVOID Context OPTIONAL
);
488 KeDeregisterNmiCallback(
494 KeInitializeThreadedDpc(
496 IN PKDEFERRED_ROUTINE DeferredRoutine
,
497 IN PVOID DeferredContext OPTIONAL
);
503 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
504 IN ULONG_PTR Context
);
509 KeAcquireSpinLockForDpc(
510 IN OUT PKSPIN_LOCK SpinLock
);
515 KeReleaseSpinLockForDpc(
516 IN OUT PKSPIN_LOCK SpinLock
,
523 IN PKSPIN_LOCK SpinLock
);
525 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
527 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
532 KeTryToAcquireSpinLockAtDpcLevel(
533 IN OUT PKSPIN_LOCK SpinLock
);
538 KeAreAllApcsDisabled(VOID
);
543 KeAcquireGuardedMutex(
544 IN OUT PKGUARDED_MUTEX GuardedMutex
);
549 KeAcquireGuardedMutexUnsafe(
550 IN OUT PKGUARDED_MUTEX GuardedMutex
);
555 KeEnterGuardedRegion(VOID
);
560 KeLeaveGuardedRegion(VOID
);
565 KeInitializeGuardedMutex(
566 OUT PKGUARDED_MUTEX GuardedMutex
);
571 KeReleaseGuardedMutexUnsafe(
572 IN OUT PKGUARDED_MUTEX GuardedMutex
);
577 KeReleaseGuardedMutex(
578 IN OUT PKGUARDED_MUTEX GuardedMutex
);
583 KeTryToAcquireGuardedMutex(
584 IN OUT PKGUARDED_MUTEX GuardedMutex
);
586 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
588 #if (NTDDI_VERSION >= NTDDI_VISTA)
593 KeAcquireInStackQueuedSpinLockForDpc(
594 IN OUT PKSPIN_LOCK SpinLock
,
595 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
600 KeReleaseInStackQueuedSpinLockForDpc(
601 IN PKLOCK_QUEUE_HANDLE LockHandle
);
606 KeQueryDpcWatchdogInformation(
607 OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation
);
609 #if defined(SINGLE_GROUP_LEGACY_API)
613 KeSetSystemAffinityThreadEx(
614 IN KAFFINITY Affinity
);
619 KeQueryActiveProcessorCount(
620 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
625 KeQueryMaximumProcessorCount(VOID
);
628 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
630 #if (NTDDI_VERSION >= NTDDI_WS08)
633 KeRegisterProcessorChangeCallback(
634 IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction
,
635 IN PVOID CallbackContext OPTIONAL
,
639 KeDeregisterProcessorChangeCallback(
640 IN PVOID CallbackHandle
);
642 #endif /* (NTDDI_VERSION >= NTDDI_WS08) */
644 #if (NTDDI_VERSION >= NTDDI_WIN7)
648 KeQueryTotalCycleTimeProcess(
649 IN OUT PKPROCESS Process
,
650 OUT PULONG64 CycleTimeStamp
);
654 KeQueryTotalCycleTimeThread(
655 IN OUT PKTHREAD Thread
,
656 OUT PULONG64 CycleTimeStamp
);
661 KeSetTargetProcessorDpcEx(
663 IN PPROCESSOR_NUMBER ProcNumber
);
668 KeSetSystemGroupAffinityThread(
669 IN PGROUP_AFFINITY Affinity
,
670 OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL
);
675 KeRevertToUserGroupAffinityThread(
676 IN PGROUP_AFFINITY PreviousAffinity
);
681 KeSetCoalescableTimer(
682 IN OUT PKTIMER Timer
,
683 IN LARGE_INTEGER DueTime
,
685 IN ULONG TolerableDelay
,
686 IN PKDPC Dpc OPTIONAL
);
691 KeQueryUnbiasedInterruptTime(VOID
);
696 KeQueryActiveProcessorCountEx(
697 IN USHORT GroupNumber
);
702 KeQueryMaximumProcessorCountEx(
703 IN USHORT GroupNumber
);
708 KeQueryActiveGroupCount(VOID
);
713 KeQueryMaximumGroupCount(VOID
);
718 KeQueryGroupAffinity(
719 IN USHORT GroupNumber
);
724 KeGetCurrentProcessorNumberEx(
725 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
730 KeQueryNodeActiveAffinity(
731 IN USHORT NodeNumber
,
732 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
733 OUT PUSHORT Count OPTIONAL
);
738 KeQueryNodeMaximumProcessorCount(
739 IN USHORT NodeNumber
);
744 KeQueryHighestNodeNumber(VOID
);
749 KeGetCurrentNodeNumber(VOID
);
754 KeQueryLogicalProcessorRelationship(
755 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
756 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
757 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
758 IN OUT PULONG Length
);
763 KeSaveExtendedProcessorState(
765 OUT PXSTATE_SAVE XStateSave
);
770 KeRestoreExtendedProcessorState(
771 IN PXSTATE_SAVE XStateSave
);
773 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
779 KeFlushWriteBuffer(VOID
);
783 * KeInitializeCallbackRecord(
784 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
786 #define KeInitializeCallbackRecord(CallbackRecord) \
787 CallbackRecord->State = BufferEmpty;
791 #if (NTDDI_VERSION >= NTDDI_VISTA)
792 #define PAGED_ASSERT( exp ) NT_ASSERT( exp )
794 #define PAGED_ASSERT( exp ) ASSERT( exp )
797 #define PAGED_CODE() { \
798 if (KeGetCurrentIrql() > APC_LEVEL) { \
799 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
800 PAGED_ASSERT(FALSE); \
810 #define PAGED_CODE_LOCKED() NOP_FUNCTION;