xref: /reactos/sdk/include/ndk/kefuncs.h (revision aea948a7)
1 /*++ NDK Version: 0098
2 
3 Copyright (c) Alex Ionescu.  All rights reserved.
4 
5 Header Name:
6 
7     kefuncs.h
8 
9 Abstract:
10 
11     Functions definitions for the Kernel services.
12 
13 Author:
14 
15     Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16 
17 --*/
18 
19 #ifndef _KEFUNCS_H
20 #define _KEFUNCS_H
21 
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26 #include <ketypes.h>
27 #include <section_attribs.h>
28 
29 #ifndef NTOS_MODE_USER
30 
31 //
32 // APC Functions
33 //
34 VOID
35 NTAPI
36 KeInitializeApc(
37     _In_ PKAPC Apc,
38     _In_ PKTHREAD Thread,
39     _In_ KAPC_ENVIRONMENT TargetEnvironment,
40     _In_ PKKERNEL_ROUTINE KernelRoutine,
41     _In_opt_ PKRUNDOWN_ROUTINE RundownRoutine,
42     _In_ PKNORMAL_ROUTINE NormalRoutine,
43     _In_ KPROCESSOR_MODE Mode,
44     _In_ PVOID Context
45 );
46 
47 BOOLEAN
48 NTAPI
49 KeInsertQueueApc(
50     _In_ PKAPC Apc,
51     _In_ PVOID SystemArgument1,
52     _In_ PVOID SystemArgument2,
53     _In_ KPRIORITY PriorityBoost
54 );
55 
56 VOID
57 NTAPI
58 KiDeliverApc(
59     _In_ KPROCESSOR_MODE PreviousMode,
60 #ifdef _M_AMD64
61     _In_ PKEXCEPTION_FRAME ExceptionFrame,
62 #else
63     _Reserved_ PKEXCEPTION_FRAME ExceptionFrame,
64 #endif
65     _In_ PKTRAP_FRAME TrapFrame
66 );
67 
68 //
69 // Process/Thread Functions
70 //
71 VOID
72 NTAPI
73 KeTerminateThread(
74     _In_ KPRIORITY Increment
75 );
76 
77 BOOLEAN
78 NTAPI
79 KeIsAttachedProcess(
80     VOID
81 );
82 
83 VOID
84 NTAPI
85 KeSetEventBoostPriority(
86     _In_ PKEVENT Event,
87     _In_opt_ PKTHREAD *Thread
88 );
89 
90 KAFFINITY
91 NTAPI
92 KeSetAffinityThread(
93     _Inout_ PKTHREAD Thread,
94     _In_ KAFFINITY Affinity
95 );
96 
97 PKPROCESS
98 NTAPI
99 KeGetCurrentProcess(
100     VOID
101 );
102 
103 BOOLEAN
104 NTAPI
105 KeAddSystemServiceTable(
106     _In_ PULONG_PTR Base,
107     _In_opt_ PULONG Count,
108     _In_ ULONG Limit,
109     _In_ PUCHAR Number,
110     _In_ ULONG Index
111 );
112 
113 //
114 // Spinlock Functions
115 //
116 VOID
117 FASTCALL
118 KiAcquireSpinLock(
119     _Inout_ PKSPIN_LOCK SpinLock
120 );
121 
122 VOID
123 FASTCALL
124 KiReleaseSpinLock(
125     _Inout_ PKSPIN_LOCK SpinLock
126 );
127 
128 KIRQL
129 FASTCALL
130 KeAcquireQueuedSpinLockRaiseToSynch(
131     _In_ KSPIN_LOCK_QUEUE_NUMBER LockNumber
132 );
133 
134 BOOLEAN
135 FASTCALL
136 KeTryToAcquireQueuedSpinLockRaiseToSynch(
137     _In_ KSPIN_LOCK_QUEUE_NUMBER LockNumber,
138     _In_ PKIRQL OldIrql
139 );
140 
141 VOID
142 FASTCALL
143 KeAcquireInStackQueuedSpinLockRaiseToSynch(
144     _In_ PKSPIN_LOCK SpinLock,
145     _In_ PKLOCK_QUEUE_HANDLE LockHandle
146 );
147 
148 
149 //
150 // Interrupt Functions
151 //
152 VOID
153 NTAPI
154 KeInitializeInterrupt(
155     _Out_ PKINTERRUPT InterruptObject,
156     _In_ PKSERVICE_ROUTINE ServiceRoutine,
157     _In_ PVOID ServiceContext,
158     _In_ PKSPIN_LOCK SpinLock,
159     _In_ ULONG Vector,
160     _In_ KIRQL Irql,
161     _In_ KIRQL SynchronizeIrql,
162     _In_ KINTERRUPT_MODE InterruptMode,
163     _In_ BOOLEAN ShareVector,
164     _In_ CHAR ProcessorNumber,
165     _In_ BOOLEAN FloatingSave
166 );
167 
168 BOOLEAN
169 NTAPI
170 KeConnectInterrupt(
171     _Inout_ PKINTERRUPT InterruptObject
172 );
173 
174 BOOLEAN
175 NTAPI
176 KeDisconnectInterrupt(
177     _Inout_ PKINTERRUPT InterruptObject
178 );
179 
180 VOID
181 NTAPI
182 KiDispatchInterrupt(
183     VOID
184 );
185 
186 VOID
187 NTAPI
188 KiCoprocessorError(
189     VOID
190 );
191 
192 DECLSPEC_NORETURN
193 VOID
194 __cdecl
195 KiUnexpectedInterrupt(
196     VOID
197 );
198 
199 VOID
200 NTAPI
201 KeEnterKernelDebugger(
202     VOID
203 );
204 
205 BOOLEAN
206 NTAPI
207 KeIsExecutingDpc(
208     VOID
209 );
210 
211 BOOLEAN
212 NTAPI
213 KiIpiServiceRoutine(
214     _In_ PKTRAP_FRAME TrapFrame,
215 #ifdef _M_AMD64
216     _In_ PKEXCEPTION_FRAME ExceptionFrame
217 #else
218     _Reserved_ PKEXCEPTION_FRAME ExceptionFrame
219 #endif
220 );
221 
222 //
223 // Generic DPC Routines
224 //
225 VOID
226 NTAPI
227 KeGenericCallDpc(
228     _In_ PKDEFERRED_ROUTINE Routine,
229     _In_ PVOID Context
230 );
231 
232 VOID
233 NTAPI
234 KeSignalCallDpcDone(
235     _In_ PVOID SystemArgument1
236 );
237 
238 BOOLEAN
239 NTAPI
240 KeSignalCallDpcSynchronize(
241     _In_ PVOID SystemArgument2
242 );
243 
244 //
245 // ARC Configuration Functions. Only enabled if you have ARC Support
246 //
247 #ifdef _ARC_
248 PCONFIGURATION_COMPONENT_DATA
249 NTAPI
250 KeFindConfigurationNextEntry(
251     _In_ PCONFIGURATION_COMPONENT_DATA Child,
252     _In_ CONFIGURATION_CLASS Class,
253     _In_ CONFIGURATION_TYPE Type,
254     _In_opt_ PULONG ComponentKey,
255     _In_ PCONFIGURATION_COMPONENT_DATA *NextLink
256 );
257 
258 PCONFIGURATION_COMPONENT_DATA
259 NTAPI
260 KeFindConfigurationEntry(
261     _In_ PCONFIGURATION_COMPONENT_DATA Child,
262     _In_ CONFIGURATION_CLASS Class,
263     _In_ CONFIGURATION_TYPE Type,
264     _In_opt_ PULONG ComponentKey
265 );
266 #endif
267 
268 //
269 // Low-level Hardware/CPU Control Functions
270 //
271 VOID
272 NTAPI
273 KeFlushEntireTb(
274     _In_ BOOLEAN Invalid,
275     _In_ BOOLEAN AllProcessors
276 );
277 
278 VOID
279 NTAPI
280 KeSetDmaIoCoherency(
281     _In_ ULONG Coherency
282 );
283 
284 VOID
285 KeSetGdtSelector(
286     _In_ ULONG Entry,
287     _In_ ULONG Value1,
288     _In_ ULONG Value2
289 );
290 
291 VOID
292 NTAPI
293 KeProfileInterrupt(
294     _In_ PKTRAP_FRAME TrapFrame
295 );
296 
297 VOID
298 NTAPI
299 KeProfileInterruptWithSource(
300     _In_ PKTRAP_FRAME TrapFrame,
301     _In_ KPROFILE_SOURCE Source
302 );
303 
304 VOID
305 NTAPI
306 KeSetProfileIrql(
307     _In_ KIRQL ProfileIrql
308 );
309 
310 VOID
311 NTAPI
312 KeSetTimeIncrement(
313     _In_ ULONG MaxIncrement,
314     _In_ ULONG MinIncrement
315 );
316 
317 NTSTATUS
318 NTAPI
319 Ke386CallBios(
320     _In_ ULONG BiosCommand,
321     _Inout_ PCONTEXT BiosArguments
322 );
323 
324 //
325 // Misc. Functions
326 //
327 NTSTATUS
328 NTAPI
329 KeUserModeCallback(
330     _In_ ULONG FunctionID,
331     _In_reads_opt_(InputLength) PVOID InputBuffer,
332     _In_ ULONG InputLength,
333     _Outptr_result_buffer_(*OutputLength) PVOID *OutputBuffer,
334     _Out_ PULONG OutputLength
335 );
336 
337 NTSTATUS
338 NTAPI
339 KeRaiseUserException(
340     _In_ NTSTATUS ExceptionCode
341 );
342 
343 #endif
344 
345 //
346 // Native Calls
347 //
348 NTSYSCALLAPI
349 NTSTATUS
350 NTAPI
351 NtContinue(
352     _In_ PCONTEXT Context,
353     _In_ BOOLEAN TestAlert
354 );
355 
356 NTSYSCALLAPI
357 NTSTATUS
358 NTAPI
359 NtCallbackReturn(
360     _In_ PVOID Result,
361     _In_ ULONG ResultLength,
362     _In_ NTSTATUS Status
363 );
364 
365 NTSYSCALLAPI
366 NTSTATUS
367 NTAPI
368 NtCreateProfile(
369     _Out_ PHANDLE ProfileHandle,
370     _In_ HANDLE ProcessHandle,
371     _In_ PVOID ImageBase,
372     _In_ SIZE_T ImageSize,
373     _In_ ULONG Granularity,
374     _Out_ PVOID Buffer,
375     _In_ ULONG ProfilingSize,
376     _In_ KPROFILE_SOURCE Source,
377     _In_ KAFFINITY ProcessorMask
378 );
379 
380 NTSYSCALLAPI
381 NTSTATUS
382 NTAPI
383 NtCreateProfileEx(
384     _Out_ PHANDLE ProfileHandle,
385     _In_ HANDLE ProcessHandle,
386     _In_ PVOID ImageBase,
387     _In_ SIZE_T ImageSize,
388     _In_ ULONG Granularity,
389     _Out_ PVOID Buffer,
390     _In_ ULONG ProfilingSize,
391     _In_ KPROFILE_SOURCE Source,
392     _In_ USHORT GroupCount,
393     _In_reads_(GroupCount) PGROUP_AFFINITY Affinity
394 );
395 
396 NTSYSCALLAPI
397 NTSTATUS
398 NTAPI
399 NtDelayExecution(
400     _In_ BOOLEAN Alertable,
401     _In_ LARGE_INTEGER *Interval
402 );
403 
404 ULONG
405 NTAPI
406 NtGetCurrentProcessorNumber(
407     VOID
408 );
409 
410 NTSYSCALLAPI
411 NTSTATUS
412 NTAPI
413 NtGetContextThread(
414     _In_ HANDLE ThreadHandle,
415     _Out_ PCONTEXT Context
416 );
417 
418 NTSYSCALLAPI
419 ULONG
420 NTAPI
421 NtGetTickCount(
422     VOID
423 );
424 
425 NTSYSCALLAPI
426 NTSTATUS
427 NTAPI
428 NtQueryIntervalProfile(
429     _In_  KPROFILE_SOURCE ProfileSource,
430     _Out_ PULONG Interval
431 );
432 
433 NTSYSCALLAPI
434 NTSTATUS
435 NTAPI
436 NtQueryPerformanceCounter(
437     _Out_ PLARGE_INTEGER Counter,
438     _Out_opt_ PLARGE_INTEGER Frequency
439 );
440 
441 NTSYSCALLAPI
442 NTSTATUS
443 NTAPI
444 NtQuerySystemTime(
445     _Out_ PLARGE_INTEGER CurrentTime
446 );
447 
448 NTSYSCALLAPI
449 NTSTATUS
450 NTAPI
451 NtQueryTimerResolution(
452     _Out_ PULONG MinimumResolution,
453     _Out_ PULONG MaximumResolution,
454     _Out_ PULONG ActualResolution
455 );
456 
457 NTSYSCALLAPI
458 NTSTATUS
459 NTAPI
460 NtQueueApcThread(
461     _In_ HANDLE ThreadHandle,
462     _In_ PKNORMAL_ROUTINE ApcRoutine,
463     _In_opt_ PVOID NormalContext,
464     _In_opt_ PVOID SystemArgument1,
465     _In_opt_ PVOID SystemArgument2
466 );
467 
468 NTSYSCALLAPI
469 NTSTATUS
470 NTAPI
471 NtQueueApcThreadEx(
472     _In_ HANDLE ThreadHandle,
473     _In_opt_ HANDLE UserApcReserveHandle,
474     _In_ PKNORMAL_ROUTINE ApcRoutine,
475     _In_opt_ PVOID NormalContext,
476     _In_opt_ PVOID SystemArgument1,
477     _In_opt_ PVOID SystemArgument2
478 );
479 
480 NTSYSCALLAPI
481 NTSTATUS
482 NTAPI
483 NtRaiseException(
484     _In_ PEXCEPTION_RECORD ExceptionRecord,
485     _In_ PCONTEXT Context,
486     _In_ BOOLEAN SearchFrames
487 );
488 
489 NTSYSCALLAPI
490 NTSTATUS
491 NTAPI
492 NtSetContextThread(
493     _In_ HANDLE ThreadHandle,
494     _In_ PCONTEXT Context
495 );
496 
497 NTSYSCALLAPI
498 NTSTATUS
499 NTAPI
500 NtSetIntervalProfile(
501     _In_ ULONG Interval,
502     _In_ KPROFILE_SOURCE ClockSource
503 );
504 
505 NTSYSCALLAPI
506 NTSTATUS
507 NTAPI
508 NtSetLdtEntries(
509     _In_ ULONG Selector1,
510     _In_ LDT_ENTRY LdtEntry1,
511     _In_ ULONG Selector2,
512     _In_ LDT_ENTRY LdtEntry2
513 );
514 
515 NTSYSCALLAPI
516 NTSTATUS
517 NTAPI
518 NtSetSystemTime(
519     _In_ PLARGE_INTEGER SystemTime,
520     _In_opt_ PLARGE_INTEGER NewSystemTime
521 );
522 
523 NTSYSCALLAPI
524 NTSTATUS
525 NTAPI
526 NtSetTimerResolution(
527     _In_ ULONG RequestedResolution,
528     _In_ BOOLEAN SetOrUnset,
529     _Out_ PULONG ActualResolution
530 );
531 
532 NTSYSCALLAPI
533 NTSTATUS
534 NTAPI
535 NtStartProfile(
536     _In_ HANDLE ProfileHandle
537 );
538 
539 NTSYSCALLAPI
540 NTSTATUS
541 NTAPI
542 NtStopProfile(
543     _In_ HANDLE ProfileHandle
544 );
545 
546 NTSYSCALLAPI
547 NTSTATUS
548 NTAPI
549 NtTestAlert(
550     VOID
551 );
552 
553 NTSYSCALLAPI
554 NTSTATUS
555 NTAPI
556 NtVdmControl(
557     _In_ ULONG ControlCode,
558     _In_ PVOID ControlData
559 );
560 
561 NTSYSCALLAPI
562 NTSTATUS
563 NTAPI
564 NtW32Call(
565     _In_ ULONG RoutineIndex,
566     _In_ PVOID Argument,
567     _In_ ULONG ArgumentLength,
568     _Out_opt_ PVOID* Result,
569     _Out_opt_ PULONG ResultLength
570 );
571 
572 NTSYSCALLAPI
573 NTSTATUS
574 NTAPI
575 NtYieldExecution(
576     VOID
577 );
578 
579 NTSYSAPI
580 NTSTATUS
581 NTAPI
582 ZwContinue(
583     _In_ PCONTEXT Context,
584     _In_ BOOLEAN TestAlert
585 );
586 
587 NTSYSAPI
588 NTSTATUS
589 NTAPI
590 ZwCallbackReturn(
591     _In_ PVOID Result,
592     _In_ ULONG ResultLength,
593     _In_ NTSTATUS Status
594 );
595 
596 NTSYSAPI
597 NTSTATUS
598 NTAPI
599 ZwCreateProfile(
600     _Out_ PHANDLE ProfileHandle,
601     _In_ HANDLE ProcessHandle,
602     _In_ PVOID ImageBase,
603     _In_ ULONG ImageSize,
604     _In_ ULONG Granularity,
605     _Out_ PVOID Buffer,
606     _In_ ULONG ProfilingSize,
607     _In_ KPROFILE_SOURCE Source,
608     _In_ KAFFINITY ProcessorMask
609 );
610 
611 NTSYSAPI
612 NTSTATUS
613 NTAPI
614 ZwDelayExecution(
615     _In_ BOOLEAN Alertable,
616     _In_ LARGE_INTEGER *Interval
617 );
618 
619 NTSYSAPI
620 NTSTATUS
621 NTAPI
622 ZwFlushInstructionCache(
623     _In_ HANDLE ProcessHandle,
624     _In_ PVOID BaseAddress,
625     _In_ ULONG NumberOfBytesToFlush
626 );
627 
628 NTSYSAPI
629 NTSTATUS
630 NTAPI
631 ZwGetContextThread(
632     _In_ HANDLE ThreadHandle,
633     _Out_ PCONTEXT Context
634 );
635 
636 NTSYSAPI
637 ULONG
638 NTAPI
639 ZwGetTickCount(
640     VOID
641 );
642 
643 NTSYSAPI
644 NTSTATUS
645 NTAPI
646 ZwQueryIntervalProfile(
647     _In_  KPROFILE_SOURCE ProfileSource,
648     _Out_ PULONG Interval
649 );
650 
651 NTSYSAPI
652 NTSTATUS
653 NTAPI
654 ZwQueryPerformanceCounter(
655     _Out_ PLARGE_INTEGER Counter,
656     _Out_opt_ PLARGE_INTEGER Frequency
657 );
658 
659 NTSYSAPI
660 NTSTATUS
661 NTAPI
662 ZwQuerySystemTime(
663     _Out_ PLARGE_INTEGER CurrentTime
664 );
665 
666 NTSYSAPI
667 NTSTATUS
668 NTAPI
669 ZwQueryTimerResolution(
670     _Out_ PULONG MinimumResolution,
671     _Out_ PULONG MaximumResolution,
672     _Out_ PULONG ActualResolution
673 );
674 
675 NTSYSAPI
676 NTSTATUS
677 NTAPI
678 ZwQueueApcThread(
679     _In_ HANDLE ThreadHandle,
680     _In_ PKNORMAL_ROUTINE ApcRoutine,
681     _In_opt_ PVOID NormalContext,
682     _In_opt_ PVOID SystemArgument1,
683     _In_opt_ PVOID SystemArgument2
684 );
685 
686 NTSYSAPI
687 NTSTATUS
688 NTAPI
689 ZwRaiseException(
690     _In_ PEXCEPTION_RECORD ExceptionRecord,
691     _In_ PCONTEXT Context,
692     _In_ BOOLEAN SearchFrames
693 );
694 
695 NTSYSAPI
696 NTSTATUS
697 NTAPI
698 ZwSetContextThread(
699     _In_ HANDLE ThreadHandle,
700     _In_ PCONTEXT Context
701 );
702 
703 NTSYSAPI
704 NTSTATUS
705 NTAPI
706 ZwSetIntervalProfile(
707     _In_ ULONG Interval,
708     _In_ KPROFILE_SOURCE ClockSource
709 );
710 
711 NTSYSAPI
712 NTSTATUS
713 NTAPI
714 ZwSetLdtEntries(
715     _In_ ULONG Selector1,
716     _In_ LDT_ENTRY LdtEntry1,
717     _In_ ULONG Selector2,
718     _In_ LDT_ENTRY LdtEntry2
719 );
720 
721 NTSYSAPI
722 NTSTATUS
723 NTAPI
724 ZwSetSystemTime(
725     _In_ PLARGE_INTEGER SystemTime,
726     _In_opt_ PLARGE_INTEGER NewSystemTime
727 );
728 
729 NTSYSAPI
730 NTSTATUS
731 NTAPI
732 ZwSetTimerResolution(
733     _In_ ULONG RequestedResolution,
734     _In_ BOOLEAN SetOrUnset,
735     _Out_ PULONG ActualResolution
736 );
737 
738 NTSYSAPI
739 NTSTATUS
740 NTAPI
741 ZwStartProfile(
742     _In_ HANDLE ProfileHandle
743 );
744 
745 NTSYSAPI
746 NTSTATUS
747 NTAPI
748 ZwStopProfile(
749     _In_ HANDLE ProfileHandle
750 );
751 
752 NTSYSAPI
753 NTSTATUS
754 NTAPI
755 ZwTestAlert(
756     VOID
757 );
758 
759 NTSYSAPI
760 NTSTATUS
761 NTAPI
762 ZwVdmControl(
763     _In_ ULONG ControlCode,
764     _In_ PVOID ControlData
765 );
766 
767 NTSYSAPI
768 NTSTATUS
769 NTAPI
770 ZwW32Call(
771     _In_ ULONG RoutineIndex,
772     _In_ PVOID Argument,
773     _In_ ULONG ArgumentLength,
774     _Out_opt_ PVOID* Result,
775     _Out_opt_ PULONG ResultLength
776 );
777 
778 NTSYSAPI
779 NTSTATUS
780 NTAPI
781 ZwYieldExecution(
782     VOID
783 );
784 #endif
785