Einmal auf eine Zeit hatte ich eine Sammlung von alten Versionen von Windows in virtuellen Maschinen, und ich hatte eine Diskette zur Übertragung von Dateien zwischen dem Host - Rechner und diesen virtuellen Maschinen zu verwenden, da freigegebene Ordner unterstützen erschienen nur in Windows for Workgroups.
Das Übertragen von Dateien per Diskette war langsam und laut, und meine Aufregung kannte keine Grenzen, als ich den Treiber für das virtuelle Diskettenlaufwerk fand, mit dem Sie ein "virtuelles Diskettenlaufwerk" erstellen und es wie gewohnt mit der VM verbinden können. Leider schwand das Interesse des Autors an seinem Projekt im Jahr 2005 und im Jahr 2010 existierten seine Website und seine E-Mail-Adresse nicht mehr. Seitdem haben sich in der Windows-Welt viele Änderungen ergeben:
- Das 64-Bit-Betriebssystem ist weit verbreitet, in das der 2005 kompilierte 32-Bit-Treiber nicht geladen werden kann.
- Windows ab Vista SP1 erforderte entweder eine digitale Signatur oder trostlose Manipulationen, die einen Neustart des Systems zum Laden der Treiber erfordern.
- Ein in Visual C ++ 6 geschriebenes Projekt wird nach der automatischen Konvertierung nicht in modernen Versionen von Visual Studio erstellt.
Bereits 2011 wurde in der Mailingliste der ReactOS-Entwickler die Unterstützung für ein aufgegebenes Projekt erörtert . aber ohne die Zustimmung des Autors selbst konnte dies nicht geschehen, und zu diesem Zeitpunkt hatte der Autor mehrere Jahre lang keine Lebenszeichen gezeigt. Zur gleichen Zeit erstellte ein gewisser Andriy G. Tereshchenko einen inoffiziellen Spiegel vfd.sourceforge.net mit einer Kopie der Website des verschwundenen Autors. SourceForge hat dort immer noch Version 2005 und es gibt immer noch Beschwerden, dass diese Version unter Windows 7+ nicht funktioniert.
Ich wollte VFD unter github.com/tyomitch/vfd weiterentwickeln . Selbst wenn Ihnen VFD selbst gleichgültig ist, kann meine Geschichte Ihnen helfen, andere aufgegebene Projekte unter Windows wiederzubeleben.
Zusammenstellung
Visual Studio 2019 erklärt sich damit einverstanden
vfd.dsw, seine Teilprojekte zu öffnen und in ein modernes Format umzuwandeln. Die Konvertierung ist jedoch unvollständig, sodass die konvertierten Projekte nicht kompiliert werden können.
Ich habe folgende Probleme festgestellt:
- Der Aufruf von Message Compiler (
mc $(InputName)) wurde falsch konvertiert - anstelle vonmc %(Filename)VS2019 sollte dies der Fall seinmc %(FullPath). Namen von Dateien, die für den MC ($(InputName).hund$(InputName).rc) erstellt wurden, werden überhaupt nicht konvertiert. In VS2019 sollten sie wie%(Filename).hund aussehen%(Filename).rc. - Produzierte Dateinamen für Resource Compiler (
$(IntDir)\$(InputName).res) wurden ebenfalls nicht konvertiert. in VS2019 sollten sie so aussehen$(IntDir)\%(Filename).res. <TargetName>muss von default ($(ProjectName))vfdin projectvfdlibundvfdwinproject geändert werdenvfdwin, andernfalls versuchen sie,lib.dllund zu erstellengui.exe.- Um VFD ohne zlib zu kompilieren, müssen Sie nicht nur die Definitionen ergänzen
VFD_NO_ZLIB, sondern auch das#include "zlib.h"Sub entfernen#ifndef VFD_NO_ZLIB- der Autor hat dies aus irgendeinem Grund vergessen; und muss entfernt werdenzlibstat.libvon<AdditionalDependencies>.
Nach diesen Korrekturen 32-Bit-Versionen
vfd.dllund vfdwin.exe; Um 64-Bit-Versionen zu erstellen, müssen Sie jedoch mehr arbeiten.
Anpassung für x64
Erstens ist der Code selbst nicht mit x64 kompatibel und muss ersetzt werden
- der Rückgabetyp aller
DlgProcvonBOOLbisINT_PTR; - Alle Anrufe
GetWindowLong(GWL_USERDATA)anGetWindowLongPtr(GWLP_USERDATA)und sind fürSetWindowLongund fürDWL_MSGRESULTund ähnlichDWL_USER.
Zweitens wird es in den Einstellungen des konvertierten Projekts nicht verwendet
$(Platform), da es zum Zeitpunkt von VC6 nur eine Plattform geben konnte. Daher versuchen 32-Bit- und 64-Bit-Dateien, in denselben Verzeichnissen zu sammeln. Um ihre Rasse, muss sich auf die korrigiert werden $(IntDir)Werte <AssemblerListingLocation>, <PrecompiledHeaderOutputFile>, <ObjectFileName>, <ProgramDataBaseFileName>; <OutputFile>für den Linker fixieren auf $(TargetPath); und entfernen Sie die nutzlosen <AdditionalLibraryDirectories>, manuellen Hinzufügen von Abhängigkeiten zwischen Projekten und das <PostBuildEvent>manuelle Kopieren der kompilierten Dateien in das Zielverzeichnis.
Drittens
vfdwinwidersetzt es sich aktiv dem Versuch, unter 64-Bit-Windows sowie unter Windows 95/98 / Me ausgeführt zu werden. Um dies zu stoppen, müssen Sie die Funktion VfdIsValidPlatform()und alle Verweise darauf löschen .
Treiber herunterladen
Ich habe kein Windows-DDK zur Hand, also habe ich ein 64-Bit-DDK genommen,
vfd.sysdas von einem bestimmten Critical0 kompiliert wurde, und gefragtDartraidenUnterschreiben Sie es auf "alte chinesische Weise". Ein solcher Treiber wird geladen und funktioniert erfolgreich, wenn er vfdwinmit Administratorrechten gestartet wird. Damit dies immer geschieht, müssen Sie die Verknüpfungsoptionen hinzufügen <UACExecutionLevel>RequireAdministrator.
Ein anderer Enthusiast, Igor Levicki, hat einen ganzen Blog-Beitrag dem Kompilieren
vfd.sysfür x64 gewidmet und behauptet, seine Version sei vfd.sys besser als kritisch0; Es ist jedoch mit einem selbstgemachten Zertifikat signiert und wird ohne zusätzliche Gesten nicht geladen. Zusätzlich zu dem selbstgemachten Zertifikat hat der ehrgeizige Igor Levicki eine Erwähnung von sich und seinem Blog in die Treiberdatei aufgenommen. Critical0 hat keinen solchen Unsinn gemacht.
Verwenden von
Zusätzlich zu diesen Änderungen, ersetzt ich nur die langen tote URL im Info - Fenstern auf github.com/tyomitch/vfd und fixierte einen Fehler in der Schale, die spürbar während Debug - Kompilierung nur ist: die Funktion
VfdGetLocalLinkeines Typ - Parameter übergibt CHARan isalpha()und Dumps auf einer Linie _ASSERTE(c >= -1 && c <= 255);in der Standardbibliothek. Wie in einem kürzlich veröffentlichten Habrapost erläutert , ist das Verhalten isalpha()nicht für negative Zahlen definiert, sondern CHARin Windows nur signiert. Gemessen an der Tatsache, dass während der Kompilierung 141 Warnungen ausgegeben werden, enthält der Code möglicherweise noch viele solcher Fehler. also werde ich etwas mit meinen freien Abenden zu tun haben.
Bereit binäre Binärdateien finden Sie unter github.com/tyomitch/vfd/tree/master/x64/Debug