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.