Floppy drives can be reassigned, and other things can end up on A: and B:. Check the actual device type.
This commit is contained in:
@@ -58,6 +58,23 @@ void MemoryCardDriverThreaded_Windows::Reset()
|
|||||||
m_dwLastLogicalDrives = 0;
|
m_dwLastLogicalDrives = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool IsFloppyDrive( char c )
|
||||||
|
{
|
||||||
|
char szBuf[1024];
|
||||||
|
|
||||||
|
QueryDosDevice( ssprintf("%c:", c), szBuf, 1024 );
|
||||||
|
|
||||||
|
char *p = szBuf;
|
||||||
|
while( *p )
|
||||||
|
{
|
||||||
|
if( BeginsWith(p, "\\Device\\Floppy") )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
p += strlen(p)+1;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool MemoryCardDriverThreaded_Windows::DoOneUpdate( bool bMount, vector<UsbStorageDevice>& vStorageDevicesOut )
|
bool MemoryCardDriverThreaded_Windows::DoOneUpdate( bool bMount, vector<UsbStorageDevice>& vStorageDevicesOut )
|
||||||
{
|
{
|
||||||
DWORD dwNewLogicalDrives = ::GetLogicalDrives();
|
DWORD dwNewLogicalDrives = ::GetLogicalDrives();
|
||||||
@@ -74,11 +91,13 @@ bool MemoryCardDriverThreaded_Windows::DoOneUpdate( bool bMount, vector<UsbStora
|
|||||||
|
|
||||||
const int MAX_DRIVES = 26;
|
const int MAX_DRIVES = 26;
|
||||||
CString sDrives;
|
CString sDrives;
|
||||||
for( int i=2; i<MAX_DRIVES; i++ ) // skip 'a:" and "b:"
|
for( int i=0; i<MAX_DRIVES; ++i )
|
||||||
{
|
{
|
||||||
DWORD mask = (1 << i);
|
DWORD mask = (1 << i);
|
||||||
if( !(dwNewLogicalDrives & mask) )
|
if( !(dwNewLogicalDrives & mask) )
|
||||||
continue; // drive letter is invalid
|
continue; // drive letter is invalid
|
||||||
|
if( IsFloppyDrive(i+'a') )
|
||||||
|
continue;
|
||||||
|
|
||||||
CString sDrive = ssprintf( "%c:\\", 'a'+i%26 );
|
CString sDrive = ssprintf( "%c:\\", 'a'+i%26 );
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user