J'ai besoin de détecter si ma demande est en cours d'exécution au sein d'un système d'exploitation virtualisé instance ou non.
J'ai trouvé un article avec quelques informations utiles sur le sujet. Le même article apparaît dans plusieurs endroits, je ne suis pas sûr de la source d'origine. VMware met en œuvre un particulier non valide d'instructions x86 pour retourner des informations sur lui-même, tandis que VirtualPC utilise un nombre magique et port d'e/S avec une instruction.
C'est réalisable, mais semble être sans-papiers comportement dans les deux cas. Je suppose qu'une future version de VMWare ou VirtualPC peut changer le mécanisme. Est-il un meilleur moyen? Est-il un mécanisme de prise en charge pour l'un des produits?
De même, est-il un moyen de détecter Xen ou VirtualBox?
Je ne suis pas préoccupé par les cas où la plateforme est délibérément essayer de se cacher. Par exemple, les "pots de miel" utilisation de la virtualisation, mais parfois occulter les mécanismes de logiciels malveillants qui pourraient utiliser pour le détecter. Je n'aime pas que mon application pourrait penser qu'il n'est pas virtualisé dans ces "pots de miel", je suis à la recherche d'un "meilleur effort" de la solution.
L'application est principalement Java, même si je m'attends à utiliser du code natif, plus JNI pour cette fonction particulière. Windows XP/Vista de soutien qui est le plus important, bien que les mécanismes décrits dans l'article référencé sont caractéristiques génériques de x86 et ne comptez pas sur un OS installation.