Na, a mai alkalom akkor annyira volt elég, hogy lefordítsam a cuccot, összelőjem a GDB -t ( mindenféle vackok kellenek meg az IstvanV mingw -jéhez hogy a GDB is menjen ), meg begerjesszem a virtuális floppy mókát, meg kicsit megismerkedjek a GDB -vel, de mostmár akkor a következő időkben tudok majd effektíven a problémával is foglalkozni.
(Nem is baj, hogy kicsit ezzel is megismerkedek, ki tudja mikor fog kelleni...)
Egyetlen kézzelfogható eredmenye a mostani szessönnek, hogy a mérhetetlen debuggolások közepedte felismertem, hogy amit mondasz CreateFile, az le sem fut a mi esetünkben ...
Ezért kell a debugger, mert ketten is néztük, mégsem lattuk:
#ifdef WIN32
if (std::strlen(fileName) < 5)
return 0; // return value == 0: regular file
if (!(fileName[0] == '\\' && fileName[1] == '\\' &&
fileName[2] == '.' && fileName[3] == '\\')) {
return 0;
}
DISK_GEOMETRY diskGeometry;
HANDLE h = INVALID_HANDLE_VALUE;
DWORD tmp;
bool retryFlag = false;
while (true) {
h = CreateFileA(fileName, (DWORD) 0,
FILE_SHARE_READ | FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES) 0, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, (HANDLE) 0);
if (h == INVALID_HANDLE_VALUE)
return -1; // return value == -1: error opening device
if (DeviceIoControl(h, IOCTL_DISK_GET_DRIVE_GEOMETRY,
(LPVOID) 0, (DWORD) 0,
&diskGeometry, (DWORD) sizeof(diskGeometry),
&tmp, (LPOVERLAPPED) 0) == FALSE) {
Ha megnézed az első 2 if -et, akkor látod, hogy ha a bejövő filename (ami a mi esetünkben most : "\\.\A:" ugye ...) hossza kisebb mint 5 karakter, vagy az eleje megegyezik a "\\.\" -rel, akkor ez a függvény egyből visszatér ...
Szal ennek a CreateFile -nak semmi köze a dologhoz ...
Ezt az első 2 if -et esetleg már hekkelte valaki ? Vagy ez így volt már akkor is, mikor még jól működött az emu ?