ViThunkReplaceImportIfThunkedOrderDependent
UINT64 __stdcall ViThunkReplaceImportIfThunkedOrderDependent(UINT64 *ImportAddress, UINT64 NoReboot){
int v2;
unsigned int v3;
_VERIFIER_THUNKS *v4;
UINT64 *v5;
UINT64 v6;
char v7;
_VERIFIER_THUNKS v8;
UINT64 v9;
v3 = 0;
v4 = &VfOrderDependentThunks;
v5 = ImportAddress;
if( *(_QWORD *)&VfOrderDependentThunks )
{
v6 = *ImportAddress;
while( !v6 || v6 != *((_QWORD *)v4 + 2) )
{
v4 += 14;
if( !*(_QWORD *)v4 )
return v3;
}
if( v2 )
{
v9 = *((_QWORD *)v4 + 5);
if( v9 )
goto LABEL_22;
}
else
{
v7 = *(&stru_140CF2E80 + 7308);
if( (*(&stru_140CF2E80 + 7308) & 8) == 0
|| VfIsVerifierEnabled() && ((*(&stru_140CF2E80 + 1826) & 0xFFAFFFFF) != 0 || (v7 & 2) != 0 || (v7 & 4) != 0) )
{
goto LABEL_17;
}
if( !XdvEnabled )
return 1;
if( !VfDifAPIThunkContextHead )
return 1;
v8 = v4[6];
if( (v8 & 1) == 0 )
return 1;
if( (v8 & 4) != 0 )
{
LABEL_17:
v9 = *((_QWORD *)v4 + 1);
LABEL_18:
ImportAddress = v5;
LABEL_22:
MmReplaceImportEntry(ImportAddress, v9);
return 1;
}
v9 = **((_QWORD **)v4 + 4);
if( v9 )
goto LABEL_18;
}
return 1;
}
return v3;
}Referenced by:
ViThunkReplaceAllThunkedImports