2009-05-08 8 views
4

Comment puis-je détecter si un système prend en charge la virtualisation matérielle via le code? (de préférence en C# ou en C++).Comment déterminer si la virtualisation matérielle est disponible via le code? (C#, C++)

J'ai essayé d'utiliser WMI et ManagementObjectSearcher et je n'ai pas pu trouver une propriété qui semblait représenter si le support de virtualisation était présent ou non dans la machine.

Question supplémentaire: Est-il possible de dire si la CPU prend en charge la virtualisation matérielle, mais est désactivée dans le BIOS?

Répondre

2

Je pense que l'affiche originale demande comment détecter que le matériel informatique prend en charge la virtualisation, et non pas qu'il est en cours d'exécution dans une machine virtuelle. Voir this question pour une réponse possible.

En outre, il peut être utile de vérifier si vous pouvez vérifier les indicateurs CPU, car il y aura le drapeau Intel vmx ou le drapeau AMD svm si le processeur prend en charge les extensions de virtualisation. Je ne peux pas dire que je sais comment cela devrait être fait sous Windows, mais l'information est disponible en /proc/cpuinfo sur Linux.

0

Je ne sais pas sur le code, mais Securable semble être en mesure de le faire.

+0

Exactement comme cette application - mais je dois le faire dans le code. J'ai recherché les résultats de requête WMI haut et bas et n'a pas pu trouver aucune propriété qui semblait être connectée à la virtualisation matérielle –

0

Cochez cette link, comme vous pouvez le voir, peut-être devriez-vous utiliser les classes WMI pour obtenir des informations. Le framework .NET a l'espace de noms System.Management pour le faire. La classe Win32_processor peut vous donner toutes les informations dont vous avez besoin sur le processeur, car vous ne pouvez pas accéder directement aux indicateurs cpu en utilisant la classe win32_processor, peut-être devez-vous vérifier la valeur de VirtualizationFirmwareEnabled

5

Je n'ai pas de réponse C-ish, mais Voici une approche PowerShell - c'est juste une simple requête WMI - qui peut aider.

Interrogation Win32_Processor; il y a des drapeaux "SecondLevelAddressTranslationExtensions" et "VirtualizationFirmwareEnabled". Ils semblent répondre aux questions pour moi.

En POSH, il est

(gwmi Win32_Processor) .VirtualizationFirmwareEnabled

et

(gwmi Win32_Processor) .SecondLevelAddressTranslationExtensions

J'espère que cela aide.

Mark Minasi

Questions connexes