Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenke.h
Go to the documentation of this file.
00001 #pragma once 00002 00003 /* INCLUDES *****************************************************************/ 00004 00005 #include "arch/ke.h" 00006 00007 /* INTERNAL KERNEL TYPES ****************************************************/ 00008 00009 typedef struct _WOW64_PROCESS 00010 { 00011 PVOID Wow64; 00012 } WOW64_PROCESS, *PWOW64_PROCESS; 00013 00014 typedef struct _KPROFILE_SOURCE_OBJECT 00015 { 00016 KPROFILE_SOURCE Source; 00017 LIST_ENTRY ListEntry; 00018 } KPROFILE_SOURCE_OBJECT, *PKPROFILE_SOURCE_OBJECT; 00019 00020 typedef enum _CONNECT_TYPE 00021 { 00022 NoConnect, 00023 NormalConnect, 00024 ChainConnect, 00025 UnknownConnect 00026 } CONNECT_TYPE, *PCONNECT_TYPE; 00027 00028 typedef struct _DISPATCH_INFO 00029 { 00030 CONNECT_TYPE Type; 00031 PKINTERRUPT Interrupt; 00032 PKINTERRUPT_ROUTINE NoDispatch; 00033 PKINTERRUPT_ROUTINE InterruptDispatch; 00034 PKINTERRUPT_ROUTINE FloatingDispatch; 00035 PKINTERRUPT_ROUTINE ChainedDispatch; 00036 PKINTERRUPT_ROUTINE *FlatDispatch; 00037 } DISPATCH_INFO, *PDISPATCH_INFO; 00038 00039 typedef struct _DEFERRED_REVERSE_BARRIER 00040 { 00041 ULONG Barrier; 00042 ULONG TotalProcessors; 00043 } DEFERRED_REVERSE_BARRIER, *PDEFERRED_REVERSE_BARRIER; 00044 00045 typedef struct _KI_SAMPLE_MAP 00046 { 00047 LARGE_INTEGER PerfStart; 00048 LARGE_INTEGER PerfEnd; 00049 LONGLONG PerfDelta; 00050 LARGE_INTEGER PerfFreq; 00051 LONGLONG TSCStart; 00052 LONGLONG TSCEnd; 00053 LONGLONG TSCDelta; 00054 ULONG MHz; 00055 } KI_SAMPLE_MAP, *PKI_SAMPLE_MAP; 00056 00057 typedef struct _KTIMER_TABLE_ENTRY 00058 { 00059 LIST_ENTRY Entry; 00060 ULARGE_INTEGER Time; 00061 } KTIMER_TABLE_ENTRY, *PKTIMER_TABLE_ENTRY; 00062 00063 #define MAX_TIMER_DPCS 16 00064 00065 typedef struct _DPC_QUEUE_ENTRY 00066 { 00067 PKDPC Dpc; 00068 PKDEFERRED_ROUTINE Routine; 00069 PVOID Context; 00070 } DPC_QUEUE_ENTRY, *PDPC_QUEUE_ENTRY; 00071 00072 typedef struct _KNMI_HANDLER_CALLBACK 00073 { 00074 struct _KNMI_HANDLER_CALLBACK* Next; 00075 PNMI_CALLBACK Callback; 00076 PVOID Context; 00077 PVOID Handle; 00078 } KNMI_HANDLER_CALLBACK, *PKNMI_HANDLER_CALLBACK; 00079 00080 typedef PCHAR 00081 (NTAPI *PKE_BUGCHECK_UNICODE_TO_ANSI)( 00082 IN PUNICODE_STRING Unicode, 00083 IN PCHAR Ansi, 00084 IN ULONG Length 00085 ); 00086 00087 extern PKNMI_HANDLER_CALLBACK KiNmiCallbackListHead; 00088 extern KSPIN_LOCK KiNmiCallbackListLock; 00089 extern PVOID KeUserApcDispatcher; 00090 extern PVOID KeUserCallbackDispatcher; 00091 extern PVOID KeUserExceptionDispatcher; 00092 extern PVOID KeRaiseUserExceptionDispatcher; 00093 extern LARGE_INTEGER KeBootTime; 00094 extern ULONGLONG KeBootTimeBias; 00095 extern BOOLEAN ExCmosClockIsSane; 00096 extern USHORT KeProcessorArchitecture; 00097 extern USHORT KeProcessorLevel; 00098 extern USHORT KeProcessorRevision; 00099 extern ULONG KeFeatureBits; 00100 extern KNODE KiNode0; 00101 extern PKNODE KeNodeBlock[1]; 00102 extern UCHAR KeNumberNodes; 00103 extern UCHAR KeProcessNodeSeed; 00104 extern ETHREAD KiInitialThread; 00105 extern EPROCESS KiInitialProcess; 00106 extern PULONG KiInterruptTemplateObject; 00107 extern PULONG KiInterruptTemplateDispatch; 00108 extern PULONG KiInterruptTemplate2ndDispatch; 00109 extern ULONG KiUnexpectedEntrySize; 00110 extern ULONG_PTR KiDoubleFaultStack; 00111 extern EX_PUSH_LOCK KernelAddressSpaceLock; 00112 extern ULONG KiMaximumDpcQueueDepth; 00113 extern ULONG KiMinimumDpcRate; 00114 extern ULONG KiAdjustDpcThreshold; 00115 extern ULONG KiIdealDpcRate; 00116 extern BOOLEAN KeThreadDpcEnable; 00117 extern LARGE_INTEGER KiTimeIncrementReciprocal; 00118 extern UCHAR KiTimeIncrementShiftCount; 00119 extern ULONG KiTimeLimitIsrMicroseconds; 00120 extern ULONG KiServiceLimit; 00121 extern LIST_ENTRY KeBugcheckCallbackListHead, KeBugcheckReasonCallbackListHead; 00122 extern KSPIN_LOCK BugCheckCallbackLock; 00123 extern KDPC KiTimerExpireDpc; 00124 extern KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE]; 00125 extern FAST_MUTEX KiGenericCallDpcMutex; 00126 extern LIST_ENTRY KiProfileListHead, KiProfileSourceListHead; 00127 extern KSPIN_LOCK KiProfileLock; 00128 extern LIST_ENTRY KiProcessListHead; 00129 extern LIST_ENTRY KiProcessInSwapListHead, KiProcessOutSwapListHead; 00130 extern LIST_ENTRY KiStackInSwapListHead; 00131 extern KEVENT KiSwapEvent; 00132 extern PKPRCB KiProcessorBlock[]; 00133 extern ULONG KiMask32Array[MAXIMUM_PRIORITY]; 00134 extern ULONG_PTR KiIdleSummary; 00135 extern PVOID KeUserApcDispatcher; 00136 extern PVOID KeUserCallbackDispatcher; 00137 extern PVOID KeUserExceptionDispatcher; 00138 extern PVOID KeRaiseUserExceptionDispatcher; 00139 extern ULONG KeTimeIncrement; 00140 extern ULONG KeTimeAdjustment; 00141 extern BOOLEAN KiTimeAdjustmentEnabled; 00142 extern LONG KiTickOffset; 00143 extern ULONG_PTR KiBugCheckData[5]; 00144 extern ULONG KiFreezeFlag; 00145 extern ULONG KiDPCTimeout; 00146 extern PGDI_BATCHFLUSH_ROUTINE KeGdiFlushUserBatch; 00147 extern ULONGLONG BootCycles, BootCyclesEnd; 00148 extern ULONG ProcessCount; 00149 extern VOID __cdecl KiInterruptTemplate(VOID); 00150 00151 /* MACROS *************************************************************************/ 00152 00153 #define AFFINITY_MASK(Id) KiMask32Array[Id] 00154 #define PRIORITY_MASK(Id) KiMask32Array[Id] 00155 00156 /* Tells us if the Timer or Event is a Syncronization or Notification Object */ 00157 #define TIMER_OR_EVENT_TYPE 0x7L 00158 00159 /* One of the Reserved Wait Blocks, this one is for the Thread's Timer */ 00160 #define TIMER_WAIT_BLOCK 0x3L 00161 00162 #ifdef _M_ARM // FIXME: remove this once our headers are cleaned up 00163 // 00164 // A system call ID is formatted as such: 00165 // .________________________________________________________________. 00166 // | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 00167 // |--------------|-------------------------------------------------| 00168 // | TABLE NUMBER | TABLE OFFSET | 00169 // \----------------------------------------------------------------/ 00170 // 00171 // 00172 // The table number is then used as an index into the service descriptor table. 00173 #define TABLE_NUMBER_BITS 3 00174 #define TABLE_OFFSET_BITS 12 00175 00176 // 00177 // There are 2 tables (kernel and shadow, used by Win32K) 00178 // 00179 #define NUMBER_SERVICE_TABLES 2 00180 #define NTOS_SERVICE_INDEX 0 00181 #define WIN32K_SERVICE_INDEX 1 00182 00183 // 00184 // NB. From assembly code, the table number must be computed as an offset into 00185 // the service descriptor table. 00186 // 00187 // Each entry into the table is 16 bytes long on 32-bit architectures, and 00188 // 32 bytes long on 64-bit architectures. 00189 // 00190 // Thus, Table Number 1 is offset 16 (0x10) on x86, and offset 32 (0x20) on 00191 // x64. 00192 // 00193 #ifdef _WIN64 00194 #define BITS_PER_ENTRY 5 // (1 << 5) = 32 bytes 00195 #else 00196 #define BITS_PER_ENTRY 4 // (1 << 4) = 16 bytes 00197 #endif 00198 00199 // 00200 // We want the table number, but leave some extra bits to we can have the offset 00201 // into the descriptor table. 00202 // 00203 #define SERVICE_TABLE_SHIFT (12 - BITS_PER_ENTRY) 00204 00205 // 00206 // Now the table number (as an offset) is corrupted with part of the table offset 00207 // This mask will remove the extra unwanted bits, and give us the offset into the 00208 // descriptor table proper. 00209 // 00210 #define SERVICE_TABLE_MASK (((1 << TABLE_NUMBER_BITS) - 1) << BITS_PER_ENTRY) 00211 00212 // 00213 // To get the table offset (ie: the service call number), just keep the 12 bits 00214 // 00215 #define SERVICE_NUMBER_MASK ((1 << TABLE_OFFSET_BITS) - 1) 00216 00217 // 00218 // We'll often need to check if this is a graphics call. This is done by comparing 00219 // the table number offset with the known Win32K table number offset. 00220 // This is usually index 1, so table number offset 0x10 (x86) or 0x20 (x64) 00221 // 00222 #define SERVICE_TABLE_TEST (WIN32K_SERVICE_INDEX << BITS_PER_ENTRY) 00223 00224 #endif 00225 00226 #define KTS_SYSCALL_BIT (((KTRAP_STATE_BITS) { { .SystemCall = TRUE } }).Bits) 00227 #define KTS_PM_BIT (((KTRAP_STATE_BITS) { { .PreviousMode = TRUE } }).Bits) 00228 #define KTS_SEG_BIT (((KTRAP_STATE_BITS) { { .Segments = TRUE } }).Bits) 00229 #define KTS_VOL_BIT (((KTRAP_STATE_BITS) { { .Volatiles = TRUE } }).Bits) 00230 #define KTS_FULL_BIT (((KTRAP_STATE_BITS) { { .Full = TRUE } }).Bits) 00231 00232 /* INTERNAL KERNEL FUNCTIONS ************************************************/ 00233 00234 VOID 00235 NTAPI 00236 CPUID( 00237 IN ULONG InfoType, 00238 OUT PULONG CpuInfoEax, 00239 OUT PULONG CpuInfoEbx, 00240 OUT PULONG CpuInfoEcx, 00241 OUT PULONG CpuInfoEdx 00242 ); 00243 00244 LONGLONG 00245 FASTCALL 00246 RDMSR( 00247 IN ULONG Register 00248 ); 00249 00250 VOID 00251 NTAPI 00252 WRMSR( 00253 IN ULONG Register, 00254 IN LONGLONG Value 00255 ); 00256 00257 /* Finds a new thread to run */ 00258 LONG_PTR 00259 FASTCALL 00260 KiSwapThread( 00261 IN PKTHREAD Thread, 00262 IN PKPRCB Prcb 00263 ); 00264 00265 VOID 00266 NTAPI 00267 KeReadyThread( 00268 IN PKTHREAD Thread 00269 ); 00270 00271 BOOLEAN 00272 NTAPI 00273 KeSetDisableBoostThread( 00274 IN OUT PKTHREAD Thread, 00275 IN BOOLEAN Disable 00276 ); 00277 00278 BOOLEAN 00279 NTAPI 00280 KeSetDisableBoostProcess( 00281 IN PKPROCESS Process, 00282 IN BOOLEAN Disable 00283 ); 00284 00285 BOOLEAN 00286 NTAPI 00287 KeSetAutoAlignmentProcess( 00288 IN PKPROCESS Process, 00289 IN BOOLEAN Enable 00290 ); 00291 00292 KAFFINITY 00293 NTAPI 00294 KeSetAffinityProcess( 00295 IN PKPROCESS Process, 00296 IN KAFFINITY Affinity 00297 ); 00298 00299 VOID 00300 NTAPI 00301 KeBoostPriorityThread( 00302 IN PKTHREAD Thread, 00303 IN KPRIORITY Increment 00304 ); 00305 00306 VOID 00307 NTAPI 00308 KeBalanceSetManager(IN PVOID Context); 00309 00310 VOID 00311 NTAPI 00312 KiReadyThread(IN PKTHREAD Thread); 00313 00314 ULONG 00315 NTAPI 00316 KeSuspendThread(PKTHREAD Thread); 00317 00318 BOOLEAN 00319 NTAPI 00320 KeReadStateThread(IN PKTHREAD Thread); 00321 00322 BOOLEAN 00323 FASTCALL 00324 KiSwapContext( 00325 IN KIRQL WaitIrql, 00326 IN PKTHREAD CurrentThread 00327 ); 00328 00329 VOID 00330 NTAPI 00331 KiAdjustQuantumThread(IN PKTHREAD Thread); 00332 00333 VOID 00334 FASTCALL 00335 KiExitDispatcher(KIRQL OldIrql); 00336 00337 VOID 00338 FASTCALL 00339 KiDeferredReadyThread(IN PKTHREAD Thread); 00340 00341 PKTHREAD 00342 FASTCALL 00343 KiIdleSchedule( 00344 IN PKPRCB Prcb 00345 ); 00346 00347 VOID 00348 FASTCALL 00349 KiProcessDeferredReadyList( 00350 IN PKPRCB Prcb 00351 ); 00352 00353 KAFFINITY 00354 FASTCALL 00355 KiSetAffinityThread( 00356 IN PKTHREAD Thread, 00357 IN KAFFINITY Affinity 00358 ); 00359 00360 PKTHREAD 00361 FASTCALL 00362 KiSelectNextThread( 00363 IN PKPRCB Prcb 00364 ); 00365 00366 BOOLEAN 00367 FASTCALL 00368 KiInsertTimerTable( 00369 IN PKTIMER Timer, 00370 IN ULONG Hand 00371 ); 00372 00373 VOID 00374 FASTCALL 00375 KiTimerListExpire( 00376 IN PLIST_ENTRY ExpiredListHead, 00377 IN KIRQL OldIrql 00378 ); 00379 00380 BOOLEAN 00381 FASTCALL 00382 KiInsertTreeTimer( 00383 IN PKTIMER Timer, 00384 IN LARGE_INTEGER Interval 00385 ); 00386 00387 VOID 00388 FASTCALL 00389 KiCompleteTimer( 00390 IN PKTIMER Timer, 00391 IN PKSPIN_LOCK_QUEUE LockQueue 00392 ); 00393 00394 /* gmutex.c ********************************************************************/ 00395 00396 VOID 00397 FASTCALL 00398 KiAcquireGuardedMutex( 00399 IN OUT PKGUARDED_MUTEX GuardedMutex 00400 ); 00401 00402 VOID 00403 FASTCALL 00404 KiAcquireFastMutex( 00405 IN PFAST_MUTEX FastMutex 00406 ); 00407 00408 /* gate.c **********************************************************************/ 00409 00410 VOID 00411 FASTCALL 00412 KeInitializeGate(PKGATE Gate); 00413 00414 VOID 00415 FASTCALL 00416 KeSignalGateBoostPriority(PKGATE Gate); 00417 00418 VOID 00419 FASTCALL 00420 KeWaitForGate( 00421 PKGATE Gate, 00422 KWAIT_REASON WaitReason, 00423 KPROCESSOR_MODE WaitMode 00424 ); 00425 00426 /* ipi.c ********************************************************************/ 00427 00428 VOID 00429 FASTCALL 00430 KiIpiSend( 00431 KAFFINITY TargetSet, 00432 ULONG IpiRequest 00433 ); 00434 00435 VOID 00436 NTAPI 00437 KiIpiSendPacket( 00438 IN KAFFINITY TargetProcessors, 00439 IN PKIPI_WORKER WorkerFunction, 00440 IN PKIPI_BROADCAST_WORKER BroadcastFunction, 00441 IN ULONG_PTR Context, 00442 IN PULONG Count 00443 ); 00444 00445 VOID 00446 FASTCALL 00447 KiIpiSignalPacketDone( 00448 IN PKIPI_CONTEXT PacketContext 00449 ); 00450 00451 VOID 00452 FASTCALL 00453 KiIpiSignalPacketDoneAndStall( 00454 IN PKIPI_CONTEXT PacketContext, 00455 IN volatile PULONG ReverseStall 00456 ); 00457 00458 /* next file ***************************************************************/ 00459 00460 UCHAR 00461 NTAPI 00462 KeFindNextRightSetAffinity( 00463 IN UCHAR Number, 00464 IN ULONG Set 00465 ); 00466 00467 VOID 00468 NTAPI 00469 DbgBreakPointNoBugCheck(VOID); 00470 00471 VOID 00472 NTAPI 00473 KeInitializeProfile( 00474 struct _KPROFILE* Profile, 00475 struct _KPROCESS* Process, 00476 PVOID ImageBase, 00477 SIZE_T ImageSize, 00478 ULONG BucketSize, 00479 KPROFILE_SOURCE ProfileSource, 00480 KAFFINITY Affinity 00481 ); 00482 00483 BOOLEAN 00484 NTAPI 00485 KeStartProfile( 00486 struct _KPROFILE* Profile, 00487 PVOID Buffer 00488 ); 00489 00490 BOOLEAN 00491 NTAPI 00492 KeStopProfile(struct _KPROFILE* Profile); 00493 00494 ULONG 00495 NTAPI 00496 KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource); 00497 00498 VOID 00499 NTAPI 00500 KeSetIntervalProfile( 00501 KPROFILE_SOURCE ProfileSource, 00502 ULONG Interval 00503 ); 00504 00505 VOID 00506 NTAPI 00507 KeProfileInterrupt( 00508 PKTRAP_FRAME TrapFrame 00509 ); 00510 00511 VOID 00512 NTAPI 00513 KeProfileInterruptWithSource( 00514 IN PKTRAP_FRAME TrapFrame, 00515 IN KPROFILE_SOURCE Source 00516 ); 00517 00518 VOID 00519 NTAPI 00520 KeUpdateRunTime( 00521 PKTRAP_FRAME TrapFrame, 00522 KIRQL Irql 00523 ); 00524 00525 VOID 00526 NTAPI 00527 KiExpireTimers( 00528 PKDPC Dpc, 00529 PVOID DeferredContext, 00530 PVOID SystemArgument1, 00531 PVOID SystemArgument2 00532 ); 00533 00534 VOID 00535 NTAPI 00536 KeInitializeThread( 00537 IN PKPROCESS Process, 00538 IN OUT PKTHREAD Thread, 00539 IN PKSYSTEM_ROUTINE SystemRoutine, 00540 IN PKSTART_ROUTINE StartRoutine, 00541 IN PVOID StartContext, 00542 IN PCONTEXT Context, 00543 IN PVOID Teb, 00544 IN PVOID KernelStack 00545 ); 00546 00547 VOID 00548 NTAPI 00549 KeUninitThread( 00550 IN PKTHREAD Thread 00551 ); 00552 00553 NTSTATUS 00554 NTAPI 00555 KeInitThread( 00556 IN OUT PKTHREAD Thread, 00557 IN PVOID KernelStack, 00558 IN PKSYSTEM_ROUTINE SystemRoutine, 00559 IN PKSTART_ROUTINE StartRoutine, 00560 IN PVOID StartContext, 00561 IN PCONTEXT Context, 00562 IN PVOID Teb, 00563 IN PKPROCESS Process 00564 ); 00565 00566 VOID 00567 NTAPI 00568 KiInitializeContextThread( 00569 PKTHREAD Thread, 00570 PKSYSTEM_ROUTINE SystemRoutine, 00571 PKSTART_ROUTINE StartRoutine, 00572 PVOID StartContext, 00573 PCONTEXT Context 00574 ); 00575 00576 VOID 00577 NTAPI 00578 KeStartThread( 00579 IN OUT PKTHREAD Thread 00580 ); 00581 00582 BOOLEAN 00583 NTAPI 00584 KeAlertThread( 00585 IN PKTHREAD Thread, 00586 IN KPROCESSOR_MODE AlertMode 00587 ); 00588 00589 ULONG 00590 NTAPI 00591 KeAlertResumeThread( 00592 IN PKTHREAD Thread 00593 ); 00594 00595 ULONG 00596 NTAPI 00597 KeResumeThread( 00598 IN PKTHREAD Thread 00599 ); 00600 00601 PVOID 00602 NTAPI 00603 KeSwitchKernelStack( 00604 IN PVOID StackBase, 00605 IN PVOID StackLimit 00606 ); 00607 00608 VOID 00609 NTAPI 00610 KeRundownThread(VOID); 00611 00612 NTSTATUS 00613 NTAPI 00614 KeReleaseThread(PKTHREAD Thread); 00615 00616 VOID 00617 NTAPI 00618 KiSuspendRundown( 00619 IN PKAPC Apc 00620 ); 00621 00622 VOID 00623 NTAPI 00624 KiSuspendNop( 00625 IN PKAPC Apc, 00626 IN PKNORMAL_ROUTINE *NormalRoutine, 00627 IN PVOID *NormalContext, 00628 IN PVOID *SystemArgument1, 00629 IN PVOID *SystemArgument2 00630 ); 00631 00632 VOID 00633 NTAPI 00634 KiSuspendThread( 00635 IN PVOID NormalContext, 00636 IN PVOID SystemArgument1, 00637 IN PVOID SystemArgument2 00638 ); 00639 00640 LONG 00641 NTAPI 00642 KeQueryBasePriorityThread(IN PKTHREAD Thread); 00643 00644 VOID 00645 FASTCALL 00646 KiSetPriorityThread( 00647 IN PKTHREAD Thread, 00648 IN KPRIORITY Priority 00649 ); 00650 00651 VOID 00652 FASTCALL 00653 KiUnlinkThread( 00654 IN PKTHREAD Thread, 00655 IN LONG_PTR WaitStatus 00656 ); 00657 00658 VOID 00659 NTAPI 00660 KeDumpStackFrames(PULONG Frame); 00661 00662 BOOLEAN 00663 NTAPI 00664 KiTestAlert(VOID); 00665 00666 VOID 00667 FASTCALL 00668 KiUnwaitThread( 00669 IN PKTHREAD Thread, 00670 IN LONG_PTR WaitStatus, 00671 IN KPRIORITY Increment 00672 ); 00673 00674 VOID 00675 NTAPI 00676 KeInitializeProcess( 00677 struct _KPROCESS *Process, 00678 KPRIORITY Priority, 00679 KAFFINITY Affinity, 00680 PULONG_PTR DirectoryTableBase, 00681 IN BOOLEAN Enable 00682 ); 00683 00684 VOID 00685 NTAPI 00686 KeSetQuantumProcess( 00687 IN PKPROCESS Process, 00688 IN UCHAR Quantum 00689 ); 00690 00691 KPRIORITY 00692 NTAPI 00693 KeSetPriorityAndQuantumProcess( 00694 IN PKPROCESS Process, 00695 IN KPRIORITY Priority, 00696 IN UCHAR Quantum OPTIONAL 00697 ); 00698 00699 ULONG 00700 NTAPI 00701 KeForceResumeThread(IN PKTHREAD Thread); 00702 00703 VOID 00704 NTAPI 00705 KeThawAllThreads( 00706 VOID 00707 ); 00708 00709 VOID 00710 NTAPI 00711 KeFreezeAllThreads( 00712 VOID 00713 ); 00714 00715 BOOLEAN 00716 NTAPI 00717 KeDisableThreadApcQueueing(IN PKTHREAD Thread); 00718 00719 VOID 00720 FASTCALL 00721 KiWaitTest( 00722 PVOID Object, 00723 KPRIORITY Increment 00724 ); 00725 00726 VOID 00727 NTAPI 00728 KeContextToTrapFrame( 00729 PCONTEXT Context, 00730 PKEXCEPTION_FRAME ExeptionFrame, 00731 PKTRAP_FRAME TrapFrame, 00732 ULONG ContextFlags, 00733 KPROCESSOR_MODE PreviousMode 00734 ); 00735 00736 VOID 00737 NTAPI 00738 Ke386SetIOPL(VOID); 00739 00740 VOID 00741 NTAPI 00742 KiCheckForKernelApcDelivery(VOID); 00743 00744 LONG 00745 NTAPI 00746 KiInsertQueue( 00747 IN PKQUEUE Queue, 00748 IN PLIST_ENTRY Entry, 00749 BOOLEAN Head 00750 ); 00751 00752 VOID 00753 NTAPI 00754 KiTimerExpiration( 00755 IN PKDPC Dpc, 00756 IN PVOID DeferredContext, 00757 IN PVOID SystemArgument1, 00758 IN PVOID SystemArgument2 00759 ); 00760 00761 ULONG 00762 NTAPI 00763 KeSetProcess( 00764 struct _KPROCESS* Process, 00765 KPRIORITY Increment, 00766 BOOLEAN InWait 00767 ); 00768 00769 VOID 00770 NTAPI 00771 KeInitializeEventPair(PKEVENT_PAIR EventPair); 00772 00773 VOID 00774 NTAPI 00775 KiInitializeUserApc( 00776 IN PKEXCEPTION_FRAME Reserved, 00777 IN PKTRAP_FRAME TrapFrame, 00778 IN PKNORMAL_ROUTINE NormalRoutine, 00779 IN PVOID NormalContext, 00780 IN PVOID SystemArgument1, 00781 IN PVOID SystemArgument2 00782 ); 00783 00784 PLIST_ENTRY 00785 NTAPI 00786 KeFlushQueueApc( 00787 IN PKTHREAD Thread, 00788 IN KPROCESSOR_MODE PreviousMode 00789 ); 00790 00791 VOID 00792 NTAPI 00793 KiAttachProcess( 00794 struct _KTHREAD *Thread, 00795 struct _KPROCESS *Process, 00796 PKLOCK_QUEUE_HANDLE ApcLock, 00797 struct _KAPC_STATE *SavedApcState 00798 ); 00799 00800 VOID 00801 NTAPI 00802 KiSwapProcess( 00803 struct _KPROCESS *NewProcess, 00804 struct _KPROCESS *OldProcess 00805 ); 00806 00807 BOOLEAN 00808 NTAPI 00809 KeTestAlertThread(IN KPROCESSOR_MODE AlertMode); 00810 00811 BOOLEAN 00812 NTAPI 00813 KeRemoveQueueApc(PKAPC Apc); 00814 00815 VOID 00816 FASTCALL 00817 KiActivateWaiterQueue(IN PKQUEUE Queue); 00818 00819 ULONG 00820 NTAPI 00821 KeQueryRuntimeProcess(IN PKPROCESS Process, 00822 OUT PULONG UserTime); 00823 00824 /* INITIALIZATION FUNCTIONS *************************************************/ 00825 00826 BOOLEAN 00827 NTAPI 00828 KeInitSystem(VOID); 00829 00830 VOID 00831 NTAPI 00832 KeInitExceptions(VOID); 00833 00834 VOID 00835 NTAPI 00836 KeInitInterrupts(VOID); 00837 00838 VOID 00839 NTAPI 00840 KiInitializeBugCheck(VOID); 00841 00842 VOID 00843 NTAPI 00844 KiSystemStartup( 00845 IN PLOADER_PARAMETER_BLOCK LoaderBlock 00846 ); 00847 00848 BOOLEAN 00849 NTAPI 00850 KiDeliverUserApc(PKTRAP_FRAME TrapFrame); 00851 00852 VOID 00853 NTAPI 00854 KiMoveApcState( 00855 PKAPC_STATE OldState, 00856 PKAPC_STATE NewState 00857 ); 00858 00859 VOID 00860 NTAPI 00861 KiAddProfileEvent( 00862 KPROFILE_SOURCE Source, 00863 ULONG Pc 00864 ); 00865 00866 VOID 00867 NTAPI 00868 KiDispatchException( 00869 PEXCEPTION_RECORD ExceptionRecord, 00870 PKEXCEPTION_FRAME ExceptionFrame, 00871 PKTRAP_FRAME Tf, 00872 KPROCESSOR_MODE PreviousMode, 00873 BOOLEAN SearchFrames 00874 ); 00875 00876 VOID 00877 NTAPI 00878 KeTrapFrameToContext( 00879 IN PKTRAP_FRAME TrapFrame, 00880 IN PKEXCEPTION_FRAME ExceptionFrame, 00881 IN OUT PCONTEXT Context 00882 ); 00883 00884 DECLSPEC_NORETURN 00885 VOID 00886 NTAPI 00887 KeBugCheckWithTf( 00888 ULONG BugCheckCode, 00889 ULONG_PTR BugCheckParameter1, 00890 ULONG_PTR BugCheckParameter2, 00891 ULONG_PTR BugCheckParameter3, 00892 ULONG_PTR BugCheckParameter4, 00893 PKTRAP_FRAME Tf 00894 ); 00895 00896 BOOLEAN 00897 NTAPI 00898 KiHandleNmi(VOID); 00899 00900 VOID 00901 NTAPI 00902 KeFlushCurrentTb(VOID); 00903 00904 BOOLEAN 00905 NTAPI 00906 KeInvalidateAllCaches(VOID); 00907 00908 VOID 00909 FASTCALL 00910 KeZeroPages(IN PVOID Address, 00911 IN ULONG Size); 00912 00913 BOOLEAN 00914 FASTCALL 00915 KeInvalidAccessAllowed(IN PVOID TrapInformation OPTIONAL); 00916 00917 VOID 00918 NTAPI 00919 KeRosDumpStackFrames( 00920 PULONG_PTR Frame, 00921 ULONG FrameCount 00922 ); 00923 00924 VOID 00925 NTAPI 00926 KeSetSystemTime( 00927 IN PLARGE_INTEGER NewSystemTime, 00928 OUT PLARGE_INTEGER OldSystemTime, 00929 IN BOOLEAN FixInterruptTime, 00930 IN PLARGE_INTEGER HalTime 00931 ); 00932 00933 ULONG 00934 NTAPI 00935 KeV86Exception( 00936 ULONG ExceptionNr, 00937 PKTRAP_FRAME Tf, 00938 ULONG address 00939 ); 00940 00941 VOID 00942 NTAPI 00943 KiStartUnexpectedRange( 00944 VOID 00945 ); 00946 00947 VOID 00948 NTAPI 00949 KiEndUnexpectedRange( 00950 VOID 00951 ); 00952 00953 NTSTATUS 00954 NTAPI 00955 KiRaiseException( 00956 IN PEXCEPTION_RECORD ExceptionRecord, 00957 IN PCONTEXT Context, 00958 IN PKEXCEPTION_FRAME ExceptionFrame, 00959 IN PKTRAP_FRAME TrapFrame, 00960 IN BOOLEAN SearchFrames 00961 ); 00962 00963 NTSTATUS 00964 NTAPI 00965 KiContinue( 00966 IN PCONTEXT Context, 00967 IN PKEXCEPTION_FRAME ExceptionFrame, 00968 IN PKTRAP_FRAME TrapFrame 00969 ); 00970 00971 DECLSPEC_NORETURN 00972 VOID 00973 FASTCALL 00974 KiServiceExit( 00975 IN PKTRAP_FRAME TrapFrame, 00976 IN NTSTATUS Status 00977 ); 00978 00979 DECLSPEC_NORETURN 00980 VOID 00981 FASTCALL 00982 KiServiceExit2( 00983 IN PKTRAP_FRAME TrapFrame 00984 ); 00985 00986 #ifndef _M_AMD64 00987 VOID 00988 FASTCALL 00989 KiInterruptDispatch( 00990 IN PKTRAP_FRAME TrapFrame, 00991 IN PKINTERRUPT Interrupt 00992 ); 00993 #endif 00994 00995 VOID 00996 FASTCALL 00997 KiChainedDispatch( 00998 IN PKTRAP_FRAME TrapFrame, 00999 IN PKINTERRUPT Interrupt 01000 ); 01001 01002 VOID 01003 NTAPI 01004 KiInitializeMachineType( 01005 VOID 01006 ); 01007 01008 VOID 01009 NTAPI 01010 KiSetupStackAndInitializeKernel( 01011 IN PKPROCESS InitProcess, 01012 IN PKTHREAD InitThread, 01013 IN PVOID IdleStack, 01014 IN PKPRCB Prcb, 01015 IN CCHAR Number, 01016 IN PLOADER_PARAMETER_BLOCK LoaderBlock 01017 ); 01018 01019 VOID 01020 NTAPI 01021 KiInitSpinLocks( 01022 IN PKPRCB Prcb, 01023 IN CCHAR Number 01024 ); 01025 01026 LARGE_INTEGER 01027 NTAPI 01028 KiComputeReciprocal( 01029 IN LONG Divisor, 01030 OUT PUCHAR Shift 01031 ); 01032 01033 VOID 01034 NTAPI 01035 KiInitSystem( 01036 VOID 01037 ); 01038 01039 VOID 01040 FASTCALL 01041 KiInsertQueueApc( 01042 IN PKAPC Apc, 01043 IN KPRIORITY PriorityBoost 01044 ); 01045 01046 NTSTATUS 01047 NTAPI 01048 KiCallUserMode( 01049 IN PVOID *OutputBuffer, 01050 IN PULONG OutputLength 01051 ); 01052 01053 VOID 01054 NTAPI 01055 KiInitMachineDependent(VOID); 01056 01057 BOOLEAN 01058 NTAPI 01059 KeFreezeExecution(IN PKTRAP_FRAME TrapFrame, 01060 IN PKEXCEPTION_FRAME ExceptionFrame); 01061 01062 VOID 01063 NTAPI 01064 KeThawExecution(IN BOOLEAN Enable); 01065 01066 VOID 01067 FASTCALL 01068 KeAcquireQueuedSpinLockAtDpcLevel( 01069 IN OUT PKSPIN_LOCK_QUEUE LockQueue 01070 ); 01071 01072 VOID 01073 FASTCALL 01074 KeReleaseQueuedSpinLockFromDpcLevel( 01075 IN OUT PKSPIN_LOCK_QUEUE LockQueue 01076 ); 01077 01078 VOID 01079 NTAPI 01080 KiRestoreProcessorControlState( 01081 IN PKPROCESSOR_STATE ProcessorState 01082 ); 01083 01084 VOID 01085 NTAPI 01086 KiSaveProcessorControlState( 01087 OUT PKPROCESSOR_STATE ProcessorState 01088 ); 01089 01090 VOID 01091 NTAPI 01092 KiSaveProcessorState( 01093 IN PKTRAP_FRAME TrapFrame, 01094 IN PKEXCEPTION_FRAME ExceptionFrame 01095 ); 01096 01097 VOID 01098 FASTCALL 01099 KiRetireDpcList( 01100 IN PKPRCB Prcb 01101 ); 01102 01103 VOID 01104 NTAPI 01105 KiQuantumEnd( 01106 VOID 01107 ); 01108 01109 VOID 01110 FASTCALL 01111 KiIdleLoop( 01112 VOID 01113 ); 01114 01115 DECLSPEC_NORETURN 01116 VOID 01117 FASTCALL 01118 KiSystemFatalException( 01119 IN ULONG ExceptionCode, 01120 IN PKTRAP_FRAME TrapFrame 01121 ); 01122 01123 PVOID 01124 NTAPI 01125 KiPcToFileHeader(IN PVOID Eip, 01126 OUT PLDR_DATA_TABLE_ENTRY *LdrEntry, 01127 IN BOOLEAN DriversOnly, 01128 OUT PBOOLEAN InKernel); 01129 01130 PVOID 01131 NTAPI 01132 KiRosPcToUserFileHeader(IN PVOID Eip, 01133 OUT PLDR_DATA_TABLE_ENTRY *LdrEntry); 01134 01135 PCHAR 01136 NTAPI 01137 KeBugCheckUnicodeToAnsi( 01138 IN PUNICODE_STRING Unicode, 01139 OUT PCHAR Ansi, 01140 IN ULONG Length 01141 ); 01142 01143 #include "ke_x.h" Generated on Sun May 27 2012 04:33:22 for ReactOS by
1.7.6.1
|