MiFreePrivateFixupEntryForSystemImage
LIST_ENTRY *__fastcall MiFreePrivateFixupEntryForSystemImage(VOID *ImageBaseAddress, UINT64 ActualFree){
PVOID *p_Flink;
int v4;
KIRQL v5;
LIST_ENTRY *v6;
unsigned __int64 v7;
_LIST_ENTRY *Flink;
_LIST_ENTRY *Blink;
p_Flink = 0i64;
v4 = ActualFree;
v5 = ExAcquireSpinLockExclusive(&dword_140C4CA24);
v6 = (LIST_ENTRY *)qword_140C4CA00;
v7 = v5;
while( v6 != (LIST_ENTRY *)&qword_140C4CA00 )
{
p_Flink = (PVOID *)&v6->Flink;
if( ImageBaseAddress == v6[1].Flink )
{
if( !v4 )
{
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&dword_140C4CA24);
__writecr8(v7);
return v6;
}
Flink = v6->Flink;
Blink = v6->Blink;
if( v6->Flink->Blink != v6 || Blink->Flink != v6 )
__fastfail(3u);
Blink->Flink = Flink;
Flink->Blink = Blink;
break;
}
v6 = v6->Flink;
}
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&dword_140C4CA24);
__writecr8(v7);
if( v4 )
{
if( v6 == (LIST_ENTRY *)&qword_140C4CA00 )
KeBugCheckEx(0x1Au, 0x1011ui64, (ULONG_PTR)ImageBaseAddress, 0i64, 0i64);
ExFreePoolWithTag(p_Flink[5], 0);
ExFreePoolWithTag(p_Flink, 0);
}
return 0i64;
}Referenced by:
MiCountSystemImageCommitment
MiGetSystemAddressForImage
MiUnloadSystemImage