Something went wrong. Try again.
Reactos
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130#pragma once
/* INCLUDES *****************************************************************/
#include "arch/ke.h"
#ifdef __cplusplusextern "C"{#endif
/* INTERNAL KERNEL TYPES ****************************************************/
typedef struct _WOW64_PROCESS{ PVOID Wow64;} WOW64_PROCESS, *PWOW64_PROCESS;
typedef struct _KPROFILE_SOURCE_OBJECT{ KPROFILE_SOURCE Source; LIST_ENTRY ListEntry;} KPROFILE_SOURCE_OBJECT, *PKPROFILE_SOURCE_OBJECT;
typedef enum _CONNECT_TYPE{ NoConnect, NormalConnect, ChainConnect, UnknownConnect} CONNECT_TYPE, *PCONNECT_TYPE;
typedef struct _DISPATCH_INFO{ CONNECT_TYPE Type; PKINTERRUPT Interrupt; PKINTERRUPT_ROUTINE NoDispatch; PKINTERRUPT_ROUTINE InterruptDispatch; PKINTERRUPT_ROUTINE FloatingDispatch; PKINTERRUPT_ROUTINE ChainedDispatch; PKINTERRUPT_ROUTINE *FlatDispatch;} DISPATCH_INFO, *PDISPATCH_INFO;
typedef struct _PROCESS_VALUES{ LARGE_INTEGER TotalKernelTime; LARGE_INTEGER TotalUserTime; IO_COUNTERS IoInfo;} PROCESS_VALUES, *PPROCESS_VALUES;
typedef struct _DEFERRED_REVERSE_BARRIER{ ULONG Barrier; ULONG TotalProcessors;} DEFERRED_REVERSE_BARRIER, *PDEFERRED_REVERSE_BARRIER;
typedef struct _KI_SAMPLE_MAP{ LARGE_INTEGER PerfStart; LARGE_INTEGER PerfEnd; LONGLONG PerfDelta; LARGE_INTEGER PerfFreq; LONGLONG TSCStart; LONGLONG TSCEnd; LONGLONG TSCDelta; ULONG MHz;} KI_SAMPLE_MAP, *PKI_SAMPLE_MAP;
#define MAX_TIMER_DPCS 16
typedef struct _DPC_QUEUE_ENTRY{ PKDPC Dpc; PKDEFERRED_ROUTINE Routine; PVOID Context;} DPC_QUEUE_ENTRY, *PDPC_QUEUE_ENTRY;
typedef struct _KNMI_HANDLER_CALLBACK{ struct _KNMI_HANDLER_CALLBACK* Next; PNMI_CALLBACK Callback; PVOID Context; PVOID Handle;} KNMI_HANDLER_CALLBACK, *PKNMI_HANDLER_CALLBACK;
typedef PCHAR(NTAPI *PKE_BUGCHECK_UNICODE_TO_ANSI)( IN PUNICODE_STRING Unicode, IN PCHAR Ansi, IN ULONG Length);
extern PKNMI_HANDLER_CALLBACK KiNmiCallbackListHead;extern KSPIN_LOCK KiNmiCallbackListLock;extern PVOID KeUserApcDispatcher;extern PVOID KeUserCallbackDispatcher;extern PVOID KeUserExceptionDispatcher;extern PVOID KeRaiseUserExceptionDispatcher;extern LARGE_INTEGER KeBootTime;extern ULONGLONG KeBootTimeBias;extern BOOLEAN ExCmosClockIsSane;extern USHORT KeProcessorArchitecture;extern USHORT KeProcessorLevel;extern USHORT KeProcessorRevision;extern ULONG64 KeFeatureBits;extern KAFFINITY KeActiveProcessors;extern PKPRCB KiProcessorBlock[];#ifdef CONFIG_SMPextern ULONG KeMaximumProcessors;extern ULONG KeNumprocSpecified;extern ULONG KeBootprocSpecified;#endifextern KNODE KiNode0;extern PKNODE KeNodeBlock[1];extern UCHAR KeNumberNodes;extern UCHAR KeProcessNodeSeed;extern ETHREAD KiInitialThread;extern EPROCESS KiInitialProcess;extern PULONG KiInterruptTemplateObject;extern PULONG KiInterruptTemplateDispatch;extern PULONG KiInterruptTemplate2ndDispatch;extern ULONG KiUnexpectedEntrySize;extern ULONG_PTR KiDoubleFaultStack;extern EX_PUSH_LOCK KernelAddressSpaceLock;extern ULONG KiMaximumDpcQueueDepth;extern ULONG KiMinimumDpcRate;extern ULONG KiAdjustDpcThreshold;extern ULONG KiIdealDpcRate;extern BOOLEAN KeThreadDpcEnable;extern LARGE_INTEGER KiTimeIncrementReciprocal;extern UCHAR KiTimeIncrementShiftCount;extern ULONG KiTimeLimitIsrMicroseconds;extern ULONG KiServiceLimit;extern LIST_ENTRY KeBugcheckCallbackListHead, KeBugcheckReasonCallbackListHead;extern KSPIN_LOCK BugCheckCallbackLock;extern KDPC KiTimerExpireDpc;extern KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE];extern FAST_MUTEX KiGenericCallDpcMutex;extern LIST_ENTRY KiProfileListHead, KiProfileSourceListHead;extern KSPIN_LOCK KiProfileLock;extern LIST_ENTRY KiProcessListHead;extern LIST_ENTRY KiProcessInSwapListHead, KiProcessOutSwapListHead;extern LIST_ENTRY KiStackInSwapListHead;extern KEVENT KiSwapEvent;extern KAFFINITY KiIdleSummary;extern PVOID KeUserApcDispatcher;extern PVOID KeUserCallbackDispatcher;extern PVOID KeUserExceptionDispatcher;extern PVOID KeRaiseUserExceptionDispatcher;extern ULONG KeTimeIncrement;extern ULONG KeTimeAdjustment;extern BOOLEAN KiTimeAdjustmentEnabled;extern LONG KiTickOffset;extern ULONG KiFreezeFlag;extern ULONG KiDPCTimeout;extern PGDI_BATCHFLUSH_ROUTINE KeGdiFlushUserBatch;extern ULONGLONG BootCycles, BootCyclesEnd;extern ULONG ProcessCount;extern VOID __cdecl KiInterruptTemplate(VOID);
/* MACROS *************************************************************************/
#define PRIORITY_MASK(Priority) (1UL << (Priority))
/* Tells us if the Timer or Event is a Syncronization or Notification Object */#define TIMER_OR_EVENT_TYPE 0x7L
/* One of the Reserved Wait Blocks, this one is for the Thread's Timer */#define TIMER_WAIT_BLOCK 0x3L
/* INTERNAL KERNEL FUNCTIONS ************************************************/
/* Finds a new thread to run */LONG_PTRFASTCALLKiSwapThread( IN PKTHREAD Thread, IN PKPRCB Prcb);
VOIDNTAPIKeReadyThread( IN PKTHREAD Thread);
BOOLEANNTAPIKeSetDisableBoostThread( IN OUT PKTHREAD Thread, IN BOOLEAN Disable);
BOOLEANNTAPIKeSetDisableBoostProcess( IN PKPROCESS Process, IN BOOLEAN Disable);
BOOLEANNTAPIKeSetAutoAlignmentProcess( IN PKPROCESS Process, IN BOOLEAN Enable);
KAFFINITYNTAPIKeSetAffinityProcess( IN PKPROCESS Process, IN KAFFINITY Affinity);
VOIDNTAPIKeBoostPriorityThread( IN PKTHREAD Thread, IN KPRIORITY Increment);
VOIDNTAPIKeBalanceSetManager(IN PVOID Context);
VOIDNTAPIKiReadyThread(IN PKTHREAD Thread);
ULONGNTAPIKeSuspendThread(PKTHREAD Thread);
BOOLEANNTAPIKeReadStateThread(IN PKTHREAD Thread);
BOOLEANFASTCALLKiSwapContext( IN KIRQL WaitIrql, IN PKTHREAD CurrentThread);
VOIDNTAPIKiAdjustQuantumThread(IN PKTHREAD Thread);
VOIDFASTCALLKiExitDispatcher(KIRQL OldIrql);
VOIDFASTCALLKiDeferredReadyThread(IN PKTHREAD Thread);
PKTHREADFASTCALLKiIdleSchedule( IN PKPRCB Prcb);
VOIDFASTCALLKiProcessDeferredReadyList( IN PKPRCB Prcb);
KAFFINITYFASTCALLKiSetAffinityThread( IN PKTHREAD Thread, IN KAFFINITY Affinity);
PKTHREADFASTCALLKiSelectNextThread( IN PKPRCB Prcb);
BOOLEANFASTCALLKiInsertTimerTable( IN PKTIMER Timer, IN ULONG Hand);
VOIDFASTCALLKiTimerListExpire( IN PLIST_ENTRY ExpiredListHead, IN KIRQL OldIrql);
BOOLEANFASTCALLKiInsertTreeTimer( IN PKTIMER Timer, IN LARGE_INTEGER Interval);
VOIDFASTCALLKiCompleteTimer( IN PKTIMER Timer, IN PKSPIN_LOCK_QUEUE LockQueue);
CODE_SEG("INIT")VOIDNTAPIKeStartAllProcessors( VOID);
/* gmutex.c ********************************************************************/
VOIDFASTCALLKiAcquireGuardedMutex( IN OUT PKGUARDED_MUTEX GuardedMutex);
VOIDFASTCALLKiAcquireFastMutex( IN PFAST_MUTEX FastMutex);
/* gate.c **********************************************************************/
VOIDFASTCALLKeInitializeGate(PKGATE Gate);
VOIDFASTCALLKeSignalGateBoostPriority(PKGATE Gate);
VOIDFASTCALLKeWaitForGate( PKGATE Gate, KWAIT_REASON WaitReason, KPROCESSOR_MODE WaitMode);
/* ipi.c ********************************************************************/
VOIDFASTCALLKiIpiSend( KAFFINITY TargetSet, ULONG IpiRequest);
VOIDNTAPIKiIpiSendPacket( IN KAFFINITY TargetProcessors, IN PKIPI_WORKER WorkerFunction, IN PKIPI_BROADCAST_WORKER BroadcastFunction, IN ULONG_PTR Context, IN PULONG Count);
VOIDFASTCALLKiIpiSignalPacketDone( IN PKIPI_CONTEXT PacketContext);
VOIDFASTCALLKiIpiSignalPacketDoneAndStall( IN PKIPI_CONTEXT PacketContext, IN volatile PULONG ReverseStall);
/* next file ***************************************************************/
UCHARNTAPIKeFindNextRightSetAffinity( IN UCHAR Number, IN KAFFINITY Set);
VOIDNTAPIKeInitializeProfile( struct _KPROFILE* Profile, struct _KPROCESS* Process, PVOID ImageBase, SIZE_T ImageSize, ULONG BucketSize, KPROFILE_SOURCE ProfileSource, KAFFINITY Affinity);
BOOLEANNTAPIKeStartProfile( struct _KPROFILE* Profile, PVOID Buffer);
BOOLEANNTAPIKeStopProfile(struct _KPROFILE* Profile);
ULONGNTAPIKeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource);
VOIDNTAPIKeSetIntervalProfile( ULONG Interval, KPROFILE_SOURCE ProfileSource);
VOIDNTAPIKeUpdateRunTime( PKTRAP_FRAME TrapFrame, KIRQL Irql);
VOIDNTAPIKiExpireTimers( PKDPC Dpc, PVOID DeferredContext, PVOID SystemArgument1, PVOID SystemArgument2);
VOIDNTAPIKeInitializeThread( IN PKPROCESS Process, IN OUT PKTHREAD Thread, IN PKSYSTEM_ROUTINE SystemRoutine, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext, IN PCONTEXT Context, IN PVOID Teb, IN PVOID KernelStack);
VOIDNTAPIKeUninitThread( IN PKTHREAD Thread);
NTSTATUSNTAPIKeInitThread( IN OUT PKTHREAD Thread, IN PVOID KernelStack, IN PKSYSTEM_ROUTINE SystemRoutine, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext, IN PCONTEXT Context, IN PVOID Teb, IN PKPROCESS Process);
VOIDNTAPIKiInitializeContextThread( PKTHREAD Thread, PKSYSTEM_ROUTINE SystemRoutine, PKSTART_ROUTINE StartRoutine, PVOID StartContext, PCONTEXT Context);
VOIDNTAPIKeStartThread( IN OUT PKTHREAD Thread);
BOOLEANNTAPIKeAlertThread( IN PKTHREAD Thread, IN KPROCESSOR_MODE AlertMode);
ULONGNTAPIKeAlertResumeThread( IN PKTHREAD Thread);
ULONGNTAPIKeResumeThread( IN PKTHREAD Thread);
PVOIDNTAPIKeSwitchKernelStack( IN PVOID StackBase, IN PVOID StackLimit);
VOIDNTAPIKeRundownThread(VOID);
NTSTATUSNTAPIKeReleaseThread(PKTHREAD Thread);
VOIDNTAPIKiSuspendRundown( IN PKAPC Apc);
VOIDNTAPIKiSuspendNop( IN PKAPC Apc, IN PKNORMAL_ROUTINE *NormalRoutine, IN PVOID *NormalContext, IN PVOID *SystemArgument1, IN PVOID *SystemArgument2);
VOIDNTAPIKiSuspendThread( IN PVOID NormalContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2);
LONGNTAPIKeQueryBasePriorityThread(IN PKTHREAD Thread);
VOIDFASTCALLKiSetPriorityThread( IN PKTHREAD Thread, IN KPRIORITY Priority);
VOIDFASTCALLKiUnlinkThread( IN PKTHREAD Thread, IN LONG_PTR WaitStatus);
VOIDNTAPIKeDumpStackFrames(PULONG Frame);
BOOLEANNTAPIKiTestAlert(VOID);
VOIDFASTCALLKiUnwaitThread( IN PKTHREAD Thread, IN LONG_PTR WaitStatus, IN KPRIORITY Increment);
VOIDNTAPIKeInitializeProcess( struct _KPROCESS *Process, KPRIORITY Priority, KAFFINITY Affinity, PULONG_PTR DirectoryTableBase, IN BOOLEAN Enable);
VOIDNTAPIKeSetQuantumProcess( IN PKPROCESS Process, IN UCHAR Quantum);
KPRIORITYNTAPIKeSetPriorityAndQuantumProcess( IN PKPROCESS Process, IN KPRIORITY Priority, IN UCHAR Quantum OPTIONAL);
ULONGNTAPIKeForceResumeThread(IN PKTHREAD Thread);
VOIDNTAPIKeThawAllThreads( VOID);
VOIDNTAPIKeFreezeAllThreads( VOID);
BOOLEANNTAPIKeDisableThreadApcQueueing(IN PKTHREAD Thread);
VOIDFASTCALLKiWaitTest( PVOID Object, KPRIORITY Increment);
VOIDNTAPIKeContextToTrapFrame( PCONTEXT Context, PKEXCEPTION_FRAME ExeptionFrame, PKTRAP_FRAME TrapFrame, ULONG ContextFlags, KPROCESSOR_MODE PreviousMode);
VOIDNTAPIKe386SetIOPL(VOID);
VOIDNTAPIKiCheckForKernelApcDelivery(VOID);
LONGNTAPIKiInsertQueue( IN PKQUEUE Queue, IN PLIST_ENTRY Entry, BOOLEAN Head);
VOIDNTAPIKiTimerExpiration( IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2);
ULONGNTAPIKeSetProcess( struct _KPROCESS* Process, KPRIORITY Increment, BOOLEAN InWait);
VOIDNTAPIKeInitializeEventPair(PKEVENT_PAIR EventPair);
VOIDNTAPIKiInitializeUserApc( IN PKEXCEPTION_FRAME Reserved, IN PKTRAP_FRAME TrapFrame, IN PKNORMAL_ROUTINE NormalRoutine, IN PVOID NormalContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2);
PLIST_ENTRYNTAPIKeFlushQueueApc( IN PKTHREAD Thread, IN KPROCESSOR_MODE PreviousMode);
VOIDNTAPIKiAttachProcess( struct _KTHREAD *Thread, struct _KPROCESS *Process, PKLOCK_QUEUE_HANDLE ApcLock, struct _KAPC_STATE *SavedApcState);
VOIDNTAPIKiSwapProcess( struct _KPROCESS *NewProcess, struct _KPROCESS *OldProcess);
BOOLEANNTAPIKeTestAlertThread(IN KPROCESSOR_MODE AlertMode);
BOOLEANNTAPIKeRemoveQueueApc(PKAPC Apc);
VOIDFASTCALLKiActivateWaiterQueue(IN PKQUEUE Queue);
ULONGNTAPIKeQueryRuntimeProcess(IN PKPROCESS Process, OUT PULONG UserTime);
VOIDNTAPIKeQueryValuesProcess(IN PKPROCESS Process, PPROCESS_VALUES Values);
/* INITIALIZATION FUNCTIONS *************************************************/
CODE_SEG("INIT")BOOLEANNTAPIKeInitSystem(VOID);
CODE_SEG("INIT")VOIDNTAPIKeInitExceptions(VOID);
VOIDNTAPIKeInitInterrupts(VOID);
CODE_SEG("INIT")VOIDNTAPIKiInitializeBugCheck(VOID);
DECLSPEC_NORETURNCODE_SEG("INIT")VOIDNTAPIKiSystemStartup( IN PLOADER_PARAMETER_BLOCK LoaderBlock);
BOOLEANNTAPIKiDeliverUserApc(PKTRAP_FRAME TrapFrame);
VOIDNTAPIKiMoveApcState( PKAPC_STATE OldState, PKAPC_STATE NewState);
VOIDNTAPIKiAddProfileEvent( KPROFILE_SOURCE Source, ULONG Pc);
VOIDNTAPIKiDispatchException( PEXCEPTION_RECORD ExceptionRecord, PKEXCEPTION_FRAME ExceptionFrame, PKTRAP_FRAME Tf, KPROCESSOR_MODE PreviousMode, BOOLEAN SearchFrames);
VOIDNTAPIKeTrapFrameToContext( IN PKTRAP_FRAME TrapFrame, IN PKEXCEPTION_FRAME ExceptionFrame, IN OUT PCONTEXT Context);
DECLSPEC_NORETURNVOIDNTAPIKeBugCheckWithTf( ULONG BugCheckCode, ULONG_PTR BugCheckParameter1, ULONG_PTR BugCheckParameter2, ULONG_PTR BugCheckParameter3, ULONG_PTR BugCheckParameter4, PKTRAP_FRAME Tf);
BOOLEANNTAPIKiHandleNmi(VOID);
VOIDNTAPIKeFlushCurrentTb(VOID);
BOOLEANNTAPIKeInvalidateAllCaches(VOID);
VOIDFASTCALLKeZeroPages(IN PVOID Address, IN ULONG Size);
BOOLEANFASTCALLKeInvalidAccessAllowed(IN PVOID TrapInformation OPTIONAL);
VOIDNTAPIKeRosDumpStackFrames( PULONG_PTR Frame, ULONG FrameCount);
VOIDNTAPIKeSetSystemTime( IN PLARGE_INTEGER NewSystemTime, OUT PLARGE_INTEGER OldSystemTime, IN BOOLEAN FixInterruptTime, IN PLARGE_INTEGER HalTime);
ULONGNTAPIKeV86Exception( ULONG ExceptionNr, PKTRAP_FRAME Tf, ULONG address);
VOIDNTAPIKiStartUnexpectedRange( VOID);
VOIDNTAPIKiEndUnexpectedRange( VOID);
NTSTATUSNTAPIKiRaiseException( IN PEXCEPTION_RECORD ExceptionRecord, IN PCONTEXT Context, IN PKEXCEPTION_FRAME ExceptionFrame, IN PKTRAP_FRAME TrapFrame, IN BOOLEAN SearchFrames);
NTSTATUSNTAPIKiContinue( IN PCONTEXT Context, IN PKEXCEPTION_FRAME ExceptionFrame, IN PKTRAP_FRAME TrapFrame);
#ifndef _M_AMD64VOIDFASTCALLKiInterruptDispatch( IN PKTRAP_FRAME TrapFrame, IN PKINTERRUPT Interrupt);#endif
VOIDFASTCALLKiChainedDispatch( IN PKTRAP_FRAME TrapFrame, IN PKINTERRUPT Interrupt);
CODE_SEG("INIT")VOIDNTAPIKiInitializeMachineType( VOID);
VOIDNTAPIKiSetupStackAndInitializeKernel( IN PKPROCESS InitProcess, IN PKTHREAD InitThread, IN PVOID IdleStack, IN PKPRCB Prcb, IN CCHAR Number, IN PLOADER_PARAMETER_BLOCK LoaderBlock);
CODE_SEG("INIT")VOIDNTAPIKiInitSpinLocks( IN PKPRCB Prcb, IN CCHAR Number);
CODE_SEG("INIT")LARGE_INTEGERNTAPIKiComputeReciprocal( IN LONG Divisor, OUT PUCHAR Shift);
CODE_SEG("INIT")VOIDNTAPIKiInitSystem( VOID);
VOIDFASTCALLKiInsertQueueApc( IN PKAPC Apc, IN KPRIORITY PriorityBoost);
NTSTATUSNTAPIKiCallUserMode( IN PVOID *OutputBuffer, IN PULONG OutputLength);
DECLSPEC_NORETURNVOIDFASTCALLKiCallbackReturn( IN PVOID Stack, IN NTSTATUS Status);
CODE_SEG("INIT")VOIDNTAPIKiInitMachineDependent(VOID);
VOIDNTAPIKxFreezeExecution( VOID);
VOIDNTAPIKxThawExecution( VOID);
BOOLEANNTAPIKeFreezeExecution(IN PKTRAP_FRAME TrapFrame, IN PKEXCEPTION_FRAME ExceptionFrame);
VOIDNTAPIKeThawExecution(IN BOOLEAN Enable);
KCONTINUE_STATUSNTAPIKxSwitchKdProcessor( _In_ ULONG ProcessorIndex);
_IRQL_requires_min_(DISPATCH_LEVEL)_Acquires_nonreentrant_lock_(*LockHandle->Lock)_Acquires_exclusive_lock_(*LockHandle->Lock)VOIDFASTCALLKeAcquireQueuedSpinLockAtDpcLevel( _Inout_ PKSPIN_LOCK_QUEUE LockQueue);
_IRQL_requires_min_(DISPATCH_LEVEL)_Releases_nonreentrant_lock_(*LockHandle->Lock)_Releases_exclusive_lock_(*LockHandle->Lock)VOIDFASTCALLKeReleaseQueuedSpinLockFromDpcLevel( _Inout_ PKSPIN_LOCK_QUEUE LockQueue);
VOIDNTAPIKiRestoreProcessorControlState( IN PKPROCESSOR_STATE ProcessorState);
VOIDNTAPIKiSaveProcessorControlState( OUT PKPROCESSOR_STATE ProcessorState);
VOIDNTAPIKiSaveProcessorState( _In_ PKTRAP_FRAME TrapFrame, _In_ PKEXCEPTION_FRAME ExceptionFrame);
VOIDNTAPIKiRestoreProcessorState( _Out_ PKTRAP_FRAME TrapFrame, _Out_ PKEXCEPTION_FRAME ExceptionFrame);
VOIDFASTCALLKiRetireDpcList( IN PKPRCB Prcb);
VOIDNTAPIKiQuantumEnd( VOID);
DECLSPEC_NORETURNVOIDKiIdleLoop( VOID);
DECLSPEC_NORETURNVOIDFASTCALLKiSystemFatalException( IN ULONG ExceptionCode, IN PKTRAP_FRAME TrapFrame);
PVOIDNTAPIKiPcToFileHeader(IN PVOID Pc, OUT PLDR_DATA_TABLE_ENTRY *LdrEntry, IN BOOLEAN DriversOnly, OUT PBOOLEAN InKernel);
PVOIDNTAPIKiRosPcToUserFileHeader(IN PVOID Pc, OUT PLDR_DATA_TABLE_ENTRY *LdrEntry);
PCHARNTAPIKeBugCheckUnicodeToAnsi( IN PUNICODE_STRING Unicode, OUT PCHAR Ansi, IN ULONG Length);
#ifdef CONFIG_SMPULONGNTAPIKiFindIdealProcessor( _In_ KAFFINITY ProcessorSet, _In_ UCHAR OriginalIdealProcessor);#endif // CONFIG_SMP
#ifdef __cplusplus} // extern "C"
namespace ntoskrnl{
/* Like std::lock_guard, but for a Queued Spinlock */template <KSPIN_LOCK_QUEUE_NUMBER n>class KiQueuedSpinLockGuard{private: KIRQL m_OldIrql;public:
_Requires_lock_not_held_(n) _Acquires_lock_(n) _IRQL_raises_(DISPATCH_LEVEL) explicit KiQueuedSpinLockGuard() { m_OldIrql = KeAcquireQueuedSpinLock(n); }
_Requires_lock_held_(n) _Releases_lock_(n) ~KiQueuedSpinLockGuard() { KeReleaseQueuedSpinLock(n, m_OldIrql); }
private: KiQueuedSpinLockGuard(KiQueuedSpinLockGuard const&) = delete; KiQueuedSpinLockGuard& operator=(KiQueuedSpinLockGuard const&) = delete;};
}
#endif
#include "ke_x.h"