[NTOSKRNL/AMD64]

- Implement KiApcInterrupt, KiDpcInterrupt and KiIpiInterrupt stubs
- Improve and cleanup stubs.c

svn path=/trunk/; revision=53724
This commit is contained in:
Timo Kreuzer 2011-09-16 18:39:55 +00:00
parent 6c8a335788
commit 826d8dedae
2 changed files with 91 additions and 26 deletions

View file

@ -12,6 +12,14 @@
#define NDEBUG
#include <debug.h>
VOID
NTAPI
KiDispatchInterrupt(VOID)
{
UNIMPLEMENTED;
__debugbreak();
}
VOID
FASTCALL
KeZeroPages(IN PVOID Address,
@ -28,6 +36,7 @@ KiServiceExit(IN PKTRAP_FRAME TrapFrame,
IN NTSTATUS Status)
{
UNIMPLEMENTED;
__debugbreak();
}
VOID
@ -36,6 +45,7 @@ DECLSPEC_NORETURN
KiServiceExit2(IN PKTRAP_FRAME TrapFrame)
{
UNIMPLEMENTED;
__debugbreak();
}
BOOLEAN
@ -43,6 +53,7 @@ NTAPI
KeConnectInterrupt(IN PKINTERRUPT Interrupt)
{
UNIMPLEMENTED;
__debugbreak();
return FALSE;
}
@ -62,6 +73,7 @@ KeSynchronizeExecution(
IN PVOID SynchronizeContext)
{
UNIMPLEMENTED;
__debugbreak();
return FALSE;
}
@ -74,6 +86,7 @@ KeUserModeCallback(IN ULONG RoutineIndex,
OUT PULONG ResultLength)
{
UNIMPLEMENTED;
__debugbreak();
return STATUS_UNSUCCESSFUL;
}
@ -94,6 +107,7 @@ KiInitializeUserApc(IN PKEXCEPTION_FRAME ExceptionFrame,
IN PVOID SystemArgument2)
{
UNIMPLEMENTED;
__debugbreak();
}
VOID
@ -102,6 +116,7 @@ KiSwapProcess(IN PKPROCESS NewProcess,
IN PKPROCESS OldProcess)
{
UNIMPLEMENTED;
__debugbreak();
}
VOID
@ -110,6 +125,7 @@ KiSystemService(IN PKTHREAD Thread,
IN ULONG Instruction)
{
UNIMPLEMENTED;
__debugbreak();
}
NTSYSAPI
@ -119,6 +135,7 @@ NtCallbackReturn
( IN PVOID Result OPTIONAL, IN ULONG ResultLength, IN NTSTATUS Status )
{
UNIMPLEMENTED;
__debugbreak();
return STATUS_UNSUCCESSFUL;
}
@ -137,6 +154,7 @@ NtVdmControl(IN ULONG ControlCode,
IN PVOID ControlData)
{
UNIMPLEMENTED;
__debugbreak();
return STATUS_UNSUCCESSFUL;
}
@ -147,6 +165,7 @@ KiCallUserMode(
IN PULONG OutputLength)
{
UNIMPLEMENTED;
__debugbreak();
return STATUS_UNSUCCESSFUL;
}
@ -160,29 +179,6 @@ ExQueryDepthSList(IN PSLIST_HEADER ListHead)
ULONG ProcessCount;
#ifdef _MSC_VER
void
__GSHandlerCheck()
{
}
int __security_cookie;
void
__security_check_cookie()
{
}
BOOLEAN CcPfEnablePrefetcher;
unsigned long __readfsdword(const unsigned long Offset)
{
return 0;
}
void main()
{
}
#endif

View file

@ -19,6 +19,8 @@ EXTERN KiSystemFatalException:PROC
EXTERN KiNpxNotAvailableFaultHandler:PROC
EXTERN KiGeneralProtectionFaultHandler:PROC
EXTERN KiXmmExceptionHandler:PROC
EXTERN KiDeliverApc:PROC
EXTERN KiDispatchInterrupt:PROC
/* GLOBALS *******************************************************************/
@ -524,9 +526,76 @@ PUBLIC KiDebugServiceTrap
ExitTrap TF_SAVE_ALL
.ENDP KiDebugServiceTrap
TRAP_ENTRY KiApcInterrupt, (TF_HAS_ERROR_CODE OR TF_SAVE_ALL)
TRAP_ENTRY KiDpcInterrupt, (TF_HAS_ERROR_CODE OR TF_SAVE_ALL)
TRAP_ENTRY KiIpiInterrupt, (TF_HAS_ERROR_CODE OR TF_SAVE_ALL)
PUBLIC KiApcInterrupt
.PROC KiApcInterrupt
/* No error code */
EnterTrap (TF_VOLATILES or TF_IRQL)
/* Raise to APC_LEVEL */
mov rax, APC_LEVEL
mov cr8, rax
/* End the interrupt */
mov dword ptr [APIC_EOI], 0
/* Enable interrupts */
sti
/* Call the worker routine */
mov cl, [rbp + KTRAP_FRAME_SegCs] // ProcessorMode
and cl, 1
mov rdx, 0 // ExceptionFrame
mov r8, rdx // TrapFrame
call KiDeliverApc
/* Disable interrupts */
cli
/* Return */
ExitTrap (TF_VOLATILES or TF_IRQL)
.ENDP KiApcInterrupt
PUBLIC KiDpcInterrupt
.PROC KiDpcInterrupt
/* No error code */
EnterTrap (TF_VOLATILES or TF_IRQL)
/* Raise to DISPATCH_LEVEL */
mov rax, DISPATCH_LEVEL
mov cr8, rax
/* End the interrupt */
mov dword ptr [APIC_EOI], 0
/* Call the worker routine */
sti
call KiDispatchInterrupt
cli
/* Return */
ExitTrap (TF_VOLATILES or TF_IRQL)
.ENDP KiDpcInterrupt
PUBLIC KiIpiInterrupt
.PROC KiIpiInterrupt
/* No error code */
EnterTrap (TF_VOLATILES or TF_IRQL)
/* Raise to IPI_LEVEL */
mov rax, IPI_LEVEL
mov cr8, rax
/* End the interrupt */
mov dword ptr [APIC_EOI], 0
int 3
/* Return */
ExitTrap (TF_VOLATILES or TF_IRQL)
.ENDP KiIpiInterrupt
PUBLIC KiUnexpectedInterrupt