MiFreeRetpolineImportInfo
VOID __fastcall MiFreeRetpolineImportInfo(INT64 a1){
_ETHREAD *CurrentThread;
_CONTROL_AREA *v2;
__int64 v3;
volatile INT64 *v4;
__int64 v5;
void *v6;
__int64 v7;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( *(_QWORD *)(a1 + 112) )
{
v2 = MiSectionControlArea(*(_SECTION **)(a1 + 112));
v3 = *(_QWORD *)(*((_QWORD *)v2 + 12) + 32i64);
--*((_WORD *)CurrentThread + 243);
v4 = (volatile INT64 *)(v3 + 24);
ExAcquirePushLockExclusiveEx(v3 + 24, 0i64);
v5 = *(_QWORD *)(v3 + 96);
v6 = *(void **)(v5 + 16);
*(_QWORD *)(v5 + 16) = 0i64;
if( (_InterlockedExchangeAdd64(v4, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v4);
KeAbPostRelease((PVOID)v4);
KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
if( (MiFlags & 0x10000) != 0 )
VslFreeSecureImageIat(*(_QWORD *)(*((_QWORD *)v2 + 12) + 56i64));
MiWalkEntireImage((ULONG_PTR)v2, qword_140C4C9B0, 16, 0xFFFFFFFF);
}
else
{
v7 = *(_QWORD *)(a1 + 296);
v6 = *(void **)(v7 + 16);
*(_QWORD *)(v7 + 16) = 0i64;
}
if( v6 )
ExFreePoolWithTag(v6, 0);
}Referenced by:
MiUnloadSystemImage