Le transfert de fichiers via une disquette était lent et bruyant, et mon enthousiasme ne connaissait aucune limite lorsque j'ai trouvé le pilote Virtual Floppy Drive, qui vous permet de créer un "lecteur de disquette virtuel" et de le connecter à la VM comme d'habitude. Malheureusement, l'intérêt de l'auteur pour son projet s'est estompé en 2005, et en 2010, son site Web et son courrier électronique ont cessé d'exister. Depuis, de nombreux changements sont intervenus dans le monde Windows:
- Le système d'exploitation 64 bits est largement utilisé, dans lequel il est impossible de charger le pilote 32 bits compilé en 2005;
- Windows à partir de Vista SP1 a commencé à exiger soit une signature numérique, soit des manipulations lugubres qui nécessitent un redémarrage du système pour charger les pilotes;
- Un projet écrit en Visual C ++ 6 n'est pas créé dans les versions modernes de Visual Studio après la conversion automatique.
Déjà en 2011, la liste de diffusion des développeurs ReactOS discutait de la prise en charge d'un projet abandonné; mais sans le consentement de l'auteur lui-même, cela ne pouvait se produire et, à ce moment-là, l'auteur n'avait pas montré de signes de vie depuis plusieurs années. Au même moment, un certain Andriy G. Tereshchenko a créé un miroir non officiel vfd.sourceforge.net avec une copie du site Web de l'auteur disparu. SourceForge a toujours la version 2005 là-bas, et il y a encore des plaintes que cette version ne fonctionne pas sous Windows 7+.
Je voulais continuer à développer VFD sur github.com/tyomitch/vfd ; même si vous êtes indifférent à VFD lui-même, alors mon histoire peut vous aider à "relancer" d'autres projets abandonnés sous Windows.
Compilation
Visual Studio 2019 s'engage à ouvrir
vfd.dsw
et à convertir ses projets constitutifs dans un format moderne; mais la conversion est incomplète, donc les projets convertis refusent de se compiler.
J'ai trouvé les problèmes suivants:
- L'appel Message Compiler (
mc $(InputName)
) a été converti de manière incorrecte - au lieu demc %(Filename)
VS2019, il devrait l'êtremc %(FullPath)
. Les noms des fichiers produits pour le MC ($(InputName).h
et$(InputName).rc
) ne sont pas du tout convertis; dans VS2019, ils devraient ressembler à%(Filename).h
et%(Filename).rc
. - Les noms de fichiers produits pour Resource Compiler (
$(IntDir)\$(InputName).res
) n'étaient pas non plus convertis; dans VS2019, ils devraient ressembler à$(IntDir)\%(Filename).res
. <TargetName>
doit être changé de default ($(ProjectName)
)vfd
à projectvfdlib
etvfdwin
projectvfdwin
, sinon ils essaient de construirelib.dll
etgui.exe
.- Pour compiler VFD sans zlib, vous devez non seulement ajouter aux définitions
VFD_NO_ZLIB
, mais également supprimer le#include "zlib.h"
sous#ifndef VFD_NO_ZLIB
- l'auteur l'a oublié pour une raison quelconque; et doit être supprimézlibstat.lib
de<AdditionalDependencies>
.
Après ces correctifs, les versions 32 bits
vfd.dll
et vfdwin.exe
; mais pour créer des versions 64 bits, vous devez travailler davantage.
Adaptation pour x64
Tout d'abord, le code lui-même est incompatible avec x64, et vous devez remplacer
- le type de retour de tout
DlgProc
deBOOL
àINT_PTR
; - tous les appels
GetWindowLong(GWL_USERDATA)
àGetWindowLongPtr(GWLP_USERDATA)
et sont similaires pourSetWindowLong
et pourDWL_MSGRESULT
etDWL_USER
.
Deuxièmement, il n'est pas utilisé dans les paramètres du projet converti
$(Platform)
, car au moment de VC6, il ne pouvait y avoir qu'une seule plate-forme; et par conséquent, les fichiers 32 bits et 64 bits tentent de se rassembler dans les mêmes répertoires. Pour leur race, doivent être corrigées sur les $(IntDir)
valeurs <AssemblerListingLocation>
, <PrecompiledHeaderOutputFile>
, <ObjectFileName>
, <ProgramDataBaseFileName>
; <OutputFile>
pour l'éditeur de liens, fixez à $(TargetPath)
; et supprimez les <AdditionalLibraryDirectories>
dépendances inutiles , en ajoutant manuellement entre les projets et <PostBuildEvent>
en copiant manuellement les fichiers compilés dans le répertoire cible.
Troisièmement, il
vfdwin
résiste activement à essayer de s'exécuter sur Windows 64 bits, ainsi qu'à essayer de s'exécuter sur Windows 95/98 / Me. Pour arrêter cela, vous devez supprimer la fonction VfdIsValidPlatform()
et toutes les références à celle-ci.
Téléchargement du pilote
Je n'ai pas de DDK Windows sous la main, j'ai donc pris un DDK 64 bits
vfd.sys
compilé par un certain critique0 et j'ai demandéDartraidensignez-le à la «manière chinoise antique». Un tel pilote se charge et fonctionne correctement s'il est vfdwin
lancé avec des droits d'administrateur; pour que cela se produise toujours, vous devez ajouter ses options de lien <UACExecutionLevel>RequireAdministrator
.
Un autre passionné, Igor Levicki, a consacré un article de blog entier à la compilation
vfd.sys
pour x64, et affirme que sa version est vfd.sys
meilleure que critique0; mais il est signé avec un certificat maison et ne se chargera pas sans gestes supplémentaires. En plus du certificat maison, l'ambitieux Igor Levicki a ajouté une mention de lui-même et de son blog au dossier du pilote; Critical0 n'a pas fait une telle absurdité.
En utilisant
En plus des modifications répertoriées, je viens de remplacer l'URL morte depuis longtemps dans la fenêtre À propos de github.com/tyomitch/vfd et j'ai corrigé un bogue dans le shell, qui n'est perceptible que lors de la compilation de débogage: la fonction
VfdGetLocalLink
passe un paramètre de type CHAR
à isalpha()
et effectue un vidage sur une ligne _ASSERTE(c >= -1 && c <= 255);
de la bibliothèque standard. Comme expliqué dans un habrapost récent , le comportement n'est isalpha()
pas défini pour les nombres négatifs, mais CHAR
sous Windows, il est simplement signé. À en juger par le fait que 141 avertissements sont émis lors de la compilation, il peut y avoir encore beaucoup de bogues de ce type dans le code; alors j'aurai quelque chose à voir avec mes soirées libres.
Les binaires prêts se trouvent sur github.com/tyomitch/vfd/tree/master/x64/Debug