Alexandre Goujon ale.goujon@gmail.com writes:
dlls/kernel32/volume.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/volume.c b/dlls/kernel32/volume.c index 8377e41..67e2eb1 100644 --- a/dlls/kernel32/volume.c +++ b/dlls/kernel32/volume.c @@ -1441,19 +1441,26 @@ DWORD WINAPI GetLogicalDrives(void) DWORD ret = 0; int i;
- if (!(buffer = HeapAlloc( GetProcessHeap(), 0, strlen(config_dir) + sizeof("/dosdevices/a:") )))
- if (!(buffer = HeapAlloc( GetProcessHeap(), 0, strlen(config_dir) + sizeof("/dosdevices/a::") ))) { SetLastError( ERROR_NOT_ENOUGH_MEMORY ); return 0; } strcpy( buffer, config_dir );
- strcat( buffer, "/dosdevices/a:" );
- dev = buffer + strlen(buffer) - 2;
strcat( buffer, "/dosdevices/a::" );
dev = buffer + strlen(buffer) - 3;
for (i = 0; i < 26; i++) { *dev = 'a' + i;
dev[2] = 0; if (!stat( buffer, &st )) ret |= (1 << i);
/* Windows also report empty drives as available */
else
{
dev[2] = ':';
if (!stat( buffer, &st )) ret |= (1 << i);
}
You can't do that, the device symlinks don't reflect the availability of the drive. It would have to go through the mountmgr.