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.