MiCaptureRetpolineImportInfo

NTSTATUS __stdcall MiCaptureRetpolineImportInfo(INT64 a1, INT64 a2){
  _ETHREAD *CurrentThread; 
  _DWORD *Pool; 
  __int64 v4; 
  _EX_PUSH_LOCK *v6; 
  __int64 v7; 
  unsigned int(*v8)(void); 
  NTSTATUS result; 
  char v10; 
  UINT64 v11; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  Pool = 0i64;
  v4 = *(_QWORD *)(a2 + 96);
  LODWORD(v11) = 0;
  v6 = *(_EX_PUSH_LOCK **)(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,
             (unsigned int *)&v11);
  if( result >= 0 )
    goto LABEL_5;
  if( result == -1073741789 )
  {
    Pool = MiAllocatePool(256i64, (unsigned int)v11, 0x69526D4Dui64);
    if( !Pool )
      return -1073741801;
    result = RtlCaptureRetpolineImportRvas(
               *(char **)(a1 + 48),
               *(_QWORD *)(a1 + 48),
               *(unsigned int *)(a1 + 64),
               v8,
               Pool,
               (unsigned int *)&v11);
    if( result >= 0 )
    {
LABEL_5:
      --CurrentThread->Tcb.SpecialApcDisable;
      ExAcquirePushLockExclusiveEx(v6 + 3, 0i64);
      *(_QWORD *)(v6[12]._bf_0 + 16) = Pool;
      v10 = _InterlockedExchangeAdd64(&v6[3]._bf_0, 0xFFFFFFFFFFFFFFFFui64);
      if( (v10 & 2) != 0 && (v10 & 4) == 0 )
        ExfTryToWakePushLock(v6 + 3);
      KeAbPostRelease(&v6[3]);
      KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
      return 0;
    }
  }
  return result;
}

Referenced by:

MiApplyImportOptimizationToRuntimeDriver