![]() |
Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V)
Um ehrlich zu sein weiss ich nicht so recht wo ich anfangen soll zu suchen (In der DP hätte ich dazu nichts gefunden)...
Ich brauche eine API (oder irgendeine andere Möglichkeit) mit der ich ermitteln kann ob ein Computer (lokal) Hardwarevirtualisierung unterstützt (egal ob das nun Intel VT, AMD-V oder was auch immer noch kommen wird ist) Hat hier jemand einen Tipp für mich - eventuell ein Stichwort was mir die Suche erleichtert? |
Re: Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V)
Bin mir nicht sicher, aber kann man das nicht per WMI ermitteln?
Edit: ![]() |
Re: Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V)
Mit dem Maschinencode CPUID kannst du prüfen, ob Virtual Machine Extensions (VMX) von Intel unterstützt sind.
Delphi-Quellcode:
Getippt und nicht getestet.
function VMXAvailable: Boolean;
asm mov eax, 1 cpuid test ecx, 32 setnz al end; |
Re: Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V)
Liste der Anhänge anzeigen (Anzahl: 1)
Mit dem Programm securable.exe kannst Du es feststellen.
Nicht nur die CPU muss das unterstützen, sondern auch das BIOS. ![]() und VT.exe von INTEL: |
Re: Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V)
Wenn ein CPU das unterstützt, ist ein prozessorflag gesetzt, bei Intel vmx, bei AMD svm.
|
Re: Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V)
WOW - Vielen Dank für die zahlreichen und guten Antworten - damit hätte ich nicht gerechnet dass hier so schnell darauf beantwortet wird!
Leider habe ich daran gar nicht gedacht dass man ja die Hardwarevirtualisierung im BIOS (meistens) abschalten kann, bzw. dass es auch Computer gibt die zwar eine CPU haben aber kein Mainboard was Hardwarevirtualisierung unterstützt.... @Codewalker: Die Methode über WMI gefällt mir schon ganz gut - wenn man jetzt noch herausfinden könnte ob es auch aktiviert ist (was scheinbar via WMI nicht möglich ist) @hathor: Externe Programme abzufragen will ich möglichst vermeiden - Trotzdem Danke für den Hinweis! @Apollonius: Die Funktion "VMXAvailable" würde auch bei AMD-V True rückliefern oder? Um meine ursprüngliche Frage etwas zu präzisieren: Ich möchte gerne Ermitteln ob im aktuellen Windows Betrieb Hardwarevirtualisierung verfügbar ist (+Aktiviert) - wenn möglichst via API, WMI, Assembler |
Re: Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V)
Ich habe gerade nur das Intel-Handbuch da - mit AMD kenne ich mich nicht aus, aber TurboMartin hat ja bereits angedeutet, dass das ein anderes Flag ist. Was bei Deaktivierung passiert, weiß ich auch nicht.
Edit: Doch, ich weiß es. Das BIOS manipuliert ein Model Specific Register (IA32_FEATURE_CONTROL um genau zu sein). Dummerweise kommt man aus dem Usermode nicht an dessen Wert heran. |
Re: Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V)
Code:
Infos:
#define IA32_FEATURE_CONTROL 0x003a
#define CPUID_VMX (1 << 5) #define CPUID_SMX (1 << 6) static void enable_vmx(void) { struct cpuid_result regs; msr_t msr; msr = rdmsr(IA32_FEATURE_CONTROL); if (msr.lo & (1 << 0)) { /* VMX locked. If we set it again we get an illegal * instruction */ return; } regs = cpuid(1); if (regs.ecx & CPUID_VMX) { msr.lo |= (1 << 2); if (regs.ecx & CPUID_SMX) msr.lo |= (1 << 1); } wrmsr(IA32_FEATURE_CONTROL, msr); msr.lo |= (1 << 0); /* Set lock bit */ wrmsr(IA32_FEATURE_CONTROL, msr); } ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Re: Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V)
also selbst wenn es deaktiviert ist, sollte das CPUID-Flag anzeigen, daß die CPU es kann.
bei AMD könnte es auch das gleiche Flag sein, wenn es auch anders heißt. (könnte aber auch ein anderes Flag sein) Der Grund ist jedenfalls, daß AMD und Intel da eine andere "Technologie" für die Virtualisierung verwenden, welche dann natürlich auch unterschiedlich heißen :angel2: |
Re: Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V)
AMD - SVM:
.
Code:
if (cpu->maxei >= 0x8000000a) {
cpuid (cpu->number, 0x8000000a, &eax, &ebx, NULL, &edx); printf("SVM: revision %d, %d ASIDs", (int) (eax & 0xff), (int) ebx); if (edx & 1) printf(", np"); if (edx & 2) printf(", lbrVirt"); if (edx & 4) printf(", SVMLock"); if (edx & 8) printf(", NRIPSave"); printf("\n"); } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz