MiCaptureRetpolineImportInfo

INT64 __fastcall MiCaptureRetpolineImportInfo(INT64 a1, INT64 a2){
  _ETHREAD *CurrentThread; 
  _DWORD *v3; 
  __int64 v4; 
  __int64 v6; 
  __int64 v7; 
  unsigned int(*v8)(void); 
  INT64 result; 
  _DWORD *v10; 
  char v11; 
  ULONG v12; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v3 = 0i64;
  v4 = *(_QWORD *)(a2 + 96);
  v12 = 0;
  v6 = *(_QWORD *)(v4 + 32);
  v8 = (unsigned int(*)(void))((unsigned __int64)MiIsTargetFullyRetpolined & -(__int64)MiIsRetpolineEnabled());
  result = RtlCaptureRetpolineImportRvas(
             *(char **)(v7 + 48),
             *(_QWORD *)(v7 + 48),
             *(unsigned int *)(a1 + 64),
             v8,
             0i64,
             &v12);
  if( (int)result >= 0 )
    goto LABEL_5;
  if( (_DWORD)result == -1073741789 )
  {
    LODWORD(v10) = MiAllocatePool((struct _SLIST_ENTRY *)0x100);
    v3 = v10;
    if( !v10 )
      return 3221225495i64;
    result = RtlCaptureRetpolineImportRvas(
               *(char **)(a1 + 48),
               *(_QWORD *)(a1 + 48),
               *(unsigned int *)(a1 + 64),
               v8,
               v10,
               &v12);
    if( (int)result >= 0 )
    {
LABEL_5:
      --*((_WORD *)CurrentThread + 243);
      ExAcquirePushLockExclusiveEx(v6 + 24, 0i64);
      *(_QWORD *)(*(_QWORD *)(v6 + 96) + 16i64) = v3;
      v11 = _InterlockedExchangeAdd64((volatile signed __int64 *)(v6 + 24), 0xFFFFFFFFFFFFFFFFui64);
      if( (v11 & 2) != 0 && (v11 & 4) == 0 )
        ExfTryToWakePushLock((volatile INT64 *)(v6 + 24));
      KeAbPostRelease((PVOID)(v6 + 24));
      KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
      return 0i64;
    }
  }
  return result;
}

Referenced by:

MiApplyImportOptimizationToRuntimeDriver