Ausführen des Bildbetrachters unter Windows XP unter modernem Windows

Ich habe ein Verzeichnis mit alten Bildern, die ich in den Neunzigern gesammelt habe. Ich verschiebe es bei jedem Upgrade mit all meinen anderen Dateien von einem Computer auf einen anderen. Hin und wieder, wenn ich ein bisschen nostalgisch bin, öffne ich es und schaue durch die Bilder. Es gibt einige GIF-Dateien mit Animation, und jedes Mal, wenn ich bemerke, dass der Standard-Bildbetrachter von Windows 7 dies nicht unterstützt. Ich erinnerte mich, dass der Bildbetrachter von Windows XP GIF-Animationen richtig abspielen konnte. Daher habe ich einige Zeit damit verbracht, einige Hindernisse zu überwinden und den alten Bildbetrachter unter modernen Windows auszuführen. Zu diesem Zweck wurde ein kleiner Launcher erstellt. Jetzt kann ich diese alten Bilder in der authentischen Oberfläche des alten Bildbetrachters von Windows XP ansehen.


Download: shimgvw_xp32.7z (enthält einen Binär- und Quellcode des Launchers sowie die Datei shimgvw.dll aus dem englischen Windows XP SP3).

Wie wurde es gemacht?


Der Standard-Bildbetrachter unter Windows XP ist nicht nur eine Anwendung. Es wird vom Windows Explorer aus der dynamischen Bibliothek shlimgvw.dll ausgeführt. Es ist nicht möglich, es direkt auszuführen. Zu diesem Zweck benötigen Sie einen Mediator wie rundll32 (Pfad zu einer vorhandenen Bilddatei ist erforderlich):

rundll32 c:\windows\system32\shimgvw.dll,ImageView_Fullscreen c:\test.gif 

Dieser Trick funktioniert jedoch nicht, wenn Sie versuchen, shimgvw.dll unter Windows XP unter Windows 7 auszuführen. Für shimgvw.dll muss der Windows XP-Kompatibilitätsmodus aktiviert sein. Es ist möglich, dies zu tun, indem dieser Kompatibilitätsmodus für eine Kopie von rundll32 festgelegt wird. Dies ist jedoch ein hässlicher Hack und führt dazu, dass bei jedem Durchlauf des Viewers ein UAC-Dialogfeld angezeigt wird. Daher ist dies nicht angemessen.

Nach einer kurzen Debugging-Sitzung fand ich den Schuldigen. Die Datei shimgvw.dll importiert implizit einige veraltete Shell-Funktionen aus der Datei shunimpl.dll, und die letztere Bibliothek lehnt das Laden ab, wenn kein ATOM „FailObsoleteShellAPIs“ vorhanden ist (andernfalls wird sie ordnungsgemäß geladen, aber die veralteten Funktionen geben Fehlercodes zurück). Der Windows XP-Kompatibilitätsmodus fügt dieses ATOM hinzu (zusätzlich zu vielen anderen Dingen). Deshalb kann der Bildbetrachter in diesem Modus ausgeführt werden.

Ein leichter Lader für die shimgvw.dll wurde implementiert. Es fügt ATOM "FailObsoleteShellAPIs" hinzu, fragt, welches Image geöffnet werden soll (wenn es nicht als Argument übergeben wurde), und übergibt dann die Ausführung an shimgvw.dll. Der Viewer funktioniert ordnungsgemäß, daher habe ich nicht untersucht, wofür diese veralteten Shell-Funktionen verwendet werden. Zumindest ist es nicht entscheidend.

Source: https://habr.com/ru/post/de437436/


All Articles