MiFreePrivateFixupEntryForSystemImage
_MI_SYSTEM_IMAGE_PRIVATE_FIXUP *__stdcall MiFreePrivateFixupEntryForSystemImage(
VOID *ImageBaseAddress,
UINT64 ActualFree){
PVOID *v3;
int v4;
unsigned __int8 v5;
__int64 v6;
unsigned __int64 v7;
__int64 v8;
_QWORD *v9;
v3 = 0i64;
v4 = ActualFree;
v5 = ExAcquireSpinLockExclusive(&unk_140C4CA24);
v6 = qword_140C4CA00;
v7 = v5;
while( (__int64 *)v6 != &qword_140C4CA00 )
{
v3 = (PVOID *)v6;
if( ImageBaseAddress == *(VOID **)(v6 + 16) )
{
if( !v4 )
{
ExReleaseSpinLockExclusiveFromDpcLevel(&unk_140C4CA24);
__writecr8(v7);
return(_MI_SYSTEM_IMAGE_PRIVATE_FIXUP *)v6;
}
v8 = *(_QWORD *)v6;
v9 = *(_QWORD **)(v6 + 8);
if( *(_QWORD *)(*(_QWORD *)v6 + 8i64) != v6 || *v9 != v6 )
__fastfail(3u);
*v9 = v8;
*(_QWORD *)(v8 + 8) = v9;
break;
}
v6 = *(_QWORD *)v6;
}
ExReleaseSpinLockExclusiveFromDpcLevel(&unk_140C4CA24);
__writecr8(v7);
if( v4 )
{
if( (__int64 *)v6 == &qword_140C4CA00 )
KeBugCheckEx(0x1Au, (PVOID)0x1011, ImageBaseAddress, 0i64, 0i64);
ExFreePoolWithTag(v3[5], 0);
ExFreePoolWithTag(v3, 0);
}
return 0i64;
}Referenced by:
MiCountSystemImageCommitment
MiGetSystemAddressForImage