From: Paul Gofman pgofman@codeweavers.com
--- dlls/wbemprox/builtin.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c index 9e5161755a3..173cba2818f 100644 --- a/dlls/wbemprox/builtin.c +++ b/dlls/wbemprox/builtin.c @@ -2413,21 +2413,27 @@ done: static UINT64 get_freespace( const WCHAR *dir, UINT64 *disksize ) { WCHAR root[] = L"\\.\A:"; - ULARGE_INTEGER free; + ULARGE_INTEGER free, total; DISK_GEOMETRY_EX info; HANDLE handle; DWORD bytes_returned;
free.QuadPart = 512 * 1024 * 1024; - GetDiskFreeSpaceExW( dir, NULL, NULL, &free ); - - root[4] = dir[0]; - handle = CreateFileW( root, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); - if (handle != INVALID_HANDLE_VALUE) + if (!GetDiskFreeSpaceExW( dir, NULL, &total, &free )) { - if (DeviceIoControl( handle, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, &info, sizeof(info), &bytes_returned, NULL )) - *disksize = info.DiskSize.QuadPart; - CloseHandle( handle ); + *disksize = 0; + root[4] = dir[0]; + handle = CreateFileW( root, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); + if (handle != INVALID_HANDLE_VALUE) + { + if (DeviceIoControl( handle, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, &info, sizeof(info), &bytes_returned, NULL )) + *disksize = info.DiskSize.QuadPart; + CloseHandle( handle ); + } + } + else + { + *disksize = total.QuadPart; } return free.QuadPart; }