Hallo.
Kann meinen Beitrag nicht mehr beatbeiten. Hier das Testergebnis von Win 95 native:
Delphi-Quellcode:
Betriebssystem: Windows 95b (Native)
Testprogramm aus dem alten Thread
Processors: 1
Running IN a virtual machine-Machine: Negativ (OK)
ID-Basis: 2148163584
Neues Testprogramm
Found processors: 1
GDT: 0xC0048E34 (511)
IDT: 0x800A6000 (767)
LDTR: 0xDEAD00B8
Running in a virtual machine? Positiv (FEHLER!!)
Heute bzw. morgen reiche ich noch das Ergebnis von Windows ME native nach.
Du solltest auf jeden Fall noch jemand finden, der dir die Wert bei Windows NT nachweisen kann.
Ich würde mal behaupten, dass folgendes Muster sicher sein
könnte:
IsVirtualMachine := DrittesByte(LDTR) = $FF;
Das wäre mit der Annahme verbunden, dass jedes virtualisierte Windows System den LDTR 0xDEADFF.. verwendet
Es ist mir unbekannt, wie sich das LDTR bei mehreren Prozessoren oder bei mehreren VMM's oder bei Windows NT und Vista verhält! Ebenfalls weis ich nicht, ob VirtualBox oder VMWare etc ebenfalls das Muster LDTR = 0xDEADFF.. verwendet. Ich habe nur mit Microsoft Virtual PC 2007 getestet. Ich habe auch testweise mehrere verschiedene virtuelle Betriebssysteme gleichzeitig aufgemacht. Alle hatten dabei den LDTR 0xDEADFFA8.
Sollte ein anderes VirtualMachine-System beim dritten LDTR-Byte etwas anderes als $FF setzen,
könnte es auch so funktionieren:
IsVirtualMachine := DrittesByte(LDTR) <> $00;
Das wäre dann aber mit der Annahme verbunden, dass jedes native Windows System den LDTR 0xDEAD00.. verwendet
Ich finde das ein sehr interessantes Thema, zumal es im Internet kaum Informationen zu LDTR gib (bzw. mehr Fehlinformationen als absolut universell korrekte). Wenn du denkst, dass deine Methode überall korrekt funktioniert, wäre das ein perfekter Beitrag zur CodeLib. Leg dir auf jeden Fall eine Excel-Tabelle an, in der du alle Testergebnisse sammelst, die dir hier angeboten werden, sodass du schneller Zusammenhänge finden kannst.
Gruß
blackdrake