SmPrepareForFatalHeapCorruption
NTSTATUS __stdcall SmPrepareForFatalHeapCorruption(VOID *Src, INT64 a2){
unsigned int v2;
unsigned int v3;
__int64 v4;
__int64 v6;
__int64 v7;
VOID **PoolWithTag;
_KBUGCHECK_REASON_CALLBACK_RECORD *v9;
NTSTATUS v10;
_QWORD *v11;
__int64 *v13;
v4 = v3;
v6 = v2;
LODWORD(v7) = MmGetPhysicalAddress((UINT64)Src);
*v13 = v7 / 4096;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x1060ui64, 1348627827i64);
v9 = (_KBUGCHECK_REASON_CALLBACK_RECORD *)PoolWithTag;
if( !PoolWithTag )
return -1073741670;
*((_BYTE *)PoolWithTag + 44) = 0;
v11 = (_QWORD *)(((unsigned __int64)PoolWithTag + 55) & 0xFFFFFFFFFFFFFFF8ui64);
*v11 = 1i64;
v11[6] = 0i64;
v11[5] = *v13;
v11[1] = Src;
v11[2] = 4096i64;
v11[4] = v4;
v11[3] = v6;
memmove(v11 + 6, Src, 0x1000u);
if( KeRegisterBugCheckReasonCallback(
v9,
(PKBUGCHECK_REASON_CALLBACK_ROUTINE)SmFatalHeapCorruptionDumpCallback,
KbCallbackSecondaryDumpData,
(PUCHAR)"nt!store memory compression") )
{
v9 = 0i64;
v10 = 0;
}
else
{
v10 = -1073741670;
}
if( v9 )
ExFreePoolWithTag(v9, 0);
return v10;
}Referenced by:
SmHpBufferProtectEx