Vielen Dank Oli
Habs jetzt mal so implementiert und es scheint zu funktionieren:
Delphi-Quellcode:
function CheckVirtual: Boolean;
function GetSIDTBaseAddress: DWORD;
assembler;
asm
sub esp, 8
sidt qword ptr [esp]
mov eax, dword ptr [esp+2]
add esp, 8
end;
var
SIDT: DWORD;
begin
Result := false;
SIDT := GetSIDTBaseAddress;
if SIDT >= $0D0000000
then
begin
Result := true;
end;
if SIDT >= $0FF000000
then
begin
Result := true;
end;
end;
Allerdings habe ich die Abfrage
Code:
CMP DWORD PTR [opIDT+2], $0F0000000
JLE _check_virtualpc
jetzt rausgelassen. Habe ich sie als
if SIDT <= $0F0000000 then ...
implementiert gehabt, allerdings war diese Abfrage auch auf der VM nicht zutreffend, weshalb die VM dann auch nicht erkannt wurde.
Nachtrag 1: Unter VirtualBox mit Windows2000 scheints schonmal nicht zu funktionieren. WinXP Pro und WinXP MCE werden aber als VM erkannt.
Nachtrag 2: Bei Vista wird auch keine VM erkannt. Liegen die BaseAdressen der SIDT bei Vista, 2000, etc in anderen Bereichen?