SuRun x64
20. September 2007Mein Arbeitsrechner hat einen Core 2 Quad Prozessor. Damit kann man prima herausfinden, ob die eigene Software auch bei vielen Threads gute Arbeit verrichtet. Ich habe zum Software-Testen ein Windows XP x64 installiert und erstaunt festgestellt, dass unter x64 auch ganz normale 32Bit Dienste laufen können. So z.B. lief mein SuRun ohne Probleme… ähm ohne Abzustürzen 🙄 …so richtig in Funktion wollte es nicht kommen.
Also machte ich den Versuch, SuRun mit VC8 (Visual Studio 2005) zu kompilieren. Das ging natürlich erstmal gar nicht und später nicht ohne Weiteres. Die „sicheren“ String-Funktionen, die es in VC8 gibt, kann man mit VC6 nicht benutzen, nimmt man die aber nicht, warnt der Compiler sich halb Tod. Auch bei der Implementierung von for-Schleifen hat Microsoft was geändert, so funktionierte in VC6
for(int i=10;i;i-- ) printf("Hallo"); int x=i; //korrekt, i ist noch definiert.
und es war ein Fehler, wenn man schrieb
for(int i=10;i;i-- ) printf("Hallo"); for(int i=10;i;i-- ) //Fehler! i ist bereits definiert printf("Hallo");
Bei VC8 (out of the Box) ist das alles anders und ich war zu faul, mich näher damit zu beschäftigen.
Also habe ich lieber einen Weg gesucht, SuRun für x64 mit VC6 zu kompilieren.
Dabei bin ich auf Stefan Kuhr’s hervorragenden Blog gestoßen. Stefan hat u.A. in neun Artikeln (1,2,3,4,5,6,7,8,9) zu Windows x64 geschrieben, was ich wissen wollte. Danke Stefan! 🙂
Also habe ich das „Windows Server 2003 SP1 Platform SDK“ (April 2005) installiert und erstmal probiert, ob meine Anwendungen noch kompilierbar sind und funktionieren. Zwei Bibliotheken des SDK scheinen nicht mit VC6 debug Versionen zu harmonieren (uuid.lib, shell32.lib). Ich habe sie durch funktionierende ersetzt und alles scheint zu funktionieren.
Dann habe ich mich daran gemacht, dem Projekt von SuRun eine x64 Konfiguration hinzuzufügen.
Nach dem Anpassen vieler Datentypen kompilierte mein VC6 dann auch ein SuRun x64 binary.
In Windows x64 ausprobiert stellte ich dann fest, dass SuRun’s Hooks in 64Bit Anwendungen klaglos funktionierten, in 32Bit Anwendungen jedoch nicht. Ist ja auch klar: In Windows x64 laufen zwei Systeme parallel, Win32 und Win x64!
Also habe ich ein SuRun32 zu SuRun x64 dazu gepackt. SuRun x64 startet bei der Benutzeranmaldung nun auch „SuRun32 /SYSMENUHOOK“. Damit haben beide Teilsysteme von Windows den System-Menü-Hook.
Bisher funktioniert SuRun x64 bei mir in VMware und „Windows XP Professional x64 Edition“ ohne Probleme.