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