From: robert robert.ayrapetyan@gmail.com
--- dlls/kernelbase/volume.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/dlls/kernelbase/volume.c b/dlls/kernelbase/volume.c index d4895228525..623892e3bc7 100644 --- a/dlls/kernelbase/volume.c +++ b/dlls/kernelbase/volume.c @@ -127,7 +127,11 @@ static DWORD get_mountmgr_drive_type( LPCWSTR root ) DWORD br;
memset( &data, 0, sizeof(data) ); - if (root) data.letter = root[0]; + if (root) + { + if (wcslen(root) < 3 || root[1] != ':' || root[2] != '\') return DRIVE_UNKNOWN; + data.letter = root[0]; + } else { WCHAR curdir[MAX_PATH]; @@ -580,13 +584,13 @@ UINT WINAPI DECLSPEC_HOTPATCH GetDriveTypeW( LPCWSTR root ) HANDLE handle; UINT ret;
+ ret = get_mountmgr_drive_type( root ); + if (ret != DRIVE_UNKNOWN) { + return ret; + } + if (!open_device_root( root, &handle )) { - /* CD ROM devices do not necessarily have a volume, but a drive type */ - ret = get_mountmgr_drive_type( root ); - if (ret == DRIVE_CDROM || ret == DRIVE_REMOVABLE) - return ret; - return DRIVE_NO_ROOT_DIR; }