Zitat von
Traudix:
Aus diesen Ausführungen entnehme ich, das ich 32 Bit Programme nicht ändern muß, wenn sie auf einer 64 Bit CPU laufen sollen. Denn, wenn der Prozessorkern auch beim 64 Bitter X86-kompatibel ist und im RealMode nur 16 Bittig, kennt er ja auch die 8- und 16-bittigen Register.
Da ist für die x86-64 (amd64, em64t) meist zutreffend. Der 32-Bit-Emulator (WoW64) den Microsoft entwickelt hat, sorgt dafür, dass die meisten 32-Bit-Anwendungen wie bisher funktionieren.
1) Schwierig wird es zum Beispiel dadurch, dass 32-Bit-Module nicht in 64-Bit-Prozesse geladen werden können (und vis versa). Das heißt, dass man für Shellerweiterungen eine 64-Bit-
DLL schreiben muss um in den 64-Bit Explorer zu kommen. Wenn man Strukturen aus anderen Prozessen liest (so wie
LuckieDIPS; siehe TLvItemBuffer), darf man nicht vergessen, dass es sich um die 64-Bit-Versionen der Strukturen handelt.
2) Die Registrierung für 32-Bit-Anwendungen ist in die 64-Bit-Registrierung eingehängt. Um aus WoW64 Zugriff auf die 64-Bit-Registrierung zu erhalten muss der
API spezielle Flags übergeben.
3) Einige Systemverzeichnisse werden innerhalb von WoW64 automatisch umgeleitet. Ein 32-Bit-Programm sieht zum Beispiel C:\WINDOWS\SysWOW64 als "C:\WINDOWS\system32" (unter C:\WINDOWS\SysWOW64 liegen die DLLs der
Win32-
API unter C:\WINDOWS\system32 die DLLs der Win64-
API). Das gleiche gilt auch für das %ProgramFiles%-Verzeichnis und andere. Um die 'Umleitung' zu umgehen muss man diese mit einer neuen
API deaktivieren. Es können also nur 32-Bit-Programme auf C:\WINDOWS\system32 zugreifen wenn sie die neuen APIs kennen...
Zitat von
Traudix:
(Bios-Interrupts, Farbpaletten-Einstellungen, Maussteuerung...) Hab auch paar Delphi Programme mit Assemblerteilen, wo sinngemäß das gleiche Problem vorliegt. Nun, wenn das später auf dem 64 Bitter kein Problem ist, brauche ich da nix zu ändern.
Es gibt keinen 16-Bit-Emulator (ntvdm) mehr!
Das ist mir bei
BiosHelp auf die Füße gefallen. Ich musste eine Weile Suchen bevor ich eine Lösung für Win64 gefunden hatte (Microsoft musste eine neue
API einführen um diese speziellen Bereiche auslesen zu können, da die bisherigen Methoden nicht mehr funktionierten).
Kurz: Es geht nicht ohne Tests auf einem echten Win64-System (sollte man seine Software nicht ohnehin auf den Zielplattformen testen
)