KiSystemServiceHandler
VOID __fastcall KiSystemServiceHandler(
_EXCEPTION_RECORD *ExceptionRecord,
VOID *EstablisherFrame,
_CONTEXT *ContextRecord,
VOID *DispatcherContext){
_ETHREAD *CurrentThread;
__int64 v5;
if( (ExceptionRecord->ExceptionFlags & 0x66) != 0 )
{
if( (ExceptionRecord->ExceptionFlags & 0x20) == 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( *((_BYTE *)CurrentThread + 562) )
KiBugCheckDispatch(0x3Au, (ULONG_PTR)EstablisherFrame, (ULONG_PTR)ContextRecord, (ULONG_PTR)DispatcherContext);
v5 = *((_QWORD *)CurrentThread + 18);
*((_QWORD *)CurrentThread + 18) = *(_QWORD *)(v5 + 312);
*((_BYTE *)CurrentThread + 562) = *(_BYTE *)(v5 + 40);
}
}
else
{
if( &KiSystemServiceGdiTebAccess == ExceptionRecord->ExceptionAddress
|| &KiSystemServiceCopyStart <= ExceptionRecord->ExceptionAddress
&& &KiSystemServiceCopyEnd > ExceptionRecord->ExceptionAddress )
{
RtlUnwindEx(
EstablisherFrame,
KiSystemServiceExit,
ExceptionRecord,
(PVOID)(unsigned int)ExceptionRecord->ExceptionCode,
ContextRecord,
0i64);
}
if( *((_BYTE *)KeGetCurrentThread() + 562) )
KiBugCheckDispatch(
0x3Bu,
(unsigned int)ExceptionRecord->ExceptionCode,
(ULONG_PTR)ExceptionRecord->ExceptionAddress,
(ULONG_PTR)ContextRecord);
}
}Referenced by:
No references.