MiFreeRetpolineImportInfo

VOID __stdcall MiFreeRetpolineImportInfo(INT64 a1){
  _ETHREAD *CurrentThread; 
  _CONTROL_AREA *v2; 
  _EX_PUSH_LOCK *DynamicRelocations; 
  _EX_PUSH_LOCK *v4; 
  __int64 bf_0; 
  void *v6; 
  __int64 v7; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  if( *(_QWORD *)(a1 + 112) )
  {
    v2 = MiSectionControlArea(*(_SECTION **)(a1 + 112));
    DynamicRelocations = (_EX_PUSH_LOCK *)v2->u2.SeImageStub->DynamicRelocations;
    --CurrentThread->Tcb.SpecialApcDisable;
    v4 = DynamicRelocations + 3;
    ExAcquirePushLockExclusiveEx(DynamicRelocations + 3, 0i64);
    bf_0 = DynamicRelocations[12]._bf_0;
    v6 = *(void **)(bf_0 + 16);
    *(_QWORD *)(bf_0 + 16) = 0i64;
    if( (_InterlockedExchangeAdd64(&v4->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock(v4);
    KeAbPostRelease(v4);
    KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
    if( (MiFlags & 0x10000) != 0 )
      VslFreeSecureImageIat(v2->u2.SeImageStub->StrongImageReference);
    MiWalkEntireImage(v2, Opaque, 16i64, 0xFFFFFFFFui64);
  }
  else
  {
    v7 = *(_QWORD *)(a1 + 296);
    v6 = *(void **)(v7 + 16);
    *(_QWORD *)(v7 + 16) = 0i64;
  }
  if( v6 )
    ExFreePoolWithTag(v6, 0);
}

Referenced by:

No references.