1 /******************************************************************************
3 ******************************************************************************/
23 IN OUT PRKEVENT Event
);
25 #if (NTDDI_VERSION >= NTDDI_WIN2K)
31 IN CONST VOID
*Address
, /* CONST is added */
43 #if defined(SINGLE_GROUP_LEGACY_API)
47 KeRevertToUserAffinityThread(VOID
);
52 KeSetSystemAffinityThread(
53 IN KAFFINITY Affinity
);
58 KeSetTargetProcessorDpc(
65 KeQueryActiveProcessors(
69 #if !defined(_M_AMD64)
80 OUT PLARGE_INTEGER CurrentTime
);
81 #endif /* !_M_AMD64 */
83 #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
88 IN PKSPIN_LOCK SpinLock
);
92 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock
)
104 IN ULONG BugCheckCode
,
105 IN ULONG_PTR BugCheckParameter1
,
106 IN ULONG_PTR BugCheckParameter2
,
107 IN ULONG_PTR BugCheckParameter3
,
108 IN ULONG_PTR BugCheckParameter4
);
119 KeDelayExecutionThread(
120 IN KPROCESSOR_MODE WaitMode
,
121 IN BOOLEAN Alertable
,
122 IN PLARGE_INTEGER Interval
);
127 KeDeregisterBugCheckCallback(
128 IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord
);
133 KeEnterCriticalRegion(VOID
);
138 KeInitializeDeviceQueue(
139 OUT PKDEVICE_QUEUE DeviceQueue
);
146 IN PKDEFERRED_ROUTINE DeferredRoutine
,
147 IN PVOID DeferredContext OPTIONAL
);
159 KeInitializeSemaphore(
160 OUT PRKSEMAPHORE Semaphore
,
180 KeInsertByKeyDeviceQueue(
181 IN OUT PKDEVICE_QUEUE DeviceQueue
,
182 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
,
189 IN OUT PKDEVICE_QUEUE DeviceQueue
,
190 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
197 IN PVOID SystemArgument1 OPTIONAL
,
198 IN PVOID SystemArgument2 OPTIONAL
);
203 KeLeaveCriticalRegion(VOID
);
208 KeQueryPerformanceCounter(
209 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL
);
214 KeQueryPriorityThread(
215 IN PRKTHREAD Thread
);
220 KeQueryTimeIncrement(
239 KeReadStateSemaphore(
240 IN PRKSEMAPHORE Semaphore
);
251 KeRegisterBugCheckCallback(
252 OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord
,
253 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
,
256 IN PUCHAR Component
);
262 IN OUT PRKMUTEX Mutex
,
269 IN OUT PRKSEMAPHORE Semaphore
,
270 IN KPRIORITY Increment
,
277 KeRemoveByKeyDeviceQueue(
278 IN OUT PKDEVICE_QUEUE DeviceQueue
,
285 IN OUT PKDEVICE_QUEUE DeviceQueue
);
290 KeRemoveEntryDeviceQueue(
291 IN OUT PKDEVICE_QUEUE DeviceQueue
,
292 IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
);
304 IN OUT PRKEVENT Event
);
310 IN OUT PRKEVENT Event
,
311 IN KPRIORITY Increment
,
319 IN KDPC_IMPORTANCE Importance
);
325 IN OUT PKTHREAD Thread
,
326 IN KPRIORITY Priority
);
332 IN OUT PKTIMER Timer
,
333 IN LARGE_INTEGER DueTime
,
334 IN PKDPC Dpc OPTIONAL
);
340 IN OUT PKTIMER Timer
,
341 IN LARGE_INTEGER DueTime
,
342 IN LONG Period OPTIONAL
,
343 IN PKDPC Dpc OPTIONAL
);
348 KeStallExecutionProcessor(
349 IN ULONG MicroSeconds
);
354 KeSynchronizeExecution(
355 IN OUT PKINTERRUPT Interrupt
,
356 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
,
357 IN PVOID SynchronizeContext OPTIONAL
);
362 KeWaitForMultipleObjects(
365 IN WAIT_TYPE WaitType
,
366 IN KWAIT_REASON WaitReason
,
367 IN KPROCESSOR_MODE WaitMode
,
368 IN BOOLEAN Alertable
,
369 IN PLARGE_INTEGER Timeout OPTIONAL
,
370 OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL
);
372 #define KeWaitForMutexObject KeWaitForSingleObject
377 KeWaitForSingleObject(
379 IN KWAIT_REASON WaitReason
,
380 IN KPROCESSOR_MODE WaitMode
,
381 IN BOOLEAN Alertable
,
382 IN PLARGE_INTEGER Timeout OPTIONAL
);
384 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
386 #if (NTDDI_VERSION >= NTDDI_WINXP)
391 KeAcquireInStackQueuedSpinLock(
392 IN OUT PKSPIN_LOCK SpinLock
,
393 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
398 KeAcquireInStackQueuedSpinLockAtDpcLevel(
399 IN OUT PKSPIN_LOCK SpinLock
,
400 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
405 KeAcquireInterruptSpinLock(
406 IN OUT PKINTERRUPT Interrupt
);
411 KeAreApcsDisabled(VOID
);
416 KeGetRecommendedSharedDataAlignment(VOID
);
421 KeQueryRuntimeThread(
423 OUT PULONG UserTime
);
428 KeReleaseInStackQueuedSpinLockFromDpcLevel(
429 IN PKLOCK_QUEUE_HANDLE LockHandle
);
434 KeReleaseInterruptSpinLock(
435 IN OUT PKINTERRUPT Interrupt
,
441 KeRemoveByKeyDeviceQueueIfBusy(
442 IN OUT PKDEVICE_QUEUE DeviceQueue
,
448 KeReleaseInStackQueuedSpinLock(
449 IN PKLOCK_QUEUE_HANDLE LockHandle
);
451 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
453 #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
458 KeDeregisterBugCheckReasonCallback(
459 IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
);
464 KeRegisterBugCheckReasonCallback(
465 OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord
,
466 IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
,
467 IN KBUGCHECK_CALLBACK_REASON Reason
,
468 IN PUCHAR Component
);
470 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
472 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
480 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
482 #if (NTDDI_VERSION >= NTDDI_WS03)
487 KeRegisterNmiCallback(
488 IN PNMI_CALLBACK CallbackRoutine
,
489 IN PVOID Context OPTIONAL
);
494 KeDeregisterNmiCallback(
500 KeInitializeThreadedDpc(
502 IN PKDEFERRED_ROUTINE DeferredRoutine
,
503 IN PVOID DeferredContext OPTIONAL
);
509 IN PKIPI_BROADCAST_WORKER BroadcastFunction
,
510 IN ULONG_PTR Context
);
515 KeAcquireSpinLockForDpc(
516 IN OUT PKSPIN_LOCK SpinLock
);
521 KeReleaseSpinLockForDpc(
522 IN OUT PKSPIN_LOCK SpinLock
,
529 IN PKSPIN_LOCK SpinLock
);
531 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
533 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
538 KeTryToAcquireSpinLockAtDpcLevel(
539 IN OUT PKSPIN_LOCK SpinLock
);
544 KeAreAllApcsDisabled(
550 KeAcquireGuardedMutex(
551 IN OUT PKGUARDED_MUTEX GuardedMutex
557 KeAcquireGuardedMutexUnsafe(
558 IN OUT PKGUARDED_MUTEX GuardedMutex
564 KeEnterGuardedRegion(
571 KeLeaveGuardedRegion(
578 KeInitializeGuardedMutex(
579 OUT PKGUARDED_MUTEX GuardedMutex
585 KeReleaseGuardedMutexUnsafe(
586 IN OUT PKGUARDED_MUTEX GuardedMutex
592 KeReleaseGuardedMutex(
593 IN OUT PKGUARDED_MUTEX GuardedMutex
599 KeTryToAcquireGuardedMutex(
600 IN OUT PKGUARDED_MUTEX GuardedMutex
603 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
605 #if (NTDDI_VERSION >= NTDDI_VISTA)
610 KeAcquireInStackQueuedSpinLockForDpc(
611 IN OUT PKSPIN_LOCK SpinLock
,
612 OUT PKLOCK_QUEUE_HANDLE LockHandle
);
617 KeReleaseInStackQueuedSpinLockForDpc(
618 IN PKLOCK_QUEUE_HANDLE LockHandle
);
623 KeQueryDpcWatchdogInformation(
624 OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation
);
626 #if defined(SINGLE_GROUP_LEGACY_API)
630 KeSetSystemAffinityThreadEx(
631 IN KAFFINITY Affinity
);
636 KeQueryActiveProcessorCount(
637 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
642 KeQueryMaximumProcessorCount(
646 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
648 #if (NTDDI_VERSION >= NTDDI_WS08)
651 KeRegisterProcessorChangeCallback(
652 IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction
,
653 IN PVOID CallbackContext OPTIONAL
,
657 KeDeregisterProcessorChangeCallback(
658 IN PVOID CallbackHandle
);
660 #endif /* (NTDDI_VERSION >= NTDDI_WS08) */
662 #if (NTDDI_VERSION >= NTDDI_WIN7)
666 KeQueryTotalCycleTimeProcess(
667 IN OUT PKPROCESS Process
,
668 OUT PULONG64 CycleTimeStamp
);
672 KeQueryTotalCycleTimeThread(
673 IN OUT PKTHREAD Thread
,
674 OUT PULONG64 CycleTimeStamp
);
679 KeSetTargetProcessorDpcEx(
681 IN PPROCESSOR_NUMBER ProcNumber
);
686 KeSetSystemGroupAffinityThread(
687 IN PGROUP_AFFINITY Affinity
,
688 OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL
);
693 KeRevertToUserGroupAffinityThread(
694 IN PGROUP_AFFINITY PreviousAffinity
);
699 KeSetCoalescableTimer(
700 IN OUT PKTIMER Timer
,
701 IN LARGE_INTEGER DueTime
,
703 IN ULONG TolerableDelay
,
704 IN PKDPC Dpc OPTIONAL
);
709 KeQueryUnbiasedInterruptTime(
715 KeQueryActiveProcessorCountEx(
716 IN USHORT GroupNumber
);
721 KeQueryMaximumProcessorCountEx(
722 IN USHORT GroupNumber
);
727 KeQueryActiveGroupCount(
733 KeQueryMaximumGroupCount(
740 IN USHORT GroupNumber
);
745 KeGetCurrentProcessorNumberEx(
746 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
751 KeQueryNodeActiveAffinity(
752 IN USHORT NodeNumber
,
753 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
754 OUT PUSHORT Count OPTIONAL
);
759 KeQueryNodeMaximumProcessorCount(
760 IN USHORT NodeNumber
);
765 KeQueryHighestNodeNumber(
771 KeGetCurrentNodeNumber(
777 KeQueryLogicalProcessorRelationship(
778 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
779 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
780 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
781 IN OUT PULONG Length
);
786 KeSaveExtendedProcessorState(
788 OUT PXSTATE_SAVE XStateSave
);
793 KeRestoreExtendedProcessorState(
794 IN PXSTATE_SAVE XStateSave
);
796 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
802 KeFlushWriteBuffer(VOID
);
806 * KeInitializeCallbackRecord(
807 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
809 #define KeInitializeCallbackRecord(CallbackRecord) \
810 CallbackRecord->State = BufferEmpty;
814 #if (NTDDI_VERSION >= NTDDI_VISTA)
815 #define PAGED_ASSERT( exp ) NT_ASSERT( exp )
817 #define PAGED_ASSERT( exp ) ASSERT( exp )
820 #define PAGED_CODE() { \
821 if (KeGetCurrentIrql() > APC_LEVEL) { \
822 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
823 PAGED_ASSERT(FALSE); \
833 #define PAGED_CODE_LOCKED() NOP_FUNCTION;