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