Hans Leidekker <hans(a)codeweavers.com> writes:
> BOOL WINAPI GetVolumePathNamesForVolumeNameW(LPCWSTR volumename, LPWSTR volumepathname, DWORD buflen, PDWORD returnlen)
> {
> - FIXME("(%s, %p, %d, %p), stub!\n", debugstr_w(volumename), volumepathname, buflen, returnlen);
> - SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
> - return FALSE;
> + static const WCHAR prefixW[] =
> + {'\\','\\','?','\\','V','o','l','u','m','e','{','0','0','0','0','0','0','0','0','-','0','0','0','0','-',
> + '0','0','0','0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0','0'};
> + static const WCHAR fmtW[] = {'%','c',':','\\',0};
> +
> + TRACE("%s, %p, %u, %p\n", debugstr_w(volumename), volumepathname, buflen, returnlen);
> +
> + if (!volumename || strlenW( volumename ) != 49 ||
> + volumename[47] != '}' || memcmp( volumename, prefixW, sizeof(prefixW) ))
> + {
> + SetLastError( ERROR_INVALID_NAME );
> + return FALSE;
> + }
> + if (returnlen)
> + {
> + *returnlen = 5;
> + }
> + if (buflen < 5 || !volumepathname)
> + {
> + SetLastError( ERROR_MORE_DATA );
> + return FALSE;
> + }
> + sprintfW( volumepathname, fmtW, strtolW( volumename + 45, NULL, 16 ) );
> + volumepathname[4] = 0;
> + return TRUE;
Please don't make assumption about volume guids. This should be
implemented by retrieving the correct data from mountmgr.
--
Alexandre Julliard
julliard(a)winehq.org