3 Copyright (c) Alex Ionescu. All rights reserved.
11 Functions definitions for the Kernel services.
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
28 #ifndef NTOS_MODE_USER
38 _In_ KAPC_ENVIRONMENT TargetEnvironment
,
39 _In_ PKKERNEL_ROUTINE KernelRoutine
,
40 _In_opt_ PKRUNDOWN_ROUTINE RundownRoutine
,
41 _In_ PKNORMAL_ROUTINE NormalRoutine
,
42 _In_ KPROCESSOR_MODE Mode
,
50 _In_ PVOID SystemArgument1
,
51 _In_ PVOID SystemArgument2
,
52 _In_ KPRIORITY PriorityBoost
58 _In_ KPROCESSOR_MODE PreviousMode
,
60 _In_ PKEXCEPTION_FRAME ExceptionFrame
,
62 _Reserved_ PKEXCEPTION_FRAME ExceptionFrame
,
64 _In_ PKTRAP_FRAME TrapFrame
68 // Process/Thread Functions
73 _In_ KPRIORITY Increment
84 KeSetEventBoostPriority(
86 _In_opt_ PKTHREAD
*Thread
92 _Inout_ PKTHREAD Thread
,
93 _In_ KAFFINITY Affinity
104 KeAddSystemServiceTable(
105 _In_ PULONG_PTR Base
,
106 _In_opt_ PULONG Count
,
113 // Spinlock Functions
118 _Inout_ PKSPIN_LOCK SpinLock
124 _Inout_ PKSPIN_LOCK SpinLock
129 KeAcquireQueuedSpinLockRaiseToSynch(
130 _In_ KSPIN_LOCK_QUEUE_NUMBER LockNumber
135 KeTryToAcquireQueuedSpinLockRaiseToSynch(
136 _In_ KSPIN_LOCK_QUEUE_NUMBER LockNumber
,
142 KeAcquireInStackQueuedSpinLockRaiseToSynch(
143 _In_ PKSPIN_LOCK SpinLock
,
144 _In_ PKLOCK_QUEUE_HANDLE LockHandle
149 // Interrupt Functions
153 KeInitializeInterrupt(
154 _Out_ PKINTERRUPT InterruptObject
,
155 _In_ PKSERVICE_ROUTINE ServiceRoutine
,
156 _In_ PVOID ServiceContext
,
157 _In_ PKSPIN_LOCK SpinLock
,
160 _In_ KIRQL SynchronizeIrql
,
161 _In_ KINTERRUPT_MODE InterruptMode
,
162 _In_ BOOLEAN ShareVector
,
163 _In_ CHAR ProcessorNumber
,
164 _In_ BOOLEAN FloatingSave
170 _Inout_ PKINTERRUPT InterruptObject
175 KeDisconnectInterrupt(
176 _Inout_ PKINTERRUPT InterruptObject
192 KiUnexpectedInterrupt(
198 KeEnterKernelDebugger(
211 _In_ PKTRAP_FRAME TrapFrame
,
213 _In_ PKEXCEPTION_FRAME ExceptionFrame
215 _Reserved_ PKEXCEPTION_FRAME ExceptionFrame
220 // Generic DPC Routines
225 _In_ PKDEFERRED_ROUTINE Routine
,
232 _In_ PVOID SystemArgument1
237 KeSignalCallDpcSynchronize(
238 _In_ PVOID SystemArgument2
242 // ARC Configuration Functions. Only enabled if you have ARC Support
245 PCONFIGURATION_COMPONENT_DATA
247 KeFindConfigurationNextEntry(
248 _In_ PCONFIGURATION_COMPONENT_DATA Child
,
249 _In_ CONFIGURATION_CLASS Class
,
250 _In_ CONFIGURATION_TYPE Type
,
251 _In_opt_ PULONG ComponentKey
,
252 _In_ PCONFIGURATION_COMPONENT_DATA
*NextLink
255 PCONFIGURATION_COMPONENT_DATA
257 KeFindConfigurationEntry(
258 _In_ PCONFIGURATION_COMPONENT_DATA Child
,
259 _In_ CONFIGURATION_CLASS Class
,
260 _In_ CONFIGURATION_TYPE Type
,
261 _In_opt_ PULONG ComponentKey
266 // Low-level Hardware/CPU Control Functions
271 _In_ BOOLEAN Invalid
,
272 _In_ BOOLEAN AllProcessors
291 _In_ KIRQL ProfileIrql
297 _In_ ULONG MaxIncrement
,
298 _In_ ULONG MinIncrement
304 _In_ ULONG BiosCommand
,
305 _Inout_ PCONTEXT BiosArguments
314 _In_ ULONG FunctionID
,
315 _In_ PVOID InputBuffer
,
316 _In_ ULONG InputLength
,
317 _Out_ PVOID
*OutputBuffer
,
318 _Out_ PULONG OutputLength
323 KeRaiseUserException(
324 _In_ NTSTATUS ExceptionCode
336 _In_ PCONTEXT Context
,
337 _In_ BOOLEAN TestAlert
345 _In_ ULONG ResultLength
,
353 _Out_ PHANDLE ProfileHandle
,
354 _In_ HANDLE ProcessHandle
,
355 _In_ PVOID ImageBase
,
356 _In_ ULONG ImageSize
,
357 _In_ ULONG Granularity
,
359 _In_ ULONG ProfilingSize
,
360 _In_ KPROFILE_SOURCE Source
,
361 _In_ KAFFINITY ProcessorMask
368 _In_ BOOLEAN Alertable
,
369 _In_ LARGE_INTEGER
*Interval
375 NtFlushInstructionCache(
376 _In_ HANDLE ProcessHandle
,
377 _In_ PVOID BaseAddress
,
378 _In_ ULONG NumberOfBytesToFlush
383 NtGetCurrentProcessorNumber(
391 _In_ HANDLE ThreadHandle
,
392 _Out_ PCONTEXT Context
405 NtQueryIntervalProfile(
406 _In_ KPROFILE_SOURCE ProfileSource
,
407 _Out_ PULONG Interval
413 NtQueryPerformanceCounter(
414 _Out_ PLARGE_INTEGER Counter
,
415 _Out_opt_ PLARGE_INTEGER Frequency
422 _Out_ PLARGE_INTEGER CurrentTime
428 NtQueryTimerResolution(
429 _Out_ PULONG MinimumResolution
,
430 _Out_ PULONG MaximumResolution
,
431 _Out_ PULONG ActualResolution
438 _In_ HANDLE ThreadHandle
,
439 _In_ PKNORMAL_ROUTINE ApcRoutine
,
440 _In_opt_ PVOID NormalContext
,
441 _In_opt_ PVOID SystemArgument1
,
442 _In_opt_ PVOID SystemArgument2
449 _In_ PEXCEPTION_RECORD ExceptionRecord
,
450 _In_ PCONTEXT Context
,
451 _In_ BOOLEAN SearchFrames
458 _In_ HANDLE ThreadHandle
,
459 _In_ PCONTEXT Context
465 NtSetIntervalProfile(
467 _In_ KPROFILE_SOURCE ClockSource
474 _In_ ULONG Selector1
,
475 _In_ LDT_ENTRY LdtEntry1
,
476 _In_ ULONG Selector2
,
477 _In_ LDT_ENTRY LdtEntry2
484 _In_ PLARGE_INTEGER SystemTime
,
485 _In_opt_ PLARGE_INTEGER NewSystemTime
491 NtSetTimerResolution(
492 _In_ ULONG RequestedResolution
,
493 _In_ BOOLEAN SetOrUnset
,
494 _Out_ PULONG ActualResolution
501 _In_ HANDLE ProfileHandle
508 _In_ HANDLE ProfileHandle
522 _In_ ULONG ControlCode
,
523 _In_ PVOID ControlData
530 _In_ ULONG RoutineIndex
,
532 _In_ ULONG ArgumentLength
,
533 _Out_opt_ PVOID
* Result
,
534 _Out_opt_ PULONG ResultLength
548 _In_ PCONTEXT Context
,
549 _In_ BOOLEAN TestAlert
557 _In_ ULONG ResultLength
,
565 _Out_ PHANDLE ProfileHandle
,
566 _In_ HANDLE ProcessHandle
,
567 _In_ PVOID ImageBase
,
568 _In_ ULONG ImageSize
,
569 _In_ ULONG Granularity
,
571 _In_ ULONG ProfilingSize
,
572 _In_ KPROFILE_SOURCE Source
,
573 _In_ KAFFINITY ProcessorMask
580 _In_ BOOLEAN Alertable
,
581 _In_ LARGE_INTEGER
*Interval
587 ZwFlushInstructionCache(
588 _In_ HANDLE ProcessHandle
,
589 _In_ PVOID BaseAddress
,
590 _In_ ULONG NumberOfBytesToFlush
597 _In_ HANDLE ThreadHandle
,
598 _Out_ PCONTEXT Context
611 ZwQueryIntervalProfile(
612 _In_ KPROFILE_SOURCE ProfileSource
,
613 _Out_ PULONG Interval
619 ZwQueryPerformanceCounter(
620 _Out_ PLARGE_INTEGER Counter
,
621 _Out_opt_ PLARGE_INTEGER Frequency
628 _Out_ PLARGE_INTEGER CurrentTime
634 ZwQueryTimerResolution(
635 _Out_ PULONG MinimumResolution
,
636 _Out_ PULONG MaximumResolution
,
637 _Out_ PULONG ActualResolution
644 _In_ HANDLE ThreadHandle
,
645 _In_ PKNORMAL_ROUTINE ApcRoutine
,
646 _In_opt_ PVOID NormalContext
,
647 _In_opt_ PVOID SystemArgument1
,
648 _In_opt_ PVOID SystemArgument2
655 _In_ PEXCEPTION_RECORD ExceptionRecord
,
656 _In_ PCONTEXT Context
,
657 _In_ BOOLEAN SearchFrames
664 _In_ HANDLE ThreadHandle
,
665 _In_ PCONTEXT Context
671 ZwSetIntervalProfile(
673 _In_ KPROFILE_SOURCE ClockSource
680 _In_ ULONG Selector1
,
681 _In_ LDT_ENTRY LdtEntry1
,
682 _In_ ULONG Selector2
,
683 _In_ LDT_ENTRY LdtEntry2
690 _In_ PLARGE_INTEGER SystemTime
,
691 _In_opt_ PLARGE_INTEGER NewSystemTime
697 ZwSetTimerResolution(
698 _In_ ULONG RequestedResolution
,
699 _In_ BOOLEAN SetOrUnset
,
700 _Out_ PULONG ActualResolution
707 _In_ HANDLE ProfileHandle
714 _In_ HANDLE ProfileHandle
728 _In_ ULONG ControlCode
,
729 _In_ PVOID ControlData
736 _In_ ULONG RoutineIndex
,
738 _In_ ULONG ArgumentLength
,
739 _Out_opt_ PVOID
* Result
,
740 _Out_opt_ PULONG ResultLength