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