Mentransfer file melalui floppy lambat dan berisik, dan kegembiraan saya tidak terbatas ketika saya menemukan driver Floppy Drive Virtual, yang memungkinkan Anda membuat "drive floppy virtual" dan menghubungkannya ke VM seperti biasa. Sayangnya, ketertarikan penulis pada proyeknya memudar pada tahun 2005, dan pada tahun 2010 situs web dan emailnya tidak ada lagi. Sejak itu, banyak perubahan terjadi di dunia Windows:
- OS 64-bit banyak digunakan, di mana tidak mungkin untuk memuat driver 32-bit yang dikompilasi pada tahun 2005;
- Windows mulai dari Vista SP1 mulai memerlukan tanda tangan digital atau manipulasi suram yang memerlukan booting ulang sistem untuk memuat driver;
- Proyek yang ditulis dalam Visual C ++ 6 tidak dibangun dalam versi Visual Studio modern setelah konversi otomatis.
Sudah pada tahun 2011, milis pengembang ReactOS membahas penyediaan dukungan untuk proyek yang ditinggalkan; tetapi tanpa persetujuan penulis sendiri, ini tidak mungkin terjadi, dan pada saat itu penulis belum menunjukkan tanda-tanda kehidupan selama beberapa tahun. Kemudian seorang Andriy G. Tereshchenko membuat mirror tidak resmi vfd.sourceforge.net dengan salinan situs web penulis yang hilang. SourceForge masih memiliki versi 2005 di sana, dan masih ada keluhan bahwa versi ini tidak berfungsi di Windows 7+.
Saya ingin terus mengembangkan PKS di github.com/tyomitch/vfd ; bahkan jika Anda acuh tak acuh terhadap PKS itu sendiri, maka cerita saya dapat membantu Anda untuk "menghidupkan kembali" proyek lain yang ditinggalkan di bawah Windows.
Kompilasi
Visual Studio 2019 setuju untuk membuka
vfd.dsw
dan mengubah proyek konstituennya ke format modern; tetapi konversi belum selesai, sehingga proyek yang dikonversi menolak untuk dikompilasi.
Saya menemukan masalah berikut:
- Panggilan Message Compiler (
mc $(InputName)
) diubah dengan tidak benar - alih-alihmc %(Filename)
di VS2019, panggilan seharusnya diubahmc %(FullPath)
. Nama file yang dibuat untuk MC ($(InputName).h
dan$(InputName).rc
) tidak dikonversi sama sekali; di VS2019, mereka akan terlihat seperti%(Filename).h
dan%(Filename).rc
. - Nama file yang dihasilkan untuk Resource Compiler (
$(IntDir)\$(InputName).res
) juga tidak dikonversi; di VS2019 mereka akan terlihat seperti$(IntDir)\%(Filename).res
. <TargetName>
perlu diubah dari default ($(ProjectName)
)vfd
menjadi proyekvfdlib
danvfdwin
proyekvfdwin
, jika tidak mereka mencoba membangunlib.dll
dangui.exe
.- Untuk mengkompilasi VFD tanpa zlib, Anda tidak hanya perlu menambahkan definisi
VFD_NO_ZLIB
, tetapi juga menghapus#include "zlib.h"
sub#ifndef VFD_NO_ZLIB
- penulis untuk beberapa alasan lupa tentang ini; dan perlu dihapuszlibstat.lib
dari<AdditionalDependencies>
.
Setelah perbaikan ini, versi 32-bit
vfd.dll
dan vfdwin.exe
; tetapi untuk membangun versi 64-bit, Anda perlu bekerja lebih keras.
Adaptasi untuk x64
Pertama, kodenya sendiri tidak kompatibel dengan x64, dan Anda perlu mengganti
- jenis pengembalian semua
DlgProc
dariBOOL
keINT_PTR
; - semua panggilan
GetWindowLong(GWL_USERDATA)
keGetWindowLongPtr(GWLP_USERDATA)
dan serupa untukSetWindowLong
dan untukDWL_MSGRESULT
danDWL_USER
.
Kedua, ini tidak digunakan dalam pengaturan proyek yang dikonversi
$(Platform)
, karena pada saat VC6 hanya ada satu platform; dan oleh karena itu, file 32-bit dan 64-bit mencoba dikumpulkan di direktori yang sama. Untuk berkembang biak mereka, harus dikoreksi pada $(IntDir)
nilai-nilai <AssemblerListingLocation>
, <PrecompiledHeaderOutputFile>
, <ObjectFileName>
, <ProgramDataBaseFileName>
; <OutputFile>
untuk penghubung, perbaiki ke $(TargetPath)
; dan menghapus yang tidak berguna <AdditionalLibraryDirectories>
, menambahkan ketergantungan antar proyek <PostBuildEvent>
secara manual , dan secara manual menyalin file yang dikompilasi ke direktori target.
Ketiga,
vfdwin
secara aktif menolak mencoba berjalan pada Windows 64-bit, serta mencoba berjalan pada Windows 95/98 / Me. Untuk menghentikan ini, Anda perlu menghapus fungsi VfdIsValidPlatform()
dan semua referensi ke dalamnya.
Unduh driver
Saya tidak memiliki Windows DDK, jadi saya mengambil 64-bit yang
vfd.sys
dikompilasi oleh critical0 tertentu dan bertanyadartraidenmenandatanganinya dengan "cara Cina kuno". Pengandar seperti itu memuat dan bekerja dengan sukses jika vfdwin
diluncurkan dengan hak administrator; agar ini selalu terjadi, Anda perlu menambahkan opsi tautannya <UACExecutionLevel>RequireAdministrator
.
Penggemar lain, Igor Levicki, telah mendedikasikan seluruh posting blog untuk mengkompilasi
vfd.sys
x64, dan mengklaim bahwa versinya vfd.sys
lebih baik daripada critical0; tetapi ditandatangani dengan sertifikat buatan sendiri dan tidak dapat dimuat tanpa isyarat tambahan. Selain sertifikat buatan sendiri, Igor Levicki yang ambisius menambahkan penyebutan dirinya dan blognya ke file driver; critical0 tidak melakukan omong kosong seperti itu.
Menggunakan
Selain perubahan yang terdaftar, saya baru saja mengganti URL yang sudah lama mati di jendela Tentang di github.com/tyomitch/vfd , dan memperbaiki satu bug di shell, yang hanya terlihat selama kompilasi debug: fungsi
VfdGetLocalLink
meneruskan parameter tipe CHAR
ke isalpha()
dan membuang pada baris _ASSERTE(c >= -1 && c <= 255);
di pustaka standar. Seperti dijelaskan dalam habrapost baru - baru ini , perilaku isalpha()
tidak ditentukan untuk angka negatif, tetapi CHAR
di Windows hanya ditandatangani. Dilihat dari fakta bahwa 141 peringatan dikeluarkan selama kompilasi, mungkin masih ada banyak bug seperti itu di dalam kode; jadi saya akan melakukan sesuatu dengan malam gratis saya.
Biner siap ada di github.com/tyomitch/vfd/tree/master/x64/Debug