KeRegisterBugCheckCallback

INT8 __fastcall KeRegisterBugCheckCallback(INT64 a1, INT64 a2, INT64 a3, UINT64 a4, INT64 Component){
  __int64 v5; 
  unsigned __int8 CurrentIrql; 
  INT8 v10; 
  __int64 v11; 
  __int64 v12; 

  v5 = (unsigned int)a4;
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(0xFui64);
  KxAcquireSpinLock(&KeBugCheckCallbackLock);
  v10 = 0;
  if( !*(_BYTE *)(a1 + 56) && !KiCheckForDuplicateBugCheckCallback((_LIST_ENTRY *)&KiSwapEvent + 21, (_LIST_ENTRY *)a1) )
  {
    *(_QWORD *)(a1 + 16) = a2;
    *(_QWORD *)(a1 + 24) = a3;
    *(_QWORD *)(a1 + 48) = Component + a3 + a2 + v5;
    *(_DWORD *)(a1 + 32) = v5;
    *(_QWORD *)(a1 + 40) = Component;
    *(_BYTE *)(a1 + 56) = 1;
    v12 = *(&KiSwapEvent + 42);
    if( *(_QWORD *)(*(&KiSwapEvent + 42) + 8i64) != v11 )
      __fastfail(3u);
    *(_QWORD *)a1 = *(&KiSwapEvent + 42);
    v10 = 1;
    *(_QWORD *)(a1 + 8) = v11;
    *(_QWORD *)(v12 + 8) = a1;
    *(&KiSwapEvent + 42) = a1;
  }
  KxReleaseSpinLock(&KeBugCheckCallbackLock);
  __writecr8(CurrentIrql);
  return v10;
}

Referenced by:

No references.