MiInitializeRetpoline

INT64 __stdcall MiInitializeRetpoline(){
  _ETHREAD *CurrentThread; 
  int RetpolineStubsFunctionTable; 
  INT64 v3; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v3 = 0i64;
  RetpolineStubsFunctionTable = dword_140C4C9CC;
  qword_140C4C9C0 = (__int64)&qword_140C4C9B8;
  qword_140C4C9B8 = &qword_140C4C9B8;
  if( dword_140C4C9CC < 0 )
    return(unsigned int)RetpolineStubsFunctionTable;
  if( (KiSpeculationFeatures & 0x2000000) == 0 )
    return 0;
  RetpolineStubsFunctionTable = MiLockRetpolineStubs();
  if( RetpolineStubsFunctionTable < 0 )
    return(unsigned int)RetpolineStubsFunctionTable;
  qword_140C4C9B0 = MiReservePtes((INT64)&qword_140C4EC80, 1ui64);
  if( qword_140C4C9B0 )
  {
    RetpolineStubsFunctionTable = MiCreateRetpolineBitmap(&v3);
    if( RetpolineStubsFunctionTable < 0 )
      return(unsigned int)RetpolineStubsFunctionTable;
    MmAcquireLoadLock();
    RetpolineStubsFunctionTable = MiMarkRetpolineBits(PsNtosImageBase);
    if( RetpolineStubsFunctionTable < 0
      || (unsigned int)RtlIsImageFullyRetpolined(PsHalImageBase)
      && (RetpolineStubsFunctionTable = MiMarkRetpolineBits((INT64)PsHalImageBase), RetpolineStubsFunctionTable < 0) )
    {
      MmReleaseLoadLock(CurrentThread);
      return(unsigned int)RetpolineStubsFunctionTable;
    }
    MmReleaseLoadLock(CurrentThread);
    retpoline_image_bitmap = v3 - 0x1FFFF0000000i64;
    RetpolineStubsFunctionTable = RtlCreateRetpolineStubsFunctionTable(
                                    v3 - 0x1FFFF0000000i64,
                                    Base,
                                    (unsigned int)(dword_140C4C9C8 << 12));
    if( RetpolineStubsFunctionTable < 0 )
      return(unsigned int)RetpolineStubsFunctionTable;
    dword_140C00E94 = dword_140C4C9F0;
    dword_140C00E98 = dword_140C4C9C8 << 12;
    return 0;
  }
  return 3221225626i64;
}

Referenced by:

MiInitSystem