bool Win32AudioCDManager::tryAddDrive(char drive, DriveList &drives) { Common::String drivePath = Common::String::format("%c:\\", drive); // Ensure it's an actual CD drive if (GetDriveTypeA(drivePath.c_str()) != DRIVE_CDROM) return false; debug(2, "Detected drive %c:\\ as a CD drive", drive); drives.push_back(drive); return true; }
bool Win32AudioCDManager::openCD(int drive) { // Fetch the drive list DriveList drives = detectDrives(); if (drive >= (int)drives.size()) return false; debug(1, "Opening CD drive %c:\\", drives[drive]); // Construct the drive path and try to open it Common::String drivePath = Common::String::format("\\\\.\\%c:", drives[drive]); _driveHandle = CreateFileA(drivePath.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (_driveHandle == INVALID_HANDLE_VALUE) { warning("Failed to open drive %c:\\, error %d", drives[drive], (int)GetLastError()); return false; } if (!loadTOC()) { close(); return false; } return true; }
void EnumerateDrivesAndPartitions() { WCHAR name[MAX_PATH+1]; for (DWORD i=0; i<1024; i++) { wsprintf(name, L"\\\\.\\PhysicalDrive%d", i); auto h = CreateFile(name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); if (h==INVALID_HANDLE_VALUE) continue; auto d = new Drive(); d->Init(h, i, name); g_drives.push_back(shared_ptr<Drive>(d)); CloseHandle(h); } }