Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V) (https://www.delphipraxis.net/141138-hardwarevirtualisierung-verfuegbar-intel-vt-amd-v.html)

Kyro 3. Okt 2009 11:11


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?

Codewalker 3. Okt 2009 11:15

Re: Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V)
 
Bin mir nicht sicher, aber kann man das nicht per WMI ermitteln?

Edit: http://social.msdn.microsoft.com/For...a-2148974d2203 . Da steht zumindest dass es geht, aber du bekommst halt nicht per WMI raus, ob es aktiviert ist, sondern nur, ob es theoretisch nutzbar wäre.

Apollonius 3. Okt 2009 11:17

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:
function VMXAvailable: Boolean;
asm
  mov eax, 1
  cpuid
  test ecx, 32
  setnz al
end;
Getippt und nicht getestet.

hathor 3. Okt 2009 11:19

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.

http://www.grc.com/securable.htm

und VT.exe von INTEL:

TurboMartin 3. Okt 2009 11:22

Re: Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V)
 
Wenn ein CPU das unterstützt, ist ein prozessorflag gesetzt, bei Intel vmx, bei AMD svm.

Kyro 3. Okt 2009 12:00

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

Apollonius 3. Okt 2009 12:05

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.

hathor 3. Okt 2009 12:17

Re: Hardwarevirtualisierung verfügbar? (Intel-VT/AMD-V)
 
Code:
#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);
}
Infos:
coreboot ? Wikipedia
coreboot
Supported Motherboards - coreboot
Supported Chipsets and Devices - coreboot
Download coreboot - coreboot
QEMU - coreboot
FILO - coreboot
Libpayload - coreboot

Flashrom - coreboot
Flashrom Live CD - coreboot
Nvramtool - coreboot

Ectool - coreboot

himitsu 3. Okt 2009 12:24

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:

hathor 3. Okt 2009 12:53

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 13:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz