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