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