ViThunkReplaceImportIfThunkedOrderDependent
UINT64 __stdcall ViThunkReplaceImportIfThunkedOrderDependent(UINT64 *ImportAddress, UINT64 NoReboot){
int v2;
unsigned int v3;
UINT8 **v4;
UINT64 *v5;
UINT64 v6;
char v7;
int v8;
UINT64 v9;
v3 = 0;
v4 = &VfOrderDependentThunks;
v5 = ImportAddress;
if( VfOrderDependentThunks )
{
v6 = *ImportAddress;
while( !v6 || (UINT8 *)v6 != v4[2] )
{
v4 += 7;
if( !*v4 )
return v3;
}
if( v2 )
{
v9 = (UINT64)v4[5];
if( v9 )
goto LABEL_22;
}
else
{
v7 = BYTE4(VfRuleClasses);
if( (VfRuleClasses & 0x800000000i64) == 0
|| (unsigned int)VfIsVerifierEnabled() && ((VfRuleClasses & 0xFFAFFFFF) != 0 || (v7 & 2) != 0 || (v7 & 4) != 0) )
{
goto LABEL_17;
}
if( !XdvEnabled )
return 1;
if( !VfDifAPIThunkContextHead )
return 1;
v8 = *((_DWORD *)v4 + 6);
if( (v8 & 1) == 0 )
return 1;
if( (v8 & 4) != 0 )
{
LABEL_17:
v9 = (UINT64)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