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