Einzelnen Beitrag anzeigen

Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Herausfinden ob eigene App im Windows XP Modus läuft

  Alt 27. Okt 2010, 21:36
Ich habe hier noch eine Fetzen Uraltcode, keine Ahnung ob der für den neuen VirtualPC in Win7 noch passt...
Delphi-Quellcode:

// running in Virtaul PC
function running_inside_vpc: boolean; assembler;
asm
  push ebp

  mov ecx, offset @@exception_handler
  mov ebp, esp

  push ebx
  push ecx
  push dword ptr fs:[0]
  mov dword ptr fs:[0], esp

  mov ebx, 0 // flag
  mov eax, 1 // VPC function number

  // call VPC
  db 00Fh, 03Fh, 007h, 00Bh

  mov eax, dword ptr ss:[esp]
  mov dword ptr fs:[0], eax
  add esp, 8

  test ebx, ebx
  setz al
  lea esp, dword ptr ss:[ebp-4]
  mov ebx, dword ptr ss:[esp]
  mov ebp, dword ptr ss:[esp+4]
  add esp, 8
  jmp @@ret
  @@exception_handler:
  mov ecx, [esp+0Ch]
  mov dword ptr [ecx+0A4h], -1 // EBX = -1 -> not running, ebx = 0 -> running
  add dword ptr [ecx+0B8h], 4 // -> skip past the detection code
  xor eax, eax // exception is handled
  ret
  @@ret:
end;


// running in VMWare
function IsVMwarePresent(): LongBool; stdcall; // platform;
begin
  Result := False;
 {$IFDEF CPU386}
  try
    asm
            mov eax, 564D5868h
            mov ebx, 00000000h
            mov ecx, 0000000Ah
            mov edx, 00005658h
            in eax, dx
            cmp ebx, 564D5868h
            jne @@exit
            mov Result, True
    @@exit:
    end;
  except
    Result := False;
  end;
{$ENDIF}
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat